午夜毛片免费看,老师老少妇黄色网站,久久本道综合久久伊人,伊人黄片子

強(qiáng)一致性分布式數(shù)據(jù)存儲方法、裝置及系統(tǒng)的制作方法

文檔序號:7816300閱讀:297來源:國知局
強(qiáng)一致性分布式數(shù)據(jù)存儲方法、裝置及系統(tǒng)的制作方法
【專利摘要】本發(fā)明實(shí)施例提供一種強(qiáng)一致性分布式數(shù)據(jù)存儲方法、裝置及系統(tǒng),方法包括:緩存服務(wù)器接收客戶端發(fā)送的數(shù)據(jù)寫請求,數(shù)據(jù)寫請求中包括數(shù)據(jù)鍵值以及數(shù)據(jù)操作命令;緩存服務(wù)器由zookeeper服務(wù)器集群中獲取與數(shù)據(jù)鍵值對應(yīng)的自增序列號;緩存服務(wù)器計(jì)算自增序列號與緩存數(shù)據(jù)序列號之間的差值,判斷差值是否大于預(yù)定閾值,如果否,則根據(jù)數(shù)據(jù)操作命令直接對與緩存數(shù)據(jù)進(jìn)行處理,如果是,則向zookeeper服務(wù)器集群獲取與數(shù)據(jù)鍵值對應(yīng)的最新有效數(shù)據(jù),并將緩存數(shù)據(jù)更新為最新有效數(shù)據(jù),根據(jù)數(shù)據(jù)操作命令對最新有效數(shù)據(jù)進(jìn)行處理;以及緩存服務(wù)器將處理后的數(shù)據(jù)寫入zookeeper服務(wù)器集群。本發(fā)明能夠在不影響Zookeeper寫操作性能的情況下,提供強(qiáng)一致性緩存,保證數(shù)據(jù)寫入的正確性。
【專利說明】強(qiáng)一致性分布式數(shù)據(jù)存儲方法、裝置及系統(tǒng)

【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計(jì)算機(jī)互聯(lián)網(wǎng)技術(shù),尤其涉及一種強(qiáng)一致性分布式數(shù)據(jù)存儲方法、裝置及系統(tǒng)。

【背景技術(shù)】
[0002]Zookeeper是一種分布式的協(xié)調(diào)服務(wù),為分布式應(yīng)用程序提供各種服務(wù),包括配置維護(hù)、名字服務(wù)(Name Service)、分布式同步、組服務(wù)等。
[0003]如圖1所示,Zookeeper是一個(gè)由眾多服務(wù)器節(jié)點(diǎn)組成的集群。在Zookeeper中,每一個(gè)節(jié)點(diǎn)都被稱為Znode。Znode維護(hù)著節(jié)點(diǎn)用戶數(shù)據(jù)、父節(jié)點(diǎn)和子節(jié)點(diǎn)集合以及本節(jié)點(diǎn)狀態(tài)等。這些節(jié)點(diǎn)又分為主節(jié)點(diǎn)(leader節(jié)點(diǎn))和從節(jié)點(diǎn)(follower節(jié)點(diǎn))。Zookeeper會保證客戶端(client)對Znode的操作是順序一致性的。
[0004]在Zookeeper中,對數(shù)據(jù)的寫操作,會由follower節(jié)點(diǎn)轉(zhuǎn)給leader節(jié)點(diǎn),然后由leader節(jié)點(diǎn)將請求廣播給所有的follower節(jié)點(diǎn),leader節(jié)點(diǎn)收到一半以上follower節(jié)點(diǎn)的確認(rèn)(Ack)后,就會認(rèn)為寫操作成功了,leader節(jié)點(diǎn)會向所有follower節(jié)點(diǎn)發(fā)送commit信令,并通知客戶端寫操作成功。但是,在對數(shù)據(jù)進(jìn)行讀操作時(shí),可以從任意一個(gè)節(jié)點(diǎn)讀取,基于上述的寫操作過程,可以看出,在Zookeeper中,并不能保證從每個(gè)follower節(jié)點(diǎn)讀取的數(shù)據(jù)都是最新的有效數(shù)據(jù),因此,Zookeeper對于讀操作只提供最終一致性服務(wù)。
[0005]在基于Zookeeper的名字服務(wù)中,往往會涉及到append寫操作,典型的append寫操作可以由以下步驟組成:1.從存儲里讀取數(shù)據(jù)到本地,2.在本地對數(shù)據(jù)做append操作,3.將進(jìn)行append操作后的數(shù)據(jù)從本地寫回到存儲中。在非強(qiáng)一致性分布式存儲系統(tǒng)里,如果第I步中讀取到數(shù)據(jù)不是最新的有效數(shù)據(jù),則基于此結(jié)果進(jìn)行append操作,很有可能導(dǎo)致寫回到存儲的數(shù)據(jù)是錯誤的,也就是說無法提供強(qiáng)一致性服務(wù)(強(qiáng)一致性,指的是任何時(shí)刻任何請求都可以從系統(tǒng)中獲取到最近一次成功更新的數(shù)據(jù)或者讀不到有效數(shù)據(jù))。
[0006]對于強(qiáng)一致性的解決方案,業(yè)界都有一些存儲系統(tǒng)可以提供。目前業(yè)界提供的強(qiáng)一致性系統(tǒng),都是針對特定場景額外提供的存儲系統(tǒng),但是額外提供強(qiáng)一致性存儲服務(wù)會導(dǎo)致系統(tǒng)架構(gòu)很冗余。


【發(fā)明內(nèi)容】

