專利名稱:分布式存儲系統(tǒng)及其時間戳的實現(xiàn)方法
技術領域:
本發(fā)明涉及云計算技術領域,尤其涉及一種分布式存儲系統(tǒng)及其時間戳的實現(xiàn)方法。
背景技術:
云計算(Cloud Computing)是網(wǎng)格計算(G rid Computing)、分布式計算(Distributed Computing)、并行計算(Parallel Computing)、效用計算(UtilityComputing)網(wǎng)絡存儲(Network Storage Technologies)、虛擬化(Virtualization)、負載均衡(Load Balance)等傳統(tǒng)計算機技術和網(wǎng)絡技術發(fā)展融合的產(chǎn)物。它旨在通過網(wǎng)絡把多個成本相對較低的計算實體整合成一個具有強大計算能力的系統(tǒng)。分布式存儲系統(tǒng)是云計算范疇中的一個領域,其作用是提供海量數(shù)據(jù)的分布式存儲服務以及高速讀寫訪問的能力。在分布式存儲系統(tǒng)中,時間戳的實現(xiàn)是比較難以解決的關鍵問題。分布式存儲系統(tǒng)是由若干服務器節(jié)點和客戶端互相連接構成的;服務器節(jié)點負責數(shù)據(jù)的存儲,客戶端可以對服務器做數(shù)據(jù)的寫入、讀取、更新、刪除等操作。一般來說寫入的數(shù)據(jù)不可能只保存在單個服務器節(jié)點上,而是在多臺服務器節(jié)點上保存同一個數(shù)據(jù)的副本,互為備份。當網(wǎng)絡偶然瞬間故障或者硬件、軟件故障,或者用戶對同一個數(shù)據(jù)頻繁、交叉地進行不同的操作,例如,更新、刪除等,則系統(tǒng)內(nèi)不同服務器節(jié)點上的數(shù)據(jù)副本會有不同的值。當用戶再次獲取該數(shù)據(jù)時,會發(fā)生取得的數(shù)據(jù)不是其最后更新后的值,背離了用戶的需求。為了保障在分布式存儲系統(tǒng)中,用戶取得的數(shù)據(jù)是其最后更新的數(shù)據(jù),即保障分布式存儲系統(tǒng)中數(shù)據(jù)的一致性,每個數(shù)據(jù)在實際存儲時,還要加上一些屬性信息。例如,時間戳。這樣用戶在獲取數(shù)據(jù)的時候,可以根據(jù)時間戳的大小,返回一個最大時間戳的數(shù)據(jù)給用戶。所謂分布式存儲系統(tǒng)中的時間戳是指系統(tǒng)中每個服務器節(jié)點都維持的一個反應該分布式存儲系統(tǒng)存活時間的數(shù)據(jù)。在任一時刻,系統(tǒng)中每個服務器節(jié)點的時間戳必須相同,而且隨著實際時間的增加,逐步遞增。在現(xiàn)有的分布式存儲系統(tǒng)中,時間戳的實現(xiàn)有以下幾種方法一在系統(tǒng)中選定一個服務器節(jié)點作為時間服務器,由該時間服務器周期性地向系統(tǒng)中的其它服務器節(jié)點廣播其維護的時間戳,其它服務器節(jié)點收到攜帶有時間戳的數(shù)據(jù)包后,更新其本地時間戳。這種方法是一個中心化的解決方法,其可靠性依賴于系統(tǒng)中的時間服務器的可靠性,如果時間服務器宕機,則影響到整個系統(tǒng)的時間戳;而且,普通服務器節(jié)點中更新的時間戳,是沒有計算數(shù)據(jù)包在網(wǎng)絡中傳輸?shù)臅r間的,也就是說,普通服務器節(jié)點的時間戳與時間服務器的時間戳之間存在微小的時差。另外,這種方法一旦時間服務器發(fā)送故障,則整個系統(tǒng)將無法正確更新時間戳。方法二 由系統(tǒng)中的每個服務器節(jié)點從Internet中的網(wǎng)絡時間協(xié)議(NetworkTime Protocol, NTP)時間服務器獲取權威的時間作為本節(jié)點的本地時間戳。這種方法依賴于外界的服務,一般很少采用。
發(fā)明內(nèi)容
本發(fā)明的目的是,提供一種分布式存儲系統(tǒng)及其時間戳的實現(xiàn)方法,以解決現(xiàn)有基于中心化的實現(xiàn)方法可靠性不高的問題。本發(fā)明提供了一種分布式存儲系統(tǒng)時間戳的實現(xiàn)方法,包括以下步驟上述系統(tǒng)的每個服務器節(jié)點均維護一個本地時間戳;
上述每個服務器節(jié)點周期性向系統(tǒng)中的其他服務器節(jié)點發(fā)送攜帶有本地維護的當前時間戳的數(shù)據(jù)包;上述每個服務器節(jié)點根據(jù)收到的數(shù)據(jù)包,更新本地時間戳。優(yōu)選地,上述每個服務器節(jié)點的本地維護的時間戳的初始值為0,從上述系統(tǒng)第一次運行起,每秒自增I。優(yōu)選地,上述每個服務器節(jié)點根據(jù)收到的數(shù)據(jù)包,更新本地時間戳步驟具體包括解析收到的數(shù)據(jù)包,得到時間戳和校驗位;判斷上述校驗位是否正確,若不正確,則不更新本地時間戳,并丟棄上述時間戳;若正確,則保存上述時間戳;判斷上述時間戳的值與上一次保存的時間戳的值之差是否在預設的校驗閾值范圍內(nèi),若上述差值不在上述校驗閾值范圍內(nèi),則不更新本地時間戳;若上述差值在上述校驗閾值范圍內(nèi),則判斷上述時間戳的值是否大于本地當前時間戳的值,若是,則用上述時間戳更新本地時間戳;否則,不更新本地時間戳。優(yōu)選地,上述系統(tǒng)中的服務器節(jié)點每隔I秒,將本地時間戳持久化到本地存儲的文件中。優(yōu)選地,若上述系統(tǒng)異常終止后又恢復正常運行,則上述每個服務器節(jié)點的本地時間戳從其終止前持久化的時間戳處繼續(xù)計時。優(yōu)選地,上述方法中,上述服務器節(jié)點同一時間僅保存兩個時間戳,當有新的時間戳保存進來時,先保存的時間戳自動溢出。優(yōu)選地,上述校驗閾值為上述服務器節(jié)點發(fā)送攜帶有時間戳的數(shù)據(jù)包的周期的I倍到I. 5倍。本發(fā)明進一步提供了一種分布式存儲系統(tǒng),包括相互連接的若干個服務器節(jié)點,上述服務器節(jié)點包括時間戳維護模塊、時間戳更新模塊,上述時間戳維護模塊,用于為本地提供時間戳,并周期性向系統(tǒng)中的其他服務器節(jié)點發(fā)送攜帶本地當前時間戳的數(shù)據(jù)包;上述時間戳更新模塊,用于根據(jù)收到的數(shù)據(jù)包,更新上述時間戳維護模塊的時間戳。優(yōu)選地,上述時間戳維護模塊,還用于提供設置發(fā)送攜帶有本地當前時間戳的數(shù)據(jù)包周期的接口,為上述時間戳每秒步進1,且每隔I秒,將上述時間戳持久化到本地存儲的文件中;并在系統(tǒng)異常終止后又恢復正常運行時,從終止前持久化的時間戳處繼續(xù)計時;上述時間戳更新模塊,還用于提供設置校驗閾值的接口,解析收到的數(shù)據(jù)包,并判斷解析得到的校驗位是否正確,以及在上述校驗位正確時,保存解析得到的時間戳,并判斷上述解析得到的時間戳的值與上一次保存的時間戳的值之差是否在上述校驗閾值范圍內(nèi),并在上述差值在上述校驗閾值范圍內(nèi)時,判斷上述時間戳的值是否大于上述時間戳維護模塊的當前時間戳的值,以及在上述時間戳的值大于上述時間戳維護模塊的當前時間戳的值時,用上述時間戳更新上述時間戳維護模塊的時間戳。優(yōu)選地,上述服務器節(jié)點還包括時間戳存儲模塊,用于存儲時間戳,并在有新的時間戳存入時,自動溢出先保存的時間戳。本發(fā)明通過在每個服務器節(jié)點上均維護一個時間戳,且周期性根據(jù)其他節(jié)點的時間戳更新本地時間戳的方法,保障了系統(tǒng)中每個服務器節(jié)點上的時間戳在任一時刻都相同,本發(fā)明各服務器節(jié)點的時間戳具有非常高的可靠性,是一個非中心化的解決方法,不會 因為系統(tǒng)中某個服務器節(jié)點的異常導致全系統(tǒng)時間戳的異常。
此處所說明的附圖用來提供對本發(fā)明的進一步理解,構成本發(fā)明的一部分,本發(fā)明的示意性實施例及其說明用于解釋本發(fā)明,并不構成對本發(fā)明的不當限定。在附圖中圖I是本發(fā)明分布式存儲系統(tǒng)時間戳的實現(xiàn)方法流程圖;圖2是本發(fā)明分布式存儲系統(tǒng)的原理框圖。
具體實施例方式為了使本發(fā)明所要解決的技術問題、技術方案及有益效果更加清楚、明白,以下結合附圖和實施例,對本發(fā)明進行進一步詳細說明。應當理解,此處所描述的具體實施例僅用以解釋本發(fā)明,并不用于限定本發(fā)明。如圖I所示,是本發(fā)明分布式存儲系統(tǒng)時間戳的實現(xiàn)方法流程圖,包括以下步驟步驟SOOl :分布式存儲系統(tǒng)的每個服務器節(jié)點均維護一個本地時間戳;各服務器節(jié)點每隔I秒將本地時間戳持久化到本地存儲的文件中。各服務器節(jié)點本地維護的時間戳的初始值均為0,從分布式存儲系統(tǒng)第一次運行起,各服務器節(jié)點的本地時間戳每秒自增I ;若分布式存儲系統(tǒng)異常終止后又恢復正常運行,則各服務器節(jié)點的本地時間戳從其終止前持久化的時間戳處繼續(xù)計時,比如,若終止前,持久化的時間戳的值為120,則系統(tǒng)正常運行后,即從120開始繼續(xù)計時。步驟S002 :各服務器節(jié)點周期性向系統(tǒng)中的其他服務器節(jié)點發(fā)送攜帶有本地維護的當前時間戳的數(shù)據(jù)包;各服務器節(jié)點通過系統(tǒng)初始化時建立的長鏈接向其他服務器節(jié)點發(fā)送攜帶有本地維護的當前時間戳的數(shù)據(jù)包。例如,可以預設各服務器節(jié)點每隔60秒發(fā)送一次攜帶有本地時間戳的數(shù)據(jù)包給系統(tǒng)中的其他服務器節(jié)點。
步驟S003 :各服務器節(jié)點解析收到的數(shù)據(jù)包,得到時間戳Tn和校驗位;步驟S004 :判斷上述解析得到的校驗位是否正確,若是,則執(zhí)行步驟S005 ;否則,執(zhí)行步驟S009 ;本發(fā)明中,當判斷出解析得到的校驗位錯誤時,則解析得到的時間戳Tn被丟棄。步驟S005 :保存上述時間戳Tn ;本發(fā)明中,各服務器節(jié)點同一時間僅保存兩個時間戳,當有新的時間戳保存進來時,先保存的時間戳自動溢出。比如,假設當前周期為第N個周期,且其前兩個周期的校驗位都正確,則在保存第N個周期收到的數(shù)據(jù)包攜 帶的時間戳Tn之前,保存的時間戳為第N-2個周期的時間戳TN_2和第N-I個周期的時間戳Tn+當保存第N個周期的時間戳Tn時,則第N-2個周期的時間戳TN_2自動溢出。步驟S006 :判斷上述時間戳Tn的值與上一次保存的時間戳Tim的值之差是否在預設的校驗閾值范圍內(nèi),若是,則執(zhí)行步驟S007 ;否則,執(zhí)行步驟S009 ;上述校驗閾值可設置為本服務器節(jié)點發(fā)送攜帶有時間戳的數(shù)據(jù)包的周期的I倍到I. 5倍,比如,若本服務器節(jié)點發(fā)送攜帶有時間戳的數(shù)據(jù)包的周期為60秒,則校驗閾值為60 90。若Tn-Tim不在校驗閾值范圍內(nèi),則表示該數(shù)據(jù)包在傳輸過程中發(fā)生異常。步驟S007 :判斷上述解析得到的時間戳Tn的值是否大于本地維護的當前時間戳的值,若是,則執(zhí)行步驟S008 ;否則,執(zhí)行步驟S009 ;步驟S005、S006以及S007有效地保障了各服務器節(jié)點上時間戳的一致,抑制了由于攜帶時間戳的數(shù)據(jù)包在傳輸過程中的異常而導致的其他服務器節(jié)點的時間戳異常的情況。步驟S008 :用上述時間戳Tn更新本地時間戳,本周期執(zhí)行結束;步驟S009 :不更新本地時間戳,本周期執(zhí)行結束。如圖2所示,是本發(fā)明分布式存儲系統(tǒng)的原理框圖,本實施例假設分布式存儲系統(tǒng)包括3個服務器節(jié)點,分別為10、20、30,每個服務器節(jié)點均包括時間戳維護模塊01、時間戳更新模塊02以及時間戳存儲模塊03,時間戳維護模塊01,用于為本地提供時間戳,為上述時間戳每秒步進1,且每隔I秒,將上述時間戳持久化到本地存儲的文件中;還用于提供設置發(fā)送攜帶有本地維護的當前時間戳的數(shù)據(jù)包的周期的接口,并周期性向系統(tǒng)中的其他服務器節(jié)點發(fā)送攜帶有本地當前時間戳的數(shù)據(jù)包,并在系統(tǒng)異常終止后又恢復正常運行時,從終止前持久化的時間戳處繼續(xù)計時;時間戳更新模塊02,提供設置校驗閾值的接口,解析收到的數(shù)據(jù)包,并判斷解析得到的校驗位是否正確,在上述校驗位正確時,將解析得到的時間戳Tn保存到時間戳存儲模塊03中,并判斷上述時間戳Tn的值與上一次保存的時間戳Tim的值之差是否在上述校驗閾值范圍內(nèi),并在上述差值在上述校驗閾值范圍內(nèi)時,判斷上述時間戳Tn的值是否大于時間戳維護模塊01的當前時間戳的值,以及在上述時間戳Tn的值大于時間戳維護模塊01的當前時間戳的值時,用上述時間戳Tn更新時間戳維護模塊01的時間戳。時間戳存儲模塊03,用于存儲解析得到的時間戳TN,并在有新的時間戳存入時,自動溢出先保存的時間戳。上述說明示出并描述了本發(fā)明的優(yōu)選實施例,但如前所述,應當理解本發(fā)明并非局限于本文所披露的形式,不應看作是對其他實施例的排除,而可用于各種其他組合、修改和環(huán)境,并能夠在本文所述發(fā)明構想范圍內(nèi),通過上述教導或相關領域的技術或知識進行 改動。而本領域人員所進行的改動和變化不脫離本發(fā)明的精神和范圍,則都應在本發(fā)明所附權利要求的保護范圍內(nèi)。
權利要求
1.一種分布式存儲系統(tǒng)時間戳的實現(xiàn)方法,其特征在于,包括以下步驟 所述系統(tǒng)的每個服務器節(jié)點均維護一個本地時間戳; 所述每個服務器節(jié)點周期性向系統(tǒng)中的其他服務器節(jié)點發(fā)送攜帶有本地維護的當前時間戳的數(shù)據(jù)包; 所述每個服務器節(jié)點根據(jù)收到的數(shù)據(jù)包,更新本地時間戳。
2.根據(jù)權利要求I所述的方法,其特征在于,所述每個服務器節(jié)點的本地維護的時間戳的初始值為O,從所述系統(tǒng)第一次運行起,每秒自增I。
3.根據(jù)權利要求I或2所述的方法,其特征在于,所述每個服務器節(jié)點根據(jù)收到的數(shù)據(jù)包,更新本地時間戳步驟具體包括 解析收到的數(shù)據(jù)包,得到時間戳和校驗位; 判斷所述校驗位是否正確,若不正確,則不更新本地時間戳,并丟棄所述時間戳;若正確,則 保存所述時間戳; 判斷所述時間戳的值與上一次保存的時間戳的值之差是否在預設的校驗閾值范圍內(nèi),若所述差值不在所述校驗閾值范圍內(nèi),則不更新本地時間戳;若所述差值在所述校驗閾值范圍內(nèi),則 判斷所述時間戳的值是否大于本地當前時間戳的值,若是,則用所述時間戳更新本地時間戳;否則,不更新本地時間戳。
4.根據(jù)權利要求I所述的方法,其特征在于,所述系統(tǒng)中的服務器節(jié)點每隔I秒,將本地時間戳持久化到本地存儲的文件中。
5.根據(jù)權利要求I或4所述的方法,其特征在于,若所述系統(tǒng)異常終止后又恢復正常運行,則所述每個服務器節(jié)點的本地時間戳從其終止前持久化的時間戳處繼續(xù)計時。
6.根據(jù)權利要求3所述的方法,其特征在于,所述方法中,所述服務器節(jié)點同一時間僅保存兩個時間戳,當有新的時間戳保存進來時,先保存的時間戳自動溢出。
7.根據(jù)權利要求3所述的方法,其特征在于,所述校驗閾值為所述服務器節(jié)點發(fā)送攜帶有時間戳的數(shù)據(jù)包的周期的I倍到I. 5倍。
8.一種分布式存儲系統(tǒng),包括相互連接的若干個服務器節(jié)點,其特征在于,所述服務器節(jié)點包括時間戳維護模塊、時間戳更新模塊, 所述時間戳維護模塊,用于為本地提供時間戳,并周期性向系統(tǒng)中的其他服務器節(jié)點發(fā)送攜帶本地當前時間戳的數(shù)據(jù)包; 所述時間戳更新模塊,用于根據(jù)收到的數(shù)據(jù)包,更新所述時間戳維護模塊的時間戳。
9.根據(jù)權利要求8所述的系統(tǒng),其特征在于, 所述時間戳維護模塊,還用于提供設置發(fā)送攜帶有本地當前時間戳的數(shù)據(jù)包的周期的接口,為所述時間戳每秒步進1,且每隔I秒,將所述時間戳持久化到本地存儲的文件中;并在系統(tǒng)異常終止后又恢復正常運行時,從終止前持久化的時間戳處繼續(xù)計時; 所述時間戳更新模塊,還用于提供設置校驗閾值的接口,解析收到的數(shù)據(jù)包,并判斷解析得到的校驗位是否正確,以及在所述校驗位正確時,保存解析得到的時間戳,并判斷所述解析得到的時間戳的值與上一次保存的時間戳的值之差是否在所述校驗閾值范圍內(nèi),并在所述差值在所述校驗閾值范圍內(nèi)時,判斷所述時間戳的值是否大于所述時間戳維護模塊的當前時間戳的值,以及在所述時間戳的值大于所述時間戳維護模塊的當前時間戳的值時,用所述時間戳更新所述時間戳維護模塊的時間戳。
10.根據(jù)權利要求8或9所述的系統(tǒng),其特征在于,所述服務器節(jié)點還包括時間戳存儲模塊,用于存儲時間戳,并在有新的時間戳存入時,自動溢出先保存的時間戳。
全文摘要
本發(fā)明涉及一種分布式存儲系統(tǒng)及其時間戳的實現(xiàn)方法,上述方法包括上述系統(tǒng)的每個服務器節(jié)點均維護一個本地時間戳,上述每個服務器節(jié)點周期性向系統(tǒng)中的其他服務器節(jié)點發(fā)送攜帶有本地維護的當前時間戳的數(shù)據(jù)包,上述每個服務器節(jié)點根據(jù)收到的數(shù)據(jù)包,更新本地時間戳;上述系統(tǒng)包括若干個服務器節(jié)點,上述服務器節(jié)點包括時間戳維護模塊、時間戳更新模塊以及時間戳存儲模塊。本發(fā)明具有非常高的可靠性。
文檔編號H04L29/08GK102821114SQ20111015151
公開日2012年12月12日 申請日期2011年6月7日 優(yōu)先權日2011年6月7日
發(fā)明者胡歡歡, 郭斌, 陳典強, 韓銀俊 申請人:南京中興新軟件有限責任公司