[0007]有鑒于此,本發(fā)明實(shí)施例提供一種基于Zook^per的強(qiáng)一致性分布式數(shù)據(jù)存儲方法、裝置及系統(tǒng),可以保證寫入數(shù)據(jù)的準(zhǔn)確性。
[0008]本發(fā)明第一實(shí)施例提出一種強(qiáng)一致性分布式數(shù)據(jù)存儲方法,包括:緩存服務(wù)器接收客戶端發(fā)送的數(shù)據(jù)寫請求,所述數(shù)據(jù)寫請求中包括數(shù)據(jù)鍵值以及數(shù)據(jù)操作命令,所述緩存服務(wù)器中包括與所述數(shù)據(jù)鍵值對應(yīng)的緩存數(shù)據(jù)以及對應(yīng)的緩存數(shù)據(jù)序列號c_Seq ;所述緩存服務(wù)器由Zookeeper服務(wù)器集群中獲取與所述數(shù)據(jù)鍵值對應(yīng)的自增序列號new_Seq,所述自增序列號new_Seq為所述Zookeeper服務(wù)器集群針對所述數(shù)據(jù)寫請求為所述數(shù)據(jù)鍵值創(chuàng)建的最新序列號;所述緩存服務(wù)器計(jì)算所述自增序列號new_Seq與所述緩存數(shù)據(jù)序列號c_seq之間的差值new_seq_c_seq,判斷所述差值new_seq_c_seq是否大于預(yù)定閾值,如果否,則根據(jù)所述數(shù)據(jù)操作命令直接對與所述緩存數(shù)據(jù)進(jìn)行處理,如果是,則向所述Zookeeper服務(wù)器集群獲取與所述數(shù)據(jù)鍵值對應(yīng)的最新有效數(shù)據(jù),并將所述緩存數(shù)據(jù)更新為所述最新有效數(shù)據(jù),根據(jù)所述數(shù)據(jù)操作命令對所述最新有效數(shù)據(jù)進(jìn)行處理;以及所述緩存服務(wù)器將處理后的數(shù)據(jù)寫入所述Zookeeper服務(wù)器集群。
[0009]本發(fā)明第二實(shí)施例還提出一種強(qiáng)一致性分布式數(shù)據(jù)存儲方法,包括:客戶端向緩存服務(wù)器發(fā)送數(shù)據(jù)寫請求,所述數(shù)據(jù)寫請求中包括數(shù)據(jù)鍵值以及數(shù)據(jù)操作命令;緩存服務(wù)器根據(jù)所述數(shù)據(jù)寫請求向Zookeeper服務(wù)器集群發(fā)送第一獲取請求,用于獲取與所述數(shù)據(jù)鍵值對應(yīng)的自增序列號new_Seq,所述緩存服務(wù)器中存儲有與所述數(shù)據(jù)鍵值對應(yīng)的緩存數(shù)據(jù)以及緩存數(shù)據(jù)序列號c_Seq ;所述Zookeeper服務(wù)器集群根據(jù)所述第一獲取請求,向所述緩存服務(wù)器返回與所述數(shù)據(jù)鍵值對應(yīng)的自增序列號new_seq,所述自增序列號new_seq為所述Zookeeper服務(wù)器集群針對所述數(shù)據(jù)寫請求為所述數(shù)據(jù)鍵值創(chuàng)建的最新序列號;所述緩存服務(wù)器計(jì)算所述自增序列號new_seq與所述緩存數(shù)據(jù)序列號c_seq之間的差值new_seq-c_seq,判斷所述差值new_seq_c_seq是否大于預(yù)定閾值,如果否,則所述緩存服務(wù)器根據(jù)所述數(shù)據(jù)操作命令直接對與所述緩存數(shù)據(jù)進(jìn)行處理,如果是,則所述緩存服務(wù)器向所述Zookeeper服務(wù)器集群獲取與所述數(shù)據(jù)鍵值對應(yīng)的最新有效數(shù)據(jù),并將所述緩存數(shù)據(jù)更新為所述最新有效數(shù)據(jù),根據(jù)所述數(shù)據(jù)操作命令對所述最新有效數(shù)據(jù)進(jìn)行處理;以及所述緩存服務(wù)器將處理后的數(shù)據(jù)寫入所述Zookeeper服務(wù)器集群。
[0010]本發(fā)明第三實(shí)施例提出一種強(qiáng)一致性分布式數(shù)據(jù)存儲裝置,運(yùn)行于緩存服務(wù)器,所述裝置包括:請求接收模塊,用于接收客戶端發(fā)送的數(shù)據(jù)寫請求,所述數(shù)據(jù)寫請求中包括數(shù)據(jù)鍵值以及數(shù)據(jù)操作命令;數(shù)據(jù)緩存模塊,用于存儲與所述數(shù)據(jù)鍵值對應(yīng)的緩存數(shù)據(jù)以及對應(yīng)的緩存數(shù)據(jù)序列號c_seq ;數(shù)據(jù)獲取模塊,用于由Zookeeper服務(wù)器集群中獲取與所述數(shù)據(jù)鍵值對應(yīng)的自增序列號new_seq,所述自增序列號new_seq為所述Zookeeper服務(wù)器集群針對所述數(shù)據(jù)寫請求為所述數(shù)據(jù)鍵值創(chuàng)建的最新序列號;數(shù)據(jù)處理模塊,用于計(jì)算所述自增序列號new_seq與所述緩存數(shù)據(jù)序列號c_seq之間的差值new_seq_c_seq,判斷所述差值neW_Seq-C_Seq是否大于預(yù)定閾值,如果否,則根據(jù)所述數(shù)據(jù)操作命令直接對與所述緩存數(shù)據(jù)進(jìn)行處理;所述數(shù)據(jù)獲取模塊還用于,如果所述差值neW_Seq-C_Seq大于預(yù)定閾值,向所述Zookeeper服務(wù)器集群獲取與所述數(shù)據(jù)鍵值對應(yīng)的最新有效數(shù)據(jù);所述數(shù)據(jù)處理模塊還用于將所述緩存數(shù)據(jù)更新為所述最新有效數(shù)據(jù),根據(jù)所述數(shù)據(jù)操作命令對所述最新有效數(shù)據(jù)進(jìn)行處理;以及數(shù)據(jù)寫入模塊,用于將處理后的數(shù)據(jù)寫入所述Zooke^er服務(wù)器集群。
[0011]本發(fā)明第四實(shí)施例提出一種強(qiáng)一致性分布式數(shù)據(jù)存儲系統(tǒng),所述系統(tǒng)可以包括客戶端、緩存服務(wù)器以及Zookeeper服務(wù)器集群,所述客戶端用于向所述緩存服務(wù)器發(fā)送數(shù)據(jù)寫請求,所述數(shù)據(jù)寫請求中包括數(shù)據(jù)鍵值以及數(shù)據(jù)操作命令;所述緩存服務(wù)器中存儲有與所述數(shù)據(jù)鍵值對應(yīng)的緩存數(shù)據(jù)以及緩存數(shù)據(jù)序列號c_Seq,所述緩存服務(wù)器用于,根據(jù)所述數(shù)據(jù)寫請求向Zookeeper服務(wù)器集群發(fā)送第一獲取請求,用于獲取與所述數(shù)據(jù)鍵值對應(yīng)的自增序列號new_seq ;所述Zookeeper服務(wù)器集群用于,根據(jù)所述第一獲取請求,向所述緩存服務(wù)器返回與所述數(shù)據(jù)鍵值對應(yīng)的自增序列號new_seq,所述自增序列號new_seq為所述Zookeeper服務(wù)器集群針對所述數(shù)據(jù)寫請求為所述數(shù)據(jù)鍵值創(chuàng)建的最新序列號;所述緩存服務(wù)器還用于,計(jì)算所述自增序列號new_Seq與所述緩存數(shù)據(jù)序列號C_seq之間的差值new_seq_c_seq,判斷所述差值new_seq_c_seq是否大于預(yù)定閾值,如果否,則所述緩存服務(wù)器根據(jù)所述數(shù)據(jù)操作命令直接對與所述緩存數(shù)據(jù)進(jìn)行處理,如果是,則所述緩存服務(wù)器向所述Zookeeper服務(wù)器集群獲取與所述數(shù)據(jù)鍵值對應(yīng)的最新有效數(shù)據(jù),并將所述緩存數(shù)據(jù)更新為所述最新有效數(shù)據(jù),根據(jù)所述數(shù)據(jù)操作命令對所述最新有效數(shù)據(jù)進(jìn)行處理,并將處理后的數(shù)據(jù)寫入所述Zookeeper服務(wù)器集群。強(qiáng)一致性分布式數(shù)據(jù)存儲裝置強(qiáng)一致性分布式數(shù)據(jù)存儲裝置
[0012]相對于現(xiàn)有技術(shù),本發(fā)明各實(shí)施例提出的強(qiáng)一致性分布式數(shù)據(jù)存儲方法、裝置及系統(tǒng),利用Zookeeper中與數(shù)據(jù)鍵值對應(yīng)的序列號來判斷緩存服務(wù)器中所緩存的數(shù)據(jù)是否為最新的數(shù)據(jù),如果是,則可以直接對其進(jìn)行處理,如果不是,則向Zookeeper服務(wù)器集群讀取、更新數(shù)據(jù),然后對更新后的數(shù)據(jù)進(jìn)行處理后再寫入Zooke^er服務(wù)器集群,借此,在保持Zookeeper寫操作性能不變的情況下,利用序列號,提供強(qiáng)一致性緩存,保證數(shù)據(jù)寫入的正確性。
[0013]為讓本發(fā)明的上述和其他目的、特征和優(yōu)點(diǎn)能更明顯易懂,下文特舉較佳實(shí)施例,并配合所附圖式,作詳細(xì)說明如下。

【專利附圖】

【附圖說明】
[0014]圖1為現(xiàn)有的Zookeeper的應(yīng)用環(huán)境不意圖。
[0015]圖2為本發(fā)明實(shí)施例提供的強(qiáng)一致性分布式數(shù)據(jù)存儲方法的應(yīng)用環(huán)境圖。
[0016]圖3為本發(fā)明第一實(shí)施例提供的強(qiáng)一致性分布式數(shù)據(jù)存儲方法的流程圖。
[0017]圖4為圖3中部分流程的具體流程圖。
[0018]圖5為本發(fā)明第二實(shí)施例提供的強(qiáng)一致性分布式數(shù)據(jù)存儲方法的流程圖。
[0019]圖6為圖5中部分流程的具體流程圖。
[0020]圖7為本發(fā)明第二實(shí)施例中一個(gè)具體示例的時(shí)序圖。
[0021]圖8為本發(fā)明第三實(shí)施例提供的強(qiáng)一致性分布式數(shù)據(jù)存儲裝置的結(jié)構(gòu)框圖。
[0022]圖9為本發(fā)明第四實(shí)施例提供的強(qiáng)一致性分布式數(shù)據(jù)存儲裝置的結(jié)構(gòu)框圖。

【具體實(shí)施方式】
[0023]為更進(jìn)一步闡述本發(fā)明為實(shí)現(xiàn)預(yù)定發(fā)明目的所采取的技術(shù)手段及功效,以下結(jié)合附圖及較佳實(shí)施例,對依據(jù)本發(fā)明的【具體實(shí)施方式】、結(jié)構(gòu)、特征及其功效,詳細(xì)說明如后。
[0024]圖2所示為本發(fā)明實(shí)施例提供的強(qiáng)一致性分布式數(shù)據(jù)存儲方法的應(yīng)用環(huán)境圖,請參照圖2,本發(fā)明提供的系統(tǒng)10可以包括客戶端101、緩存服務(wù)器102、ZOOkeeper服務(wù)器集群 103。
[0025]Zookeeper服務(wù)器集群103在本系統(tǒng)10里為服務(wù)器配置信息提供存儲服務(wù)。本系統(tǒng)10在Zookeeper服務(wù)器集群103的前端引入緩存服務(wù)器(cache svr) 102。緩存服務(wù)器102會監(jiān)聽客戶端101向服務(wù)器端發(fā)出的請求,并保存服務(wù)器端的回應(yīng),例如數(shù)據(jù)、結(jié)果等。
[0026]客戶端101寫入數(shù)據(jù)時(shí),緩存服務(wù)器102會接收客戶端的數(shù)據(jù)寫請求,每次進(jìn)行數(shù)據(jù)寫入前,緩存服務(wù)器102都會與Zook^per服務(wù)器集群103進(jìn)行數(shù)據(jù)交互,從Zook^per服務(wù)器集群103讀取、更新數(shù)據(jù),結(jié)合客戶端101的請求,更新本地緩存數(shù)據(jù)、處理數(shù)據(jù),再將處理后的數(shù)據(jù)寫回到Zookeeper服務(wù)器集群103??蛻舳?01與緩存服務(wù)器102以及Zooke印er服務(wù)器集群103之間的網(wǎng)絡(luò)通信是基于TCP協(xié)議,TCP保證了 Client/Server之間傳輸包的順序,另外,Zookeeper服務(wù)器集群103執(zhí)行客戶端請求也是嚴(yán)格按照FIFO (first in first out)順序的。
[0027]Zooke印er服務(wù)器集群103中,為了保證數(shù)據(jù)寫入的順序性,可以在每次寫入數(shù)據(jù)前,針對每個(gè)數(shù)據(jù)鍵值(key-value),生成對應(yīng)的序列號(seq N0.),該數(shù)據(jù)鍵值對應(yīng)的數(shù)據(jù)每寫入一次,序列號就會自增一次,生成自增序列號,由于生成序列號是寫操作,寫操作必須經(jīng)過Zookeeper的leader節(jié)點(diǎn),因此自增序列號必然是最新的。于本發(fā)明的實(shí)施例中,在數(shù)據(jù)還未寫入時(shí),先生成自增序列號new_seq,即先自增,生成的這個(gè)自增序列號new_seq對應(yīng)于待寫入的數(shù)據(jù),這個(gè)自增序列號new_Seq之前的序列號對應(yīng)于之前已寫入的最新數(shù)據(jù)。
[0028]本發(fā)明的主要思路是利用Zookeeper中與數(shù)據(jù)鍵值對應(yīng)的序列號來判斷緩存服務(wù)器102中所緩存的數(shù)據(jù)是否為最新的數(shù)據(jù),如果是,則可以直接對其進(jìn)行處理,如果不是,則向Zookeeper服務(wù)器集群103讀取、更新數(shù)據(jù),然后對更新后的數(shù)據(jù)進(jìn)行處理后再寫入Zookeeper服務(wù)器集群103,借此,在保持Zookeeper寫操作性能不變的情況下,利用序列號,提供強(qiáng)一致性緩存,保證數(shù)據(jù)寫入的正確性。另外,本方案直接在Zooke印er服務(wù)器集群的前端引入緩存服務(wù)器,不需要額外提供存儲系統(tǒng),系統(tǒng)架構(gòu)簡單。
[0029]第一實(shí)施例
[0030]請參見圖3,為本發(fā)明第一實(shí)施例提供的強(qiáng)一致性分布式數(shù)據(jù)存儲方法的流程圖;本實(shí)施例為緩存服務(wù)器所執(zhí)行的強(qiáng)一致性分布式數(shù)據(jù)存儲方法,包括以下步驟:
[0031]步驟S11,緩存服務(wù)器接收客戶端發(fā)送的數(shù)據(jù)寫請求,所述數(shù)據(jù)寫請求中包括數(shù)據(jù)鍵值以及數(shù)據(jù)操作命令,所述緩存服務(wù)器中包括與所述數(shù)據(jù)鍵值對應(yīng)的緩存數(shù)據(jù)以及對應(yīng)的緩存數(shù)據(jù)序列號c_Seq。
[0032]步驟S12,所述緩存服務(wù)器由Zookeeper服務(wù)器集群中獲取與所述數(shù)據(jù)鍵值對應(yīng)的自增序列號new_seq,所述自增序列號new_seq為所述Zookeeper服務(wù)器集群針對所述數(shù)據(jù)寫請求為所述數(shù)據(jù)鍵值創(chuàng)建的最新序列號。
[0033]步驟S13,所述緩存服務(wù)器計(jì)算所述自增序列號new_Seq與所述緩存數(shù)據(jù)序列號c_seq之間的差值new_seq_c_seq,判斷所述差值new_seq_c_seq是否大于預(yù)定閾值,如果否,則根據(jù)所述數(shù)據(jù)操作命令直接對與所述緩存數(shù)據(jù)進(jìn)行處理,如果是,則向所述Zookeeper服務(wù)器集群獲取與所述數(shù)據(jù)鍵值對應(yīng)的最新有效數(shù)據(jù),并將所述緩存數(shù)據(jù)更新為所述最新有效數(shù)據(jù),根據(jù)所述數(shù)據(jù)操作命令對所述最新有效數(shù)據(jù)進(jìn)行處理。
[0034]請參照圖4,進(jìn)一步的,所述向所述Zookeeper服務(wù)器集群獲取與所述數(shù)據(jù)鍵值對應(yīng)的最新有效數(shù)據(jù),并將所述緩存數(shù)據(jù)更新為所述最新有效數(shù)據(jù),根據(jù)所述數(shù)據(jù)操作命令對所述最新有效數(shù)據(jù)進(jìn)行處理的步驟可以包括:
[0035]步驟S131,所述緩存服務(wù)器向所述Zookeeper服務(wù)器集群獲取與所述數(shù)據(jù)鍵值對應(yīng)的最新數(shù)據(jù)zk_data以及對應(yīng)的最新數(shù)據(jù)序列號z_seq ;
[0036]步驟S132,所述緩存服務(wù)器計(jì)算所述自增序列號new_Seq與所述最新數(shù)據(jù)序列號z_seq 之間的差值 new_seq-z_seq ;
[0037]步驟S133,判斷所述差值new_seq_z_seq是否大于所述預(yù)定閾值,
[0038]步驟S134,如果否,則確定所述最新數(shù)據(jù)zk_data為最新有效數(shù)據(jù),將所述緩存數(shù)據(jù)更新為所述最新數(shù)據(jù)zk_data,根據(jù)所述數(shù)據(jù)操作命令對所述最新數(shù)據(jù)zk_data進(jìn)行處理;
[0039]步驟S135,如果是,則所述緩存服務(wù)器向所述Zooke印er服務(wù)器集群發(fā)送數(shù)據(jù)同步指令,以使所述Zookeeper服務(wù)器集群將與所述數(shù)據(jù)鍵值對應(yīng)的數(shù)據(jù)同步為最新有效數(shù)據(jù),所述緩存服務(wù)器向所述Zookeeper服務(wù)器集群獲取同步后的最新有效數(shù)據(jù),所述緩存服務(wù)器將所述緩存數(shù)據(jù)更新為所述最新有效數(shù)據(jù),根據(jù)所述數(shù)據(jù)操作命令對所述最新有效數(shù)據(jù)進(jìn)行處理。
[0040]步驟S14,所述緩存服務(wù)器將處理后的數(shù)據(jù)寫入所述Zook^per服務(wù)器集群。
[0041]進(jìn)一步的,Zooke印er服務(wù)器集群還可以向緩存服務(wù)器返回寫入結(jié)果,緩存服務(wù)器可以向客戶端返回操作結(jié)果。
[0042]本實(shí)施例提供的強(qiáng)一致性分布式數(shù)據(jù)存儲方法,利用Zookeeper中與數(shù)據(jù)鍵值對應(yīng)的序列號來判斷緩存服務(wù)器中所緩存的數(shù)據(jù)是否為最新的數(shù)據(jù),如果是,則可以直接對其進(jìn)行處理,如果不是,則向Zookeeper服務(wù)器集群讀取、更新數(shù)據(jù),然后對更新后的數(shù)據(jù)進(jìn)行處理后再寫入Zooke^er服務(wù)器集群,借此,在保持Zooke^er寫操作性能不變的情況下,利用序列號,提供強(qiáng)一致性緩存,保證數(shù)據(jù)寫入的正確性。
[0043]第二實(shí)施例
[0044]圖5為本發(fā)明第二實(shí)施例提供的強(qiáng)一致性分布式數(shù)據(jù)存儲方法的流程圖;本實(shí)施例為系統(tǒng)所執(zhí)行的強(qiáng)一致性分布式數(shù)據(jù)存儲方法,包括以下步驟:
[0045]步驟S21,客戶端向緩存服務(wù)器發(fā)送數(shù)據(jù)寫請求,所述數(shù)據(jù)寫請求中包括數(shù)據(jù)鍵值以及數(shù)據(jù)操作命令。
[0046]步驟S22,緩存服務(wù)器根據(jù)所述數(shù)據(jù)寫請求向Zook^per服務(wù)器集群發(fā)送第一獲取請求,用于獲取與所述數(shù)據(jù)鍵值對應(yīng)的自增序列號new_Seq,所述緩存服務(wù)器中存儲有與所述數(shù)據(jù)鍵值對應(yīng)的緩存數(shù)據(jù)以及緩存數(shù)據(jù)序列號c_Seq。
[0047]步驟S23,所述Zookeeper服務(wù)器集群根據(jù)所述第一獲取請求,向所述緩存服務(wù)器返回與所述數(shù)據(jù)鍵值對應(yīng)的自增序列號new_seq,所述自增序列號new_seq為所述Zookeeper服務(wù)器集群針對所述數(shù)據(jù)寫請求為所述數(shù)據(jù)鍵值創(chuàng)建的最新序列號。
[0048]步驟S24,所述緩存服務(wù)器計(jì)算所述自增序列號new_Seq與所述緩存數(shù)據(jù)序列號c_seq之間的差值new_seq_c_seq,判斷所述差值new_seq_c_seq是否大于預(yù)定閾值,如果否,則所述緩存服務(wù)器根據(jù)所述數(shù)據(jù)操作命令直接對與所述緩存數(shù)據(jù)進(jìn)行處理,如果是,則所述緩存服務(wù)器向所述Zookeeper服務(wù)器集群獲取與所述數(shù)據(jù)鍵值對應(yīng)的最新有效數(shù)據(jù),并將所述緩存數(shù)據(jù)更新為所述最新有效數(shù)據(jù),根據(jù)所述數(shù)據(jù)操作命令對所述最新有效數(shù)據(jù)進(jìn)行處理。
[0049]請參照圖6,進(jìn)一步的,所述緩存服務(wù)器向所述Zookeeper服務(wù)器集群獲取與所述數(shù)據(jù)鍵值對應(yīng)的最新有效數(shù)據(jù),并將所述緩存數(shù)據(jù)更新為所述最新有效數(shù)據(jù),根據(jù)所述數(shù)據(jù)操作命令對所述最新有效數(shù)據(jù)進(jìn)行處理的步驟可以包括:
[0050]步驟S241,所述緩存服務(wù)器向所述Zooke印er服務(wù)器集群發(fā)送第二獲取請求,用于獲取與所述數(shù)據(jù)鍵值對應(yīng)的最新數(shù)據(jù)zk_data以及對應(yīng)的最新數(shù)據(jù)序列號Z_seq ;
[0051]步驟S242,所述Zookeeper服務(wù)器集群返回與所述數(shù)據(jù)鍵值對應(yīng)的最新數(shù)據(jù)zk_data以及對應(yīng)的最新數(shù)據(jù)序列號z_seq ;
[0052]步驟S243,所述緩存服務(wù)器計(jì)算所述自增序列號new_Seq與所述最新數(shù)據(jù)序列號z_seq 之間的差值 new_seq-z_seq ;
[0053]步驟S244,判斷所述差值new_seq_z_seq是否大于所述預(yù)定閾值,
[0054]步驟S245,如果否,則所述緩存服務(wù)器確定所述最新數(shù)據(jù)zk_data為最新有效數(shù)據(jù),將所述緩存數(shù)據(jù)更新為所述最新數(shù)據(jù)zk_data,根據(jù)所述數(shù)據(jù)操作命令對所述最新數(shù)據(jù)zk_data進(jìn)行處理,
[0055]步驟S246,如果是,則所述緩存服務(wù)器向所述Zookeeper服務(wù)器集群發(fā)送數(shù)據(jù)同步指令,所述Zookeeper服務(wù)器集群根據(jù)所述數(shù)據(jù)同步信號將與所述數(shù)據(jù)鍵值對應(yīng)的數(shù)據(jù)同步為最新有效數(shù)據(jù),所述緩存服務(wù)器向所述Zook^per服務(wù)器集群發(fā)送第三獲取請求,用于獲取同步后的最新有效數(shù)據(jù),所述Zookeeper服務(wù)器集群向所述緩存服務(wù)器返回所述最新有效數(shù)據(jù),所述緩存服務(wù)器將所述緩存數(shù)據(jù)更新為所述最新有效數(shù)據(jù),根據(jù)所述數(shù)據(jù)操作命令對所述最新有效數(shù)據(jù)進(jìn)行處理。
[0056]步驟S25,所述緩存服務(wù)器將處理后的數(shù)據(jù)寫入所述Zook^per服務(wù)器集群。
[0057]下面將結(jié)合圖7,以客戶端向緩存服務(wù)器發(fā)送數(shù)據(jù)Append寫操作請求為例,對本發(fā)明進(jìn)行更詳細(xì)的說明。
[0058]請參照圖7,當(dāng)客戶端向Cache服務(wù)器發(fā)送append寫請求(append writerequest)時(shí),緩存服務(wù)器會向Zookeeper服務(wù)器集群發(fā)送第一獲取請求,第一獲取請求中攜帶有append寫請求中的數(shù)據(jù)鍵值key,第一獲取請求向Zookeeper服務(wù)器集群獲取與該數(shù)據(jù)鍵值key對應(yīng)的自增序列號new_seq。當(dāng)Cache服務(wù)器接收到Zookeeper服務(wù)器返回的自增序列號new_seq,會計(jì)算自增序列號new_seq與本地所存儲的序列號c_seq之間的差值new_seq_c_seq,由于自增序列號new_seq對于每次操作都會在自增一次,因此,因此,new_seq-c_seq的結(jié)果可能是I或大于1,根據(jù)new_seq_c_seq的結(jié)果,可能會出現(xiàn)以下幾種場景。
[0059]場景一:如果new_seq_c_seq = = I,說明cache服務(wù)器中所存儲的對應(yīng)于該數(shù)據(jù)鍵值key的數(shù)據(jù)c_data已經(jīng)是最新有效數(shù)據(jù),此時(shí),cache服務(wù)器只要將本地序列號c_seq更新為new_seq,對本地緩存的數(shù)據(jù)c_data進(jìn)行append操作,并將本地?cái)?shù)據(jù)c_data更新為append操作后的數(shù)據(jù),然后將append操作后得到的數(shù)據(jù)寫回Zookeeper服務(wù)器集群即可。
[0060]場景二:如果new_seq_c_seq>l,說明cache服務(wù)器中所存儲的對應(yīng)于該數(shù)據(jù)鍵值key的數(shù)據(jù)c_data并不是最新有效數(shù)據(jù),此時(shí),cache服務(wù)器會向Zookeeper發(fā)送第二獲取請求,獲取與該數(shù)據(jù)鍵值key對應(yīng)的最新數(shù)據(jù)zk_data以及對應(yīng)的最新數(shù)據(jù)序列號z_seq0由于在Zookeeper中,并不能保證從每個(gè)節(jié)點(diǎn)讀取的數(shù)據(jù)都是最新的有效數(shù)據(jù),因此,當(dāng)cache服務(wù)器接收到zk_data及z_seq時(shí),還要進(jìn)一步判斷zk_data是否是最新的有效數(shù)據(jù)。也就是要判斷new_seq_z_seq是否等于I。根據(jù)new_seq_z_seq的結(jié)果,可能會出現(xiàn)以下幾種場景。
[0061]場景三:new_seq_c_seq>l,且new_seq_z_seq = = I,則說明從 Zookeeper 服務(wù)器集群讀到的是最新有效數(shù)據(jù),可以直接使用zk_data進(jìn)行數(shù)據(jù)更新,將本地序列號c_Seq更新為new_seq,對Zookeeper服務(wù)器集群返回的數(shù)據(jù)zk_data進(jìn)行append操作,并將本地?cái)?shù)據(jù)c_data更新為對zk_data進(jìn)行append操作后的數(shù)據(jù),然后將append操作后得到的數(shù)據(jù)寫回Zookeeper服務(wù)器集群。
[0062]場景四:如果new_seq_c_seq>l,且 new_seq_z_seq>l,則說明從 Zookeeper 服務(wù)器集群讀到的并不是最新有效數(shù)據(jù),此時(shí)需要使用sync接口讓Zooke^er服務(wù)器集群中的follower節(jié)點(diǎn)從集群里更新到最新有效數(shù)據(jù),再向Zookeeper服務(wù)器集群發(fā)送第三獲取請求,獲取同步后的最新有效數(shù)據(jù)zk_data’以及對應(yīng)的序列號z_seq’。sync接口是zookeeper提供的java版本的接口。Cache服務(wù)器獲取到最新的數(shù)據(jù)zk_data’后,為了代碼級別的可靠性,還是會判斷neW_Seq-Z_Seq’的差值是否為1,一般此時(shí)一定是I的。如果不為1,Cache服務(wù)器會記錄異常并上報(bào),同時(shí)返回客戶端寫入失敗,且更新Z_Seq、c_Seq為new_seq的值。如果new_seq_z_seq’的差值為I, Cache服務(wù)器對Zookeeper服務(wù)器集群返回的數(shù)據(jù)zk_data’進(jìn)行append操作,并將本地?cái)?shù)據(jù)c_data更新為對zk_data’進(jìn)行append操作后的數(shù)據(jù),然后將append操作后得到的數(shù)據(jù)寫回Zookeeper服務(wù)器集群。
[0063]由于從Zooke印er服務(wù)器集群讀取到不一致數(shù)據(jù)并不是常態(tài),只有少量場景需要強(qiáng)制sync數(shù)據(jù),因此本發(fā)明實(shí)施例提出的技術(shù)方案在性能上與普通的基于Zookeeper做append寫操作的性能相當(dāng),但是可以提供強(qiáng)一致性服務(wù),保證關(guān)鍵數(shù)據(jù)的寫入正確性。
[0064]本發(fā)明實(shí)施例還提供了一種計(jì)算機(jī)存儲介質(zhì),所述計(jì)算機(jī)存儲介質(zhì)存儲有程序,該程序執(zhí)行包括圖2至圖7任一實(shí)施例所示方法的全部或部分步驟。
[0065]第三實(shí)施例
[0066]請參見圖8,為本發(fā)明第三實(shí)施例提供的強(qiáng)一致性分布式數(shù)據(jù)存儲裝置的結(jié)構(gòu)示意圖;本實(shí)施例提供的裝置可運(yùn)行于緩存服務(wù)器,所述強(qiáng)一致性分布式數(shù)據(jù)存儲裝置30可以包括:請求接收模塊31、數(shù)據(jù)緩存模塊32、數(shù)據(jù)獲取模塊33、數(shù)據(jù)處理模塊34、數(shù)據(jù)寫入模塊35、數(shù)據(jù)同步模塊36。
[0067]其中,請求接收模塊31,用于接收客戶端發(fā)送的數(shù)據(jù)寫請求,所述數(shù)據(jù)寫請求中包括數(shù)據(jù)鍵值以及數(shù)據(jù)操作命令;
[0068]數(shù)據(jù)緩存模塊32,用于存儲與所述數(shù)據(jù)鍵值對應(yīng)的緩存數(shù)據(jù)以及對應(yīng)的緩存數(shù)據(jù)序列號c_seq ;
[0069]數(shù)據(jù)獲取模塊33,用于由Zookeeper服務(wù)器集群中獲取與所述數(shù)據(jù)鍵值對應(yīng)的自增序列號new_seq,所述自增序列號new_seq為所述Zookeeper服務(wù)器集群針對所述數(shù)據(jù)寫請求為所述數(shù)據(jù)鍵值創(chuàng)建的最新序列號;
[0070]數(shù)據(jù)處理模塊34,用于計(jì)算所述自增序列號new_Seq與所述緩存數(shù)據(jù)序列號c_seq之間的差值new_seq_c_seq,判斷所述差值new_seq_c_seq是否大于預(yù)定閾值,如果否,則根據(jù)所述數(shù)據(jù)操作命令直接對與所述緩存數(shù)據(jù)進(jìn)行處理;
[0071]所述數(shù)據(jù)獲取模塊33還用于,如果所述差值new_seq_c_seq大于預(yù)定閾值,向所述Zookeeper服務(wù)器集群獲取與所述數(shù)據(jù)鍵值對應(yīng)的最新有效數(shù)據(jù);
[0072]所述數(shù)據(jù)處理模塊34還用于將所述緩存數(shù)據(jù)更新為所述最新有效數(shù)據(jù),根據(jù)所述數(shù)據(jù)操作命令對所述最新有效數(shù)據(jù)進(jìn)行處理;以及
[0073]數(shù)據(jù)寫入模塊35,用于將處理后的數(shù)據(jù)寫入所述Zooke^er服務(wù)器集群。
[0074]如果所述差值new_seq_c_seq大于預(yù)定閾值,所述數(shù)據(jù)獲取模塊33還用于向所述Zookeeper服務(wù)器集群獲取與所述數(shù)據(jù)鍵值對應(yīng)的最新數(shù)據(jù)zk_data以及對應(yīng)的最新數(shù)據(jù)序列號Z_seq ;所述數(shù)據(jù)處理模塊34還用于計(jì)算所述自增序列號new_Seq與所述最新數(shù)據(jù)序列號z_seq之間的差值new_seq-z_seq,判斷所述差值new_seq-z_seq是否大于所述預(yù)定閾值。
[0075]如果否,則確定所述最新數(shù)據(jù)zk_data為最新有效數(shù)據(jù),將所述緩存數(shù)據(jù)更新為所述最新數(shù)據(jù)zk_data,根據(jù)所述數(shù)據(jù)操作命令對所述最新數(shù)據(jù)zk_data進(jìn)行處理,數(shù)據(jù)同步模塊36向所述Zookeeper服務(wù)器集群發(fā)送數(shù)據(jù)同步指令,以使所述Zookeeper服務(wù)器集群將與所述數(shù)據(jù)鍵值對應(yīng)的數(shù)據(jù)同步為最新有效數(shù)據(jù),所述數(shù)據(jù)獲取模塊33還用于向所述Zookeeper服務(wù)器集群獲取同步后的最新有效數(shù)據(jù),所述數(shù)據(jù)處理模塊34還用于將所述緩存數(shù)據(jù)更新為所述最新有效數(shù)據(jù),根據(jù)所述數(shù)據(jù)操作命令對所述最新有效數(shù)據(jù)進(jìn)行處理。
[0076]優(yōu)選的,所述預(yù)定閾值為I。
[0077]所述數(shù)據(jù)操作命令例如可以為append寫操作命令,如果數(shù)據(jù)操作命令為append寫操作命令,所述數(shù)據(jù)處理模塊34還用于對所述最新有效數(shù)據(jù)進(jìn)行append操作。
[0078]以上各模塊可以是由軟件代碼實(shí)現(xiàn),此時(shí),上述的各模塊可存儲于緩存服務(wù)器的存儲器內(nèi)。以上各模塊同樣可以由硬件例如集成電路芯片實(shí)現(xiàn)。
[0079]本實(shí)施例對強(qiáng)一致性分布式數(shù)據(jù)存儲裝置30的各功能模塊實(shí)現(xiàn)各自功能的具體過程,請參見上述圖2至圖7所示實(shí)施例中描述的具體內(nèi)容,此處不再贅述。
[0080]本實(shí)施例提供的強(qiáng)一致性分布式數(shù)據(jù)存儲裝置,利用Zookeeper中與數(shù)據(jù)鍵值對應(yīng)的序列號來判斷本地所緩存的數(shù)據(jù)是否為最新的數(shù)據(jù),如果是,則可以直接對其進(jìn)行處理,如果不是,則向Zookeeper服務(wù)器集群讀取、更新數(shù)據(jù),然后對更新后的數(shù)據(jù)進(jìn)行處理后再寫入Zooke^er服務(wù)器集群,借此,在保持Zooke^er寫操作性能不變的情況下,利用序列號,提供強(qiáng)一致性緩存,保證數(shù)據(jù)寫入的正確性。
[0081]第四實(shí)施例
[0082]請參見圖9,為本發(fā)明第四實(shí)施例提供的強(qiáng)一致性分布式數(shù)據(jù)存儲系統(tǒng)的結(jié)構(gòu)示意圖;本實(shí)施例提供的系統(tǒng)40可以包括:客戶端41、緩存服務(wù)器42以及Zooke印er服務(wù)器集群43。其中,
[0083]所述客戶端41用于向所述緩存服務(wù)器42發(fā)送數(shù)據(jù)寫請求,所述數(shù)據(jù)寫請求中包括數(shù)據(jù)鍵值以及數(shù)據(jù)操作命令;
[0084]所述緩存服務(wù)器42中存儲有與所述數(shù)據(jù)鍵值對應(yīng)的緩存數(shù)據(jù)以及緩存數(shù)據(jù)序列號^叫,所述緩存服務(wù)器用于,根據(jù)所述數(shù)據(jù)寫請求向Zooke印er服務(wù)器集群43發(fā)送第一獲取請求,用于獲取與所述數(shù)據(jù)鍵值對應(yīng)的自增序列號new_Seq ;
[0085]所述Zookeeper服務(wù)器集群43用于,根據(jù)所述第一獲取請求,向所述緩存服務(wù)器42返回與所述數(shù)據(jù)鍵值對應(yīng)的自增序列號new_seq,所述自增序列號new_seq為所述Zookeeper服務(wù)器集群43針對所述數(shù)據(jù)寫請求為所述數(shù)據(jù)鍵值創(chuàng)建的最新序列號;
[0086]所述緩存服務(wù)器42還用于,計(jì)算所述自增序列號new_Seq與所述緩存數(shù)據(jù)序列號c_seq之間的差值new_seq_c_seq,判斷所述差值new_seq_c_seq是否大于預(yù)定閾值,如果否,則所述緩存服務(wù)器42根據(jù)所述數(shù)據(jù)操作命令直接對與所述緩存數(shù)據(jù)進(jìn)行處理,如果是,則所述緩存服務(wù)器42向所述Zookeeper服務(wù)器集群43獲取與所述數(shù)據(jù)鍵值對應(yīng)的最新有效數(shù)據(jù),并將所述緩存數(shù)據(jù)更新為所述最新有效數(shù)據(jù),根據(jù)所述數(shù)據(jù)操作命令對所述最新有效數(shù)據(jù)進(jìn)行處理,并將處理后的數(shù)據(jù)寫入所述Zookeeper服務(wù)器集群43。
[0087]進(jìn)一步的,如果所述差值neW_Seq-C_Seq大于預(yù)定閾值,所述緩存服務(wù)器42還用于向所述Zookeeper服務(wù)器集群43發(fā)送第二獲取請求,用于獲取與所述數(shù)據(jù)鍵值對應(yīng)的最新數(shù)據(jù)zk_data以及對應(yīng)的最新數(shù)據(jù)序列號z_seq ;所述Zookeeper服務(wù)器集群42還用于返回與所述數(shù)據(jù)鍵值對應(yīng)的最新數(shù)據(jù)zk_data以及對應(yīng)的最新數(shù)據(jù)序列號Z_seq ;所述緩存服務(wù)器42還用于計(jì)算所述自增序列號new_Seq與所述最新數(shù)據(jù)序列號Z_seq之間的差值new_seq_z_seq,判斷所述差值new_seq_z_seq是否大于所述預(yù)定閾值,如果否,貝Ij所述緩存服務(wù)器42確定所述最新數(shù)據(jù)zk_data為最新有效數(shù)據(jù),將所述緩存數(shù)據(jù)更新為所述最新數(shù)據(jù)zk_data,根據(jù)所述數(shù)據(jù)操作命令對所述最新數(shù)據(jù)zk_data進(jìn)行處理,如果是,則所述緩存服務(wù)器42還用于向所述Zookeeper服務(wù)器集群43發(fā)送數(shù)據(jù)同步指令,所述Zookeeper服務(wù)器集群42還根據(jù)所述數(shù)據(jù)同步信號將與所述數(shù)據(jù)鍵值對應(yīng)的數(shù)據(jù)同步為最新有效數(shù)據(jù),所述緩存服務(wù)器42還用于向所述Zookeeper服務(wù)器集群43發(fā)送第三獲取請求,用于獲取同步后的最新有效數(shù)據(jù),所述Zookeeper服務(wù)器集群43還向所述緩存服務(wù)器42返回所述最新有效數(shù)據(jù),所述緩存服務(wù)器42將所述緩存數(shù)據(jù)更新為所述最新有效數(shù)據(jù),根據(jù)所述數(shù)據(jù)操作命令對所述最新有效數(shù)據(jù)進(jìn)行處理。
[0088]優(yōu)選的,所述預(yù)定閾值為I。
[0089]所述數(shù)據(jù)操作命令可以為append寫操作命令,如果所述數(shù)據(jù)操作命令為append寫操作命令,所述緩存服務(wù)器42還用于對所述最新有效數(shù)據(jù)進(jìn)行append操作。
[0090]本實(shí)施例對強(qiáng)一致性分布式數(shù)據(jù)存儲裝置40的各功能模塊實(shí)現(xiàn)各自功能的具體過程,請參見上述圖2至圖7所示實(shí)施例中描述的具體內(nèi)容,此處不再贅述。
[0091]本實(shí)施例提供的強(qiáng)一致性分布式數(shù)據(jù)存儲系統(tǒng),利用Zookeeper中與數(shù)據(jù)鍵值對應(yīng)的序列號來判斷緩存服務(wù)器中所緩存的數(shù)據(jù)是否為最新的數(shù)據(jù),如果是,則可以直接對其進(jìn)行處理,如果不是,則向Zookeeper服務(wù)器集群讀取、更新數(shù)據(jù),然后對更新后的數(shù)據(jù)進(jìn)行處理后再寫入Zookeeper服務(wù)器集群,借此,在保持Zookeeper寫操作性能不變的情況下,利用序列號,提供強(qiáng)一致性緩存,保證數(shù)據(jù)寫入的正確性。另外,本方案直接在Zookeeper服務(wù)器集群的前端引入緩存服務(wù)器,不需要額外提供存儲系統(tǒng),系統(tǒng)架構(gòu)簡單。
[0092]需要說明的是,本發(fā)明實(shí)施例的系統(tǒng)中各設(shè)備的功能可根據(jù)上述方法實(shí)施例中的方法具體實(shí)現(xiàn),其具體實(shí)現(xiàn)過程可以參照上述方法實(shí)施例的相關(guān)描述,在此不贅述。
[0093]需要說明的是,本說明書中的各個(gè)實(shí)施例均采用遞進(jìn)的方式描述,每個(gè)實(shí)施例重點(diǎn)說明的都是與其他實(shí)施例的不同之處,各個(gè)實(shí)施例之間相同相似的部分互相參見即可。對于裝置類實(shí)施例而言,由于其與方法實(shí)施例基本相似,所以描述的比較簡單,相關(guān)之處參見方法實(shí)施例的部分說明即可。
[0094]需要說明的是,在本文中,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者裝置不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者裝置所固有的要素。在沒有更多限制的情況下,由語句“包括一個(gè)……”限定的要素,并不排除在包括所述要素的過程、方法、物品或者裝置中還存在另外的相同要素。
[0095]本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施例的全部或部分步驟可以通過硬件來完成,也可以通過程序來指令相關(guān)的硬件完成,所述的程序可以存儲于一種計(jì)算機(jī)可讀存儲介質(zhì)中,上述提到的存儲介質(zhì)可以是只讀存儲器,磁盤或光盤等。
[0096] 以上所述,僅是本發(fā)明的較佳實(shí)施例而已,并非對本發(fā)明作任何形式上的限制,雖然本發(fā)明已以較佳實(shí)施例揭露如上,然而并非用以限定本發(fā)明,任何熟悉本專業(yè)的技術(shù)人員,在不脫離本發(fā)明技術(shù)方案范圍內(nèi),當(dāng)可利用上述揭示的技術(shù)內(nèi)容做出些許更動或修飾為等同變化的等效實(shí)施例,但凡是未脫離本發(fā)明技術(shù)方案內(nèi)容,依據(jù)本發(fā)明的技術(shù)實(shí)質(zhì)對以上實(shí)施例所作的任何簡單修改、等同變化與修飾,均仍屬于本發(fā)明技術(shù)方案的范圍內(nèi)。
【權(quán)利要求】
1.一種強(qiáng)一致性分布式數(shù)據(jù)存儲方法,其特征在于,包括: 緩存服務(wù)器接收客戶端發(fā)送的數(shù)據(jù)寫請求,所述數(shù)據(jù)寫請求中包括數(shù)據(jù)鍵值以及數(shù)據(jù)操作命令,所述緩存服務(wù)器中包括與所述數(shù)據(jù)鍵值對應(yīng)的緩存數(shù)據(jù)以及對應(yīng)的緩存數(shù)據(jù)序列號c_seq ; 所述緩存服務(wù)器由Zookeeper服務(wù)器集群中獲取與所述數(shù)據(jù)鍵值對應(yīng)的自增序列號new_seq,所述自增序列號new_seq為所述Zookeeper服務(wù)器集群針對所述數(shù)據(jù)寫請求為所述數(shù)據(jù)鍵值創(chuàng)建的最新序列號; 所述緩存服務(wù)器計(jì)算所述自增序列號new_Seq與所述緩存數(shù)據(jù)序列號C_seq之間的差值new_seq_c_seq,判斷所述差值new_seq_c_seq是否大于預(yù)定閾值,如果否,則根據(jù)所述數(shù)據(jù)操作命令直接對與所述緩存數(shù)據(jù)進(jìn)行處理,如果是,則向所述Zookeeper服務(wù)器集群獲取與所述數(shù)據(jù)鍵值對應(yīng)的最新有效數(shù)據(jù),并將所述緩存數(shù)據(jù)更新為所述最新有效數(shù)據(jù),根據(jù)所述數(shù)據(jù)操作命令對所述最新有效數(shù)據(jù)進(jìn)行處理;以及 所述緩存服務(wù)器將處理后的數(shù)據(jù)寫入所述Zookeeper服務(wù)器集群。
2.如權(quán)利要求1所述的方法,其特征在于,所述向所述Zookeeper服務(wù)器集群獲取與所述數(shù)據(jù)鍵值對應(yīng)的最新有效數(shù)據(jù),并將所述緩存數(shù)據(jù)更新為所述最新有效數(shù)據(jù),根據(jù)所述數(shù)據(jù)操作命令對所述最新有效數(shù)據(jù)進(jìn)行處理的步驟包括: 所述緩存服務(wù)器向所述Zookeeper服務(wù)器集群獲取與所述數(shù)據(jù)鍵值對應(yīng)的最新數(shù)據(jù)zk_data以及對應(yīng)的最新數(shù)據(jù)序列號z_seq ; 所述緩存服務(wù)器計(jì)算所述自增序列號new_Seq與所述最新數(shù)據(jù)序列號Z_seq之間的差值new_seq_z_seq,判斷所述差值new_seq_z_seq是否大于所述預(yù)定閾值, 如果否,則確定所述最新數(shù)據(jù)zk_data為最新有效數(shù)據(jù),將所述緩存數(shù)據(jù)更新為所述最新數(shù)據(jù)zk_data,根據(jù)所述數(shù)據(jù)操作命令對所述最新數(shù)據(jù)zk_data進(jìn)行處理, 如果是,則所述緩存服務(wù)器向所述Zookeeper服務(wù)器集群發(fā)送數(shù)據(jù)同步指令,以使所述Zookeeper服務(wù)器集群將與所述數(shù)據(jù)鍵值對應(yīng)的數(shù)據(jù)同步為最新有效數(shù)據(jù),所述緩存服務(wù)器向所述Zookeeper服務(wù)器集群獲取同步后的最新有效數(shù)據(jù),所述緩存服務(wù)器將所述緩存數(shù)據(jù)更新為所述最新有效數(shù)據(jù),根據(jù)所述數(shù)據(jù)操作命令對所述最新有效數(shù)據(jù)進(jìn)行處理。
3.如權(quán)利要求1所述的方法,其特征在于,所述預(yù)定閾值為1。
4.如權(quán)利要求1或2所述的方法,其特征在于,所述數(shù)據(jù)操作命令為append寫操作命令,所述對所述最新有效數(shù)據(jù)進(jìn)行處理的步驟包括:對所述最新有效數(shù)據(jù)進(jìn)行append操作。
5.一種強(qiáng)一致性分布式數(shù)據(jù)存儲方法,其特征在于,包括: 客戶端向緩存服務(wù)器發(fā)送數(shù)據(jù)寫請求,所述數(shù)據(jù)寫請求中包括數(shù)據(jù)鍵值以及數(shù)據(jù)操作命令; 緩存服務(wù)器根據(jù)所述數(shù)據(jù)寫請求向Zookeeper服務(wù)器集群發(fā)送第一獲取請求,用于獲取與所述數(shù)據(jù)鍵值對應(yīng)的自增序列號new_Seq,所述緩存服務(wù)器中存儲有與所述數(shù)據(jù)鍵值對應(yīng)的緩存數(shù)據(jù)以及緩存數(shù)據(jù)序列號c_Seq ; 所述Zookeeper服務(wù)器集群根據(jù)所述第一獲取請求,向所述緩存服務(wù)器返回與所述數(shù)據(jù)鍵值對應(yīng)的自增序列號new_seq,所述自增序列號new_seq為所述Zookeeper服務(wù)器集群針對所述數(shù)據(jù)寫請求為所述數(shù)據(jù)鍵值創(chuàng)建的最新序列號; 所述緩存服務(wù)器計(jì)算所述自增序列號new_Seq與所述緩存數(shù)據(jù)序列號C_seq之間的差值new_seq_c_seq,判斷所述差值new_seq_c_seq是否大于預(yù)定閾值,如果否,則所述緩存服務(wù)器根據(jù)所述數(shù)據(jù)操作命令直接對與所述緩存數(shù)據(jù)進(jìn)行處理,如果是,則所述緩存服務(wù)器向所述Zookeeper服務(wù)器集群獲取與所述數(shù)據(jù)鍵值對應(yīng)的最新有效數(shù)據(jù),并將所述緩存數(shù)據(jù)更新為所述最新有效數(shù)據(jù),根據(jù)所述數(shù)據(jù)操作命令對所述最新有效數(shù)據(jù)進(jìn)行處理;以及 所述緩存服務(wù)器將處理后的數(shù)據(jù)寫入所述Zookeeper服務(wù)器集群。
6.如權(quán)利要求5所述的方法,其特征在于,所述向所述Zookeeper服務(wù)器集群獲取與所述數(shù)據(jù)鍵值對應(yīng)的最新有效數(shù)據(jù),并將所述緩存數(shù)據(jù)更新為所述最新有效數(shù)據(jù),根據(jù)所述數(shù)據(jù)操作命令對所述最新有效數(shù)據(jù)進(jìn)行處理的步驟包括: 所述緩存服務(wù)器向所述Zookeeper服務(wù)器集群發(fā)送第二獲取請求,用于獲取與所述數(shù)據(jù)鍵值對應(yīng)的最新數(shù)據(jù)zk_data以及對應(yīng)的最新數(shù)據(jù)序列號z_seq ; 所述Zookeeper服務(wù)器集群返回與所述數(shù)據(jù)鍵值對應(yīng)的最新數(shù)據(jù)zk_data以及對應(yīng)的最新數(shù)據(jù)序列號z_seq ; 所述緩存服務(wù)器計(jì)算所述自增序列號new_Seq與所述最新數(shù)據(jù)序列號Z_seq之間的差值new_seq_z_seq,判斷所述差值new_seq_z_seq是否大于所述預(yù)定閾值, 如果否,則所述緩存服務(wù)器確定所述最新數(shù)據(jù)zk_data為最新有效數(shù)據(jù),將所述緩存數(shù)據(jù)更新為所述最新數(shù)據(jù)zk_data,根據(jù)所述數(shù)據(jù)操作命令對所述最新數(shù)據(jù)zk_data進(jìn)行處理, 如果是,則所述緩存服務(wù)器向所述Zookeeper服務(wù)器集群發(fā)送數(shù)據(jù)同步指令,所述Zookeeper服務(wù)器集群根據(jù)所述數(shù)據(jù)同步信號將與所述數(shù)據(jù)鍵值對應(yīng)的數(shù)據(jù)同步為最新有效數(shù)據(jù),所述緩存服務(wù)器向所述Zooke印er服務(wù)器集群發(fā)送第三獲取請求,用于獲取同步后的最新有效數(shù)據(jù),所述Zookeeper服務(wù)器集群向所述緩存服務(wù)器返回所述最新有效數(shù)據(jù),所述緩存服務(wù)器將所述緩存數(shù)據(jù)更新為所述最新有效數(shù)據(jù),根據(jù)所述數(shù)據(jù)操作命令對所述最新有效數(shù)據(jù)進(jìn)行處理。
7.如權(quán)利要求5所述的方法,其特征在于,所述預(yù)定閾值為1。
8.如權(quán)利要求5或6所述的方法,其特征在于,所述數(shù)據(jù)操作命令為append寫操作命令,所述對所述最新有效數(shù)據(jù)進(jìn)行處理的步驟,包括對所述最新有效數(shù)據(jù)進(jìn)行append操作。
9.一種強(qiáng)一致性分布式數(shù)據(jù)存儲裝置,運(yùn)行于緩存服務(wù)器,其特征在于,包括: 請求接收模塊,用于接收客戶端發(fā)送的數(shù)據(jù)寫請求,所述數(shù)據(jù)寫請求中包括數(shù)據(jù)鍵值以及數(shù)據(jù)操作命令; 數(shù)據(jù)緩存模塊,用于存儲與所述數(shù)據(jù)鍵值對應(yīng)的緩存數(shù)據(jù)以及對應(yīng)的緩存數(shù)據(jù)序列號c—seq ; 數(shù)據(jù)獲取模塊,用于由Zookeeper服務(wù)器集群中獲取與所述數(shù)據(jù)鍵值對應(yīng)的自增序列號new_seq,所述自增序列號new_seq為所述Zookeeper服務(wù)器集群針對所述數(shù)據(jù)寫請求為所述數(shù)據(jù)鍵值創(chuàng)建的最新序列號; 數(shù)據(jù)處理模塊,用于計(jì)算所述自增序列號new_Seq與所述緩存數(shù)據(jù)序列號C_seq之間的差值new_seq_c_seq,判斷所述差值new_seq_c_seq是否大于預(yù)定閾值,如果否,則根據(jù)所述數(shù)據(jù)操作命令直接對與所述緩存數(shù)據(jù)進(jìn)行處理; 所述數(shù)據(jù)獲取模塊還用于,如果所述差值neW_seq-C_seq大于預(yù)定閾值,向所述Zookeeper服務(wù)器集群獲取與所述數(shù)據(jù)鍵值對應(yīng)的最新有效數(shù)據(jù); 所述數(shù)據(jù)處理模塊還用于將所述緩存數(shù)據(jù)更新為所述最新有效數(shù)據(jù),根據(jù)所述數(shù)據(jù)操作命令對所述最新有效數(shù)據(jù)進(jìn)行處理;以及 數(shù)據(jù)寫入模塊,用于將處理后的數(shù)據(jù)寫入所述Zookeeper服務(wù)器集群。
10.如權(quán)利要求9所述的裝置,其特征在于,所述裝置還包括數(shù)據(jù)同步模塊,如果所述差值new_seq_c_seq大于預(yù)定閾值, 所述數(shù)據(jù)獲取模塊還用于,向所述Zookeeper服務(wù)器集群獲取與所述數(shù)據(jù)鍵值對應(yīng)的最新數(shù)據(jù)zk_data以及對應(yīng)的最新數(shù)據(jù)序列號z_seq ; 所述數(shù)據(jù)處理模塊還用于,計(jì)算所述自增序列號new_Seq與所述最新數(shù)據(jù)序列號z_seq之間的差值new_seq_z_seq,判斷所述差值new_seq_z_seq是否大于所述預(yù)定閾值,如果否,則確定所述最新數(shù)據(jù)zk_data為最新有效數(shù)據(jù),將所述緩存數(shù)據(jù)更新為所述最新數(shù)據(jù)zk_data,根據(jù)所述數(shù)據(jù)操作命令對所述最新數(shù)據(jù)zk_data進(jìn)行處理, 所述數(shù)據(jù)同步模塊向所述Zookeeper服務(wù)器集群發(fā)送數(shù)據(jù)同步指令,以使所述Zookeeper服務(wù)器集群將與所述數(shù)據(jù)鍵值對應(yīng)的數(shù)據(jù)同步為最新有效數(shù)據(jù),所述數(shù)據(jù)獲取模塊還用于向所述Zooke印er服務(wù)器集群獲取同步后的最新有效數(shù)據(jù),所述數(shù)據(jù)處理模塊還用于將所述緩存數(shù)據(jù)更新為所述最新有效數(shù)據(jù),根據(jù)所述數(shù)據(jù)操作命令對所述最新有效數(shù)據(jù)進(jìn)行處理。
11.一種強(qiáng)一致性分布式數(shù)據(jù)存儲系統(tǒng),其特征在于,所述系統(tǒng)包括客戶端、緩存服務(wù)器以及Zookeeper服務(wù)器集群, 所述客戶端用于向所述緩存服務(wù)器發(fā)送數(shù)據(jù)寫請求,所述數(shù)據(jù)寫請求中包括數(shù)據(jù)鍵值以及數(shù)據(jù)操作命令; 所述緩存服務(wù)器中存儲有與所述數(shù)據(jù)鍵值對應(yīng)的緩存數(shù)據(jù)以及緩存數(shù)據(jù)序列號(:_seq,所述緩存服務(wù)器用于,根據(jù)所述數(shù)據(jù)寫請求向Zookeeper服務(wù)器集群發(fā)送第一獲取請求,用于獲取與所述數(shù)據(jù)鍵值對應(yīng)的自增序列號new_Seq ; 所述Zookeeper服務(wù)器集群用于,根據(jù)所述第一獲取請求,向所述緩存服務(wù)器返回與所述數(shù)據(jù)鍵值對應(yīng)的自增序列號new_seq,所述自增序列號new_seq為所述Zookeeper服務(wù)器集群針對所述數(shù)據(jù)寫請求為所述數(shù)據(jù)鍵值創(chuàng)建的最新序列號; 所述緩存服務(wù)器還用于,計(jì)算所述自增序列號new_Seq與所述緩存數(shù)據(jù)序列號C_seq之間的差值new_seq_c_seq,判斷所述差值new_seq_c_seq是否大于預(yù)定閾值,如果否,貝1J所述緩存服務(wù)器根據(jù)所述數(shù)據(jù)操作命令直接對與所述緩存數(shù)據(jù)進(jìn)行處理,如果是,則所述緩存服務(wù)器向所述Zookeeper服務(wù)器集群獲取與所述數(shù)據(jù)鍵值對應(yīng)的最新有效數(shù)據(jù),并將所述緩存數(shù)據(jù)更新為所述最新有效數(shù)據(jù),根據(jù)所述數(shù)據(jù)操作命令對所述最新有效數(shù)據(jù)進(jìn)行處理,并將處理后的數(shù)據(jù)寫入所述Zooke印er服務(wù)器集群。
12.如權(quán)利要求11所述的系統(tǒng),其特征在于,如果所述差值new_seq_c_seq大于預(yù)定閾值, 所述緩存服務(wù)器還用于向所述Zookeeper服務(wù)器集群發(fā)送第二獲取請求,用于獲取與所述數(shù)據(jù)鍵值對應(yīng)的最新數(shù)據(jù)zk_data以及對應(yīng)的最新數(shù)據(jù)序列號Z_seq ; 所述Zooke印er服務(wù)器集群還用于返回與所述數(shù)據(jù)鍵值對應(yīng)的最新數(shù)據(jù)zk_data以及對應(yīng)的最新數(shù)據(jù)序列號z_seq ; 所述緩存服務(wù)器還用于計(jì)算所述自增序列號new_Seq與所述最新數(shù)據(jù)序列號Z_seq之間的差值new_seq_z_seq,判斷所述差值new_seq_z_seq是否大于所述預(yù)定閾值, 如果否,則所述緩存服務(wù)器確定所述最新數(shù)據(jù)zk_data為最新有效數(shù)據(jù),將所述緩存數(shù)據(jù)更新為所述最新數(shù)據(jù)zk_data,根據(jù)所述數(shù)據(jù)操作命令對所述最新數(shù)據(jù)zk_data進(jìn)行處理, 如果是,則所述緩存服務(wù)器還用于向所述Zookeeper服務(wù)器集群發(fā)送數(shù)據(jù)同步指令,所述Zookeeper服務(wù)器集群還根據(jù)所述數(shù)據(jù)同步信號將與所述數(shù)據(jù)鍵值對應(yīng)的數(shù)據(jù)同步為最新有效數(shù)據(jù),所述緩存服務(wù)器還用于向所述Zooke印er服務(wù)器集群發(fā)送第三獲取請求,用于獲取同步后的最新有效數(shù)據(jù),所述Zookeeper服務(wù)器集群還向所述緩存服務(wù)器返回所述最新有效數(shù)據(jù),所述緩存服務(wù)器將所述緩存數(shù)據(jù)更新為所述最新有效數(shù)據(jù),根據(jù)所述數(shù)據(jù)操作命令對所述最新有效數(shù)據(jù)進(jìn)行處理。
【文檔編號】H04L29/08GK104283956SQ201410525002
【公開日】2015年1月14日 申請日期:2014年9月30日 優(yōu)先權(quán)日:2014年9月30日
【發(fā)明者】張 浩, 佘曉彬 申請人:騰訊科技(深圳)有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1