專利名稱:一種保持?jǐn)?shù)據(jù)一致性的方法及系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及云計(jì)算領(lǐng)域的分布式緩存系統(tǒng),尤其涉及一種保持?jǐn)?shù)據(jù)一致性的方法 及系統(tǒng)。
背景技術(shù):
云計(jì)算(CloudComputing)是網(wǎng)格計(jì)算(Grid Computing)、分布式 計(jì)算(Distributed Computing)、并行計(jì)算(Parallel Computing)、效用計(jì) 算(UtilityComputing)、網(wǎng)絡(luò)存儲(chǔ)(Network Storage Technologies)、虛擬化 (Virtualization)、負(fù)載均衡(Load Balance)等傳統(tǒng)的計(jì)算機(jī)技術(shù)和網(wǎng)絡(luò)技術(shù)發(fā)展融合的 產(chǎn)物,它旨在通過網(wǎng)絡(luò)把多個(gè)成本相對(duì)較低的計(jì)算實(shí)體整合成一個(gè)具有強(qiáng)大計(jì)算能力的系 統(tǒng)。分布式緩存系統(tǒng)是云計(jì)算范圍中的一個(gè)領(lǐng)域,可以提供海量數(shù)據(jù)的分布式存儲(chǔ)服 務(wù),并具備高速讀寫訪問的能力。在分布式緩存系統(tǒng)中,保持?jǐn)?shù)據(jù)的一致性是比較難解決的 問題。分布式緩存系統(tǒng)是由若干服務(wù)器和客戶端互相連接構(gòu)成的;服務(wù)器負(fù)責(zé)數(shù)據(jù)的存儲(chǔ), 客戶端負(fù)責(zé)對(duì)服務(wù)器做數(shù)據(jù)的寫入、讀取、更新、刪除等操作。一般來說寫入的數(shù)據(jù)不可能 只保存在單個(gè)服務(wù)器上,而是在多臺(tái)服務(wù)器上保存同一個(gè)數(shù)據(jù)的副本,可以互為備份。所述 數(shù)據(jù)由鍵(Key)和值(Value)構(gòu)成,Key相當(dāng)于數(shù)據(jù)的索引,Value是Key所代表的數(shù)據(jù)內(nèi) 容,邏輯上Key和Value是——對(duì)應(yīng)的關(guān)系。如果對(duì)某個(gè)Key對(duì)應(yīng)的Value反復(fù)進(jìn)行寫入、更新、刪除等動(dòng)作,而在這些動(dòng)作期 間存在網(wǎng)絡(luò)故障或各種軟件、硬件故障等問題,則可能在不同的服務(wù)器上保存的該Key以 及與其對(duì)應(yīng)的Value是不一致的,而這時(shí)如果要通過Key讀取Value,如何實(shí)現(xiàn)能夠返回正 確的Value是亟待解決的問題,即數(shù)據(jù)一致性問題?,F(xiàn)有技術(shù)中,保持?jǐn)?shù)據(jù)一致性有四種方 法第一種方法是依賴于全局一致的時(shí)鐘,給每個(gè)Value加上時(shí)間戳,以時(shí)間戳大小 決定數(shù)據(jù)版本的新舊;在一秒鐘幾萬次操作的場景中,時(shí)間戳是一樣的,因?yàn)檫@種方法的缺 點(diǎn)是精確度較低;第二種方法是由某個(gè)中心節(jié)點(diǎn)賦予版本號(hào),即每個(gè)數(shù)據(jù)都從一個(gè)中心節(jié)點(diǎn)得到一 個(gè)版本號(hào),通過版本號(hào)來決定數(shù)據(jù)版本的新舊;這種方法的缺點(diǎn)是中心節(jié)點(diǎn)會(huì)導(dǎo)致運(yùn)行效 率的瓶頸;第三種方法是客戶端在每次寫入、更新、刪除操作之前都執(zhí)行讀取操作,從服務(wù)器 讀出數(shù)據(jù)的版本號(hào),并在執(zhí)行寫入、更新、刪除操作時(shí)將讀取到的版本號(hào)帶到服務(wù)器,表示 是基于這個(gè)版本號(hào)的操作,服務(wù)器收到操作指令后進(jìn)行判斷,如果當(dāng)前保存的數(shù)據(jù)版本號(hào) 與這個(gè)操作基于的版本號(hào)一致,則執(zhí)行操作并更新版本號(hào),否則拒絕操作;這種方法的缺點(diǎn) 是如果同時(shí)對(duì)同一個(gè)Key進(jìn)行操作,則先發(fā)到服務(wù)器的成功,后發(fā)到服務(wù)器的失敗,但實(shí)際 上在大多數(shù)應(yīng)用中,應(yīng)該是以后發(fā)到的數(shù)據(jù)為準(zhǔn);第四種方法是向量版本號(hào)、多版本的方案,與第三種方法類似,即在寫入、更新、刪除操作前客戶端都執(zhí)行讀取版本號(hào)的操作,客戶端會(huì)將版本號(hào)帶到服務(wù)器,服務(wù)器參考當(dāng) 前版本號(hào)和客戶端攜帶的版本號(hào)并根據(jù)一定規(guī)則決定新的版本號(hào),這里的版本號(hào)是按一定 規(guī)則生成的向量版本號(hào),這個(gè)方案的優(yōu)點(diǎn)是如果同一個(gè)Key有多個(gè)版本號(hào),則大多數(shù)版本 號(hào)之間是可以比較的;如果不可比較,則多個(gè)版本都被保存,當(dāng)客戶端讀取該Key對(duì)應(yīng)的 Value時(shí),將所有不可比較的版本返回給客戶端;這個(gè)方案的缺點(diǎn)是大多數(shù)應(yīng)用中,客戶端 在得到多個(gè)版本號(hào)的返回時(shí),同樣無從知道哪個(gè)Value是新的。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明的主要目的在于提供一種保持?jǐn)?shù)據(jù)一致性的方法及系統(tǒng),準(zhǔn)確、 高效的保證各個(gè)服務(wù)器中數(shù)據(jù)一致。為達(dá)到上述目的,本發(fā)明的技術(shù)方案是這樣實(shí)現(xiàn)的本發(fā)明公開一種保持?jǐn)?shù)據(jù)一致性的方法,包括協(xié)同服務(wù)器將所有的版本號(hào)進(jìn)行相互比較,當(dāng)兩個(gè)版本號(hào)不可比較時(shí),根據(jù)強(qiáng)制 合并規(guī)則確定新的版本號(hào);協(xié)同服務(wù)器在本地更新版本號(hào)和與其對(duì)應(yīng)的數(shù)據(jù),并將數(shù)據(jù)更新請(qǐng)求、新的版本 號(hào)和與其對(duì)應(yīng)的數(shù)據(jù)發(fā)送給各個(gè)副本服務(wù)器。上述方法中,所述協(xié)同服務(wù)器將所有的版本號(hào)進(jìn)行相互比較,當(dāng)兩個(gè)版本號(hào)不可 比較時(shí),根據(jù)強(qiáng)制合并規(guī)則確定新的版本號(hào)為如果相同的版本號(hào)的數(shù)量超過收到的版本號(hào)的總數(shù)的一半,則協(xié)同服務(wù)器確定所 述相同的版本號(hào)作為新的版本號(hào);如果相同的版本號(hào)的數(shù)量沒有超過收到的版本號(hào)的總數(shù) 的一半,則協(xié)同服務(wù)器根據(jù)大小比較方法,將不同的版本號(hào)進(jìn)行相互比較,協(xié)同服務(wù)器確定 將其中最大的版本號(hào)作為新的版本號(hào);當(dāng)存在兩個(gè)版本號(hào)之間不可比較的情況時(shí),協(xié)同服 務(wù)器根據(jù)強(qiáng)制合并規(guī)則確定新的版本號(hào)。上述方法中,所述強(qiáng)制合并規(guī)則為以優(yōu)先級(jí)最高的服務(wù)器所存儲(chǔ)的版本號(hào)為新 的版本號(hào),或以服務(wù)器無故障運(yùn)行時(shí)間最長的服務(wù)器所存儲(chǔ)的版本號(hào)為新的版本號(hào)。上述方法中,用于數(shù)據(jù)更新時(shí),所述協(xié)同服務(wù)器將所有的版本號(hào)進(jìn)行相互比較之 前還包括協(xié)同服務(wù)器收到客戶端發(fā)送的數(shù)據(jù)更新請(qǐng)求后,讀取自身存儲(chǔ)的版本號(hào)和與其對(duì) 應(yīng)的數(shù)據(jù)內(nèi)容,并發(fā)送數(shù)據(jù)讀取請(qǐng)求給各個(gè)副本服務(wù)器;副本服務(wù)器讀取自身存儲(chǔ)的版本 號(hào)和與其對(duì)應(yīng)的數(shù)據(jù)內(nèi)容,并發(fā)送給協(xié)同服務(wù)器。上述方法中,用于數(shù)據(jù)更新時(shí),還包括副本服務(wù)器進(jìn)行數(shù)據(jù)更新,將自身的更新結(jié)果返回給協(xié)同服務(wù)器;協(xié)同服務(wù)器將 總體的更新結(jié)果返回給客戶端。上述方法中,用于數(shù)據(jù)讀取時(shí),所述協(xié)同服務(wù)器將所有的版本號(hào)進(jìn)行相互比較之 前還包括協(xié)同服務(wù)器收到客戶端發(fā)送的數(shù)據(jù)讀取請(qǐng)求后,讀取自身存儲(chǔ)的版本號(hào)和與其對(duì) 應(yīng)的數(shù)據(jù),并發(fā)送數(shù)據(jù)讀取請(qǐng)求和讀取的版本號(hào)給副本服務(wù)器;副本服務(wù)器將收到的版本 號(hào)和自身存儲(chǔ)的版本號(hào)進(jìn)行比較,當(dāng)自身存儲(chǔ)的版本號(hào)更新或不可比較時(shí),將讀取的版本 號(hào)和與其對(duì)應(yīng)的數(shù)據(jù)發(fā)送給協(xié)同服務(wù)器,當(dāng)收到的版本號(hào)更新時(shí),返回比較結(jié)果。
上述方法中,用于數(shù)據(jù)更新時(shí),還包括協(xié)同服務(wù)器將新的版本號(hào)和與其對(duì)應(yīng)的數(shù)據(jù)發(fā)送給客戶端;副本服務(wù)器進(jìn)行數(shù)據(jù) 更新,將更新結(jié)果返回給協(xié)同服務(wù)器。本發(fā)明還公開一種保持?jǐn)?shù)據(jù)一致性的系統(tǒng),包括協(xié)同服務(wù)器、副本服務(wù)器;其 中,協(xié)同服務(wù)器,用于將所有的版本號(hào)進(jìn)行相互比較,當(dāng)兩個(gè)版本號(hào)不可比較時(shí),根據(jù) 強(qiáng)制合并規(guī)則確定新的版本號(hào);在本地更新版本號(hào)和與其對(duì)應(yīng)的數(shù)據(jù),并將數(shù)據(jù)更新請(qǐng)求、 新的版本號(hào)和與其對(duì)應(yīng)的數(shù)據(jù)發(fā)送給各個(gè)副本服務(wù)器;副本服務(wù)器,用于接收協(xié)同服務(wù)器發(fā)送的數(shù)據(jù)更新請(qǐng)求、新的版本號(hào)和與其對(duì)應(yīng) 的數(shù)據(jù)。上述系統(tǒng)中,用于數(shù)據(jù)更新時(shí),所述協(xié)同服務(wù)器還用于,收到客戶端發(fā)送的數(shù)據(jù)更新請(qǐng)求后,讀取自身存儲(chǔ)的版 本號(hào)和與其對(duì)應(yīng)的數(shù)據(jù)內(nèi)容,并發(fā)送數(shù)據(jù)讀取請(qǐng)求給各個(gè)副本服務(wù)器;所述副本服務(wù)器還 用于,收到數(shù)據(jù)讀取請(qǐng)求時(shí),讀取自身存儲(chǔ)的版本號(hào)和與其對(duì)應(yīng)的數(shù)據(jù)內(nèi)容,并發(fā)送給協(xié)同 服務(wù)器;所述副本服務(wù)器還用于,進(jìn)行數(shù)據(jù)更新,將自身的更新結(jié)果返回給協(xié)同服務(wù)器;所 述協(xié)同服務(wù)器還用于,將總體的更新結(jié)果返回給客戶端。上述系統(tǒng)中,用于數(shù)據(jù)讀取時(shí),所述協(xié)同服務(wù)器還用于,收到客戶端發(fā)送的數(shù)據(jù)讀取請(qǐng)求后,讀取自身存儲(chǔ)的版 本號(hào)和與其對(duì)應(yīng)的數(shù)據(jù);發(fā)送數(shù)據(jù)讀取請(qǐng)求和讀取的版本號(hào)給副本服務(wù)器;所述副本服務(wù) 器還用于,將收到的版本號(hào)和自身存儲(chǔ)的版本號(hào)進(jìn)行比較;當(dāng)自身存儲(chǔ)的版本號(hào)更新或不 可比較時(shí),將讀取的版本號(hào)和與其對(duì)應(yīng)的數(shù)據(jù)發(fā)送給協(xié)同服務(wù)器,當(dāng)收到的版本號(hào)更新時(shí), 返回比較結(jié)果;所述協(xié)同服務(wù)器還用于,將新的版本號(hào)和與其對(duì)應(yīng)的數(shù)據(jù)發(fā)送給客戶端;所述副 本服務(wù)器還用于,進(jìn)行數(shù)據(jù)更新,將更新結(jié)果返回給協(xié)同服務(wù)器。本發(fā)明提供的保持?jǐn)?shù)據(jù)一致性的方法及系統(tǒng),協(xié)同服務(wù)器將所有的版本號(hào)進(jìn)行相 互比較,當(dāng)兩個(gè)版本號(hào)不可比較時(shí),根據(jù)強(qiáng)制合并規(guī)則確定新的版本號(hào);協(xié)同服務(wù)器在本 地更新版本號(hào)和與其對(duì)應(yīng)的數(shù)據(jù),并將數(shù)據(jù)更新請(qǐng)求、新的版本號(hào)和與其對(duì)應(yīng)的數(shù)據(jù)發(fā)送 給各個(gè)副本服務(wù)器,不依賴于時(shí)鐘,從而提高了數(shù)據(jù)的準(zhǔn)確度;不依賴于中心節(jié)點(diǎn)分配版本 號(hào),避免了中心節(jié)點(diǎn)帶來的運(yùn)行效率的瓶頸,提高了數(shù)據(jù)讀取和更新的運(yùn)行效率;此外,針 對(duì)同一個(gè)key所對(duì)應(yīng)的版本號(hào)和與其對(duì)應(yīng)的數(shù)據(jù),在每個(gè)協(xié)同服務(wù)器和副本服務(wù)器上最多 只保留一個(gè)版本的數(shù)據(jù),協(xié)同服務(wù)器返回給客戶端的也只有一個(gè)版本的數(shù)據(jù),從而客戶端 可以得到最新版本的數(shù)據(jù)。
圖1是本發(fā)明數(shù)據(jù)更新時(shí)保持?jǐn)?shù)據(jù)一致性的方法的流程示意圖;圖2是本發(fā)明數(shù)據(jù)讀取時(shí)保持?jǐn)?shù)據(jù)一致性的方法的流程示意圖;圖3是本發(fā)明實(shí)現(xiàn)保持?jǐn)?shù)據(jù)一致性的系統(tǒng)的結(jié)構(gòu)示意圖。
具體實(shí)施例方式本發(fā)明的基本思想是協(xié)同服務(wù)器將所有的版本號(hào)進(jìn)行相互比較,當(dāng)兩個(gè)版本號(hào) 不可比較時(shí),根據(jù)強(qiáng)制合并規(guī)則確定新的版本號(hào);協(xié)同服務(wù)器在本地更新版本號(hào)和與其對(duì) 應(yīng)的數(shù)據(jù),并將數(shù)據(jù)更新請(qǐng)求、新的版本號(hào)和與其對(duì)應(yīng)的數(shù)據(jù)發(fā)送給各個(gè)副本服務(wù)器。下面通過附圖及具體實(shí)施例對(duì)本發(fā)明再做進(jìn)一步的詳細(xì)說明。本發(fā)明提供一種保持?jǐn)?shù)據(jù)一致性的方法,圖1是本發(fā)明數(shù)據(jù)更新時(shí)保持?jǐn)?shù)據(jù)一致 性的方法的流程示意圖,如圖1所示,該方法包括以下步驟步驟101,協(xié)同服務(wù)器收到客戶端發(fā)送的數(shù)據(jù)更新請(qǐng)求后,讀取自身存儲(chǔ)的版本號(hào) 和與其對(duì)應(yīng)的數(shù)據(jù)內(nèi)容;具體的,客戶端中保存數(shù)據(jù)的key與服務(wù)器的對(duì)應(yīng)關(guān)系的列表,當(dāng)需要對(duì)某個(gè)數(shù) 據(jù)進(jìn)行更新時(shí),客戶端根據(jù)該數(shù)據(jù)的key,將數(shù)據(jù)更新請(qǐng)求發(fā)送給與其對(duì)應(yīng)的服務(wù)器,該服 務(wù)器稱為本次操作的協(xié)同服務(wù)器;協(xié)同服務(wù)器收到客戶端發(fā)送的數(shù)據(jù)更新請(qǐng)求后,從本地 讀取自身存儲(chǔ)的與該key對(duì)應(yīng)的版本號(hào)和與該版本號(hào)對(duì)應(yīng)的數(shù)據(jù)內(nèi)容;其中,key、版本號(hào) 和數(shù)據(jù)內(nèi)容是一一對(duì)應(yīng)的,所述版本號(hào)為向量版本號(hào)。步驟102,協(xié)同服務(wù)器發(fā)送數(shù)據(jù)讀取請(qǐng)求給各個(gè)副本服務(wù)器;具體的,協(xié)同服務(wù)器保存該key與可能保存與該key對(duì)應(yīng)的數(shù)據(jù)內(nèi)容的副本服務(wù) 器的對(duì)應(yīng)關(guān)系的列表,協(xié)同服務(wù)器將數(shù)據(jù)讀取請(qǐng)求發(fā)送給各個(gè)可能保存與該key對(duì)應(yīng)的數(shù) 據(jù)內(nèi)容的副本服務(wù)器。步驟103,副本服務(wù)器讀取自身存儲(chǔ)的版本號(hào)和與其對(duì)應(yīng)的數(shù)據(jù)內(nèi)容,并發(fā)送給協(xié) 同服務(wù)器;具體的,每個(gè)副本服務(wù)器收到數(shù)據(jù)讀取請(qǐng)求后,嘗試讀取自身存儲(chǔ)的版本號(hào)和與 其對(duì)應(yīng)的數(shù)據(jù)內(nèi)容,如果能夠讀取出版本號(hào)和與其對(duì)應(yīng)的數(shù)據(jù)內(nèi)容,表示本地已經(jīng)保存版 本號(hào)和與其對(duì)應(yīng)的數(shù)據(jù)內(nèi)容,則副本服務(wù)器將讀取出的版本號(hào)和與其對(duì)應(yīng)的數(shù)據(jù)內(nèi)容發(fā)送 給協(xié)同服務(wù)器;如果沒有讀取出版本號(hào)和與其對(duì)應(yīng)的數(shù)據(jù)內(nèi)容,則副本服務(wù)器通知協(xié)同服 務(wù)器沒有數(shù)據(jù)。步驟104,協(xié)同服務(wù)器將所有的版本號(hào)進(jìn)行相互比較,當(dāng)兩個(gè)版本號(hào)不可比較時(shí), 根據(jù)強(qiáng)制合并規(guī)則確定新的版本號(hào);具體的,本實(shí)施例中的版本號(hào)是向量版本號(hào),使用向量版本號(hào)的優(yōu)點(diǎn)是,針對(duì)同一 個(gè)key的大部分的不同的版本的不同的版本號(hào)之間是可以相互比較的;向量版本號(hào)中每個(gè) 分量的數(shù)值表示的是,這個(gè)分量對(duì)應(yīng)的服務(wù)器為協(xié)同服務(wù)器時(shí),數(shù)據(jù)變更操作的次數(shù),所述 變更操作指的是寫入、更新、刪除操作;例如,X、Y、Z分別代表三臺(tái)服務(wù)器,客戶端第一次寫 入數(shù)據(jù)時(shí)選擇X為協(xié)同服務(wù)器,則向量版本號(hào)為(1,0,0),然后如果客戶端更新數(shù)據(jù)時(shí),X出 現(xiàn)故障,則客戶端可能會(huì)選擇Y為協(xié)同服務(wù)器,此時(shí)產(chǎn)生的向量版本號(hào)為(1,1,0),將兩個(gè) 向量版本號(hào)進(jìn)行比較,得出向量版本號(hào)為(1,1,0)的版本比向量版本號(hào)為(1,0,0)的版本 新;如果向量版本號(hào)為(3,2,3)與向量版本號(hào)為(1,2,4)的兩個(gè)版本號(hào)進(jìn)行比較,則這兩 個(gè)版本號(hào)是不可比較的,因?yàn)榍罢呦蛄堪姹咎?hào)中的向量既有大于后者的向量版本號(hào)中的向 量,也有小于后者的向量版本號(hào)中的向量,這種情況下,兩個(gè)向量版本號(hào)是不可比較的;協(xié)同服務(wù)器收到各個(gè)副本服務(wù)器返回的版本號(hào)和與其對(duì)應(yīng)的數(shù)據(jù)內(nèi)容,或沒有數(shù) 據(jù)的通知,當(dāng)協(xié)同服務(wù)器收到的副本服務(wù)器的響應(yīng)的數(shù)量超過副本服務(wù)器總數(shù)的一半時(shí),協(xié)同服務(wù)器將在步驟101中讀取的自身的版本號(hào)和收到的多個(gè)版本號(hào)之間進(jìn)行相互比較; 如果存在相同的版本號(hào)的數(shù)量超過收到的版本號(hào)的總數(shù)的一半,則協(xié)同服務(wù)器確定這些相 同的版本號(hào)作為新的版本號(hào);如果不存在相同的版本號(hào)的數(shù)量超過收到的版本號(hào)的總數(shù)的 一半,則協(xié)同服務(wù)器根據(jù)上述大小比較方法,將若干不同的版本號(hào)進(jìn)行相互比較,協(xié)同服務(wù) 器確定將其中最大的版本號(hào)作為新的版本號(hào);當(dāng)存在兩個(gè)版本號(hào)之間不可比較的情況時(shí), 協(xié)同服務(wù)器根據(jù)強(qiáng)制合并規(guī)則確定新的版本號(hào);其中,強(qiáng)制合并規(guī)則可以是服務(wù)器的優(yōu)先 級(jí),或服務(wù)器無故障運(yùn)行時(shí)間;例如,可以設(shè)置服務(wù)器的優(yōu)先級(jí),當(dāng)存在兩個(gè)版本號(hào)之間不 可比較的情況時(shí),以優(yōu)先級(jí)最高的服務(wù)器所存儲(chǔ)的版本號(hào)為新的版本號(hào);或,以服務(wù)器無故 障運(yùn)行時(shí)間最長的服務(wù)器所存儲(chǔ)的版本號(hào)為新的版本號(hào);協(xié)同服務(wù)器保存與副本服務(wù)器的交互記錄,協(xié)同服務(wù)器中還具有計(jì)數(shù)器,根據(jù)記 錄協(xié)同服務(wù)器可以知道發(fā)送的副本服務(wù)器的總數(shù),并可以利用計(jì)數(shù)器統(tǒng)計(jì)收到的副本服務(wù) 器的響應(yīng)數(shù)量,從而協(xié)同服務(wù)器可以確定,何時(shí)收到的副本服務(wù)器的響應(yīng)的數(shù)量超過副本 服務(wù)器總數(shù)的一半。步驟105,協(xié)同服務(wù)器在本地更新版本號(hào)和與其對(duì)應(yīng)的數(shù)據(jù),并將數(shù)據(jù)更新請(qǐng)求、 新的版本號(hào)和與其對(duì)應(yīng)的數(shù)據(jù)發(fā)送給各個(gè)副本服務(wù)器;具體的,協(xié)同服務(wù)器在確定新的版本號(hào)后,在本地將新的版本號(hào)和與其對(duì)應(yīng)的數(shù) 據(jù),替換原來存儲(chǔ)的版本號(hào)和與其對(duì)應(yīng)的數(shù)據(jù),實(shí)現(xiàn)版本號(hào)和與其對(duì)應(yīng)的數(shù)據(jù)的更新;協(xié)同 服務(wù)器將數(shù)據(jù)更新請(qǐng)求、確定的新的版本號(hào)和與其對(duì)應(yīng)的數(shù)據(jù)發(fā)送給各個(gè)副本服務(wù)器。步驟106,副本服務(wù)器進(jìn)行數(shù)據(jù)更新,將自身的更新結(jié)果返回給協(xié)同服務(wù)器,協(xié)同 服務(wù)器將總體的更新結(jié)果返回給客戶端;具體的,副本服務(wù)器收到協(xié)同服務(wù)器發(fā)送數(shù)據(jù)更新請(qǐng)求、新的版本號(hào)和與其對(duì)應(yīng) 的數(shù)據(jù)后,進(jìn)行版本號(hào)和與其對(duì)應(yīng)的數(shù)據(jù)的更新,將新的版本號(hào)和與其對(duì)應(yīng)的數(shù)據(jù)替換原 先在自身存儲(chǔ)的版本號(hào)和與其對(duì)應(yīng)的數(shù)據(jù),并將更新結(jié)果返回給協(xié)同服務(wù)器,更新結(jié)果包 括更新成功和更新失??;當(dāng)協(xié)同服務(wù)器收到的副本服務(wù)器的更新結(jié)果的數(shù)量超過副本服務(wù) 器總數(shù)的一半時(shí),協(xié)同服務(wù)器將更新成功的結(jié)果返回給客戶端;如果協(xié)同服務(wù)器收到的副 本服務(wù)器的更新結(jié)果的數(shù)量最終沒有超過副本服務(wù)器總數(shù)的一半,協(xié)同服務(wù)器將更新失敗 的結(jié)果返回給客戶端。圖2是本發(fā)明數(shù)據(jù)讀取時(shí)保持?jǐn)?shù)據(jù)一致性的方法的流程示意圖,如圖2所示,該方 法包括以下步驟步驟201,協(xié)同服務(wù)器收到客戶端發(fā)送的數(shù)據(jù)讀取請(qǐng)求后,讀取自身存儲(chǔ)的版本號(hào) 和與其對(duì)應(yīng)的數(shù)據(jù);具體的,客戶端中保存數(shù)據(jù)的key與服務(wù)器的對(duì)應(yīng)關(guān)系的列表,當(dāng)需要對(duì)某個(gè)數(shù) 據(jù)進(jìn)行讀取時(shí),客戶端根據(jù)該數(shù)據(jù)的key,將數(shù)據(jù)讀取請(qǐng)求發(fā)送給與其對(duì)應(yīng)的服務(wù)器,該服 務(wù)器稱為本次操作的協(xié)同服務(wù)器;協(xié)同服務(wù)器收到客戶端發(fā)送的數(shù)據(jù)讀取請(qǐng)求后,從本地 讀取自身存儲(chǔ)的與該key對(duì)應(yīng)的版本號(hào)和與該版本號(hào)對(duì)應(yīng)的數(shù)據(jù)內(nèi)容;其中,key、版本號(hào) 和數(shù)據(jù)內(nèi)容是一一對(duì)應(yīng)的,所述版本號(hào)為向量版本號(hào)。步驟202,協(xié)同服務(wù)器發(fā)送數(shù)據(jù)讀取請(qǐng)求和讀取的版本號(hào)給副本服務(wù)器;具體的,協(xié)同服務(wù)器保存該key與可能保存與該key對(duì)應(yīng)的數(shù)據(jù)內(nèi)容的副本服務(wù) 器的對(duì)應(yīng)關(guān)系的列表,協(xié)同服務(wù)器將數(shù)據(jù)讀取請(qǐng)求和在步驟201中讀取的版本號(hào)發(fā)送給各個(gè)可能保存與該key對(duì)應(yīng)的數(shù)據(jù)內(nèi)容的副本服務(wù)器。步驟203,副本服務(wù)器將收到的版本號(hào)和自身存儲(chǔ)的版本號(hào)進(jìn)行比較;具體的,每個(gè)副本服務(wù)器收到數(shù)據(jù)讀取請(qǐng)求后,嘗試讀取自身存儲(chǔ)的版本號(hào)和與 其對(duì)應(yīng)的數(shù)據(jù)內(nèi)容,如果能夠讀取出版本號(hào)和與其對(duì)應(yīng)的數(shù)據(jù)內(nèi)容,表示本地已經(jīng)保存版 本號(hào)和與其對(duì)應(yīng)的數(shù)據(jù)內(nèi)容,則副本服務(wù)器將讀取出的版本號(hào)與收到的版本號(hào)進(jìn)行比較, 如果讀取出的版本號(hào)比收到的版本號(hào)新,或兩個(gè)版本號(hào)不可比較,則執(zhí)行步驟204;如果收 到的版本號(hào)新,或兩個(gè)版本號(hào)相同容,則執(zhí)行步驟208 ;如果沒有讀取出版本號(hào)和與其對(duì)應(yīng) 的數(shù)據(jù)內(nèi)容,則副本服務(wù)器通知協(xié)同服務(wù)器沒有數(shù)據(jù)。步驟204,副本服務(wù)器將讀取的版本號(hào)和與其對(duì)應(yīng)的數(shù)據(jù)發(fā)送給協(xié)同服務(wù)器。步驟205同步驟104。步驟206,協(xié)同服務(wù)器在本地更新版本號(hào)和與其對(duì)應(yīng)的數(shù)據(jù),并將新的版本號(hào)和與 其對(duì)應(yīng)的數(shù)據(jù)發(fā)送給客戶端,將數(shù)據(jù)更新請(qǐng)求、新的版本號(hào)和與其對(duì)應(yīng)的數(shù)據(jù)發(fā)送給各個(gè) 副本服務(wù)器;具體的,協(xié)同服務(wù)器在確定新的版本號(hào)后,在本地將新的版本號(hào)和與其對(duì)應(yīng)的數(shù) 據(jù),替換原來存儲(chǔ)的版本號(hào)和與其對(duì)應(yīng)的數(shù)據(jù),實(shí)現(xiàn)版本號(hào)和與其對(duì)應(yīng)的數(shù)據(jù)的更新;協(xié)同 服務(wù)器將新的版本號(hào)和與其對(duì)應(yīng)的數(shù)據(jù)發(fā)送給客戶端,并將數(shù)據(jù)更新請(qǐng)求、確定的新的版 本號(hào)和與其對(duì)應(yīng)的數(shù)據(jù)發(fā)送給各個(gè)副本服務(wù)器。步驟207,副本服務(wù)器進(jìn)行數(shù)據(jù)更新,將更新結(jié)果返回給協(xié)同服務(wù)器,結(jié)束當(dāng)前流 程;具體的,副本服務(wù)器收到協(xié)同服務(wù)器發(fā)送數(shù)據(jù)更新請(qǐng)求、新的版本號(hào)和與其對(duì)應(yīng) 的數(shù)據(jù)后,進(jìn)行版本號(hào)和與其對(duì)應(yīng)的數(shù)據(jù)的更新,將新的版本號(hào)和與其對(duì)應(yīng)的數(shù)據(jù)替換原 先在自身存儲(chǔ)的版本號(hào)和與其對(duì)應(yīng)的數(shù)據(jù),并將更新結(jié)果返回給協(xié)同服務(wù)器,更新結(jié)果包 括更新成功和更新失敗。步驟208,副本服務(wù)器返回比較結(jié)果;具體的,如果副本服務(wù)器確定收到的版本號(hào)新,或收到的版本號(hào)和讀取的版本號(hào) 相同,副本服務(wù)器將上述比較結(jié)果返回給協(xié)同服務(wù)器,結(jié)束流程。本實(shí)施例中,當(dāng)副本服務(wù)器確定協(xié)同服務(wù)器的版本號(hào)新或兩個(gè)版本號(hào)不可比較 時(shí),返回讀取到的版本號(hào)和與其對(duì)應(yīng)的數(shù)據(jù)內(nèi)容,否則只返回比較結(jié)果給協(xié)同服務(wù)器,提示 兩個(gè)版本號(hào)相同或收到的版本號(hào)新,從而可以節(jié)省大量的帶寬,提高自身的執(zhí)行效率。上述方法中,當(dāng)存在兩個(gè)版本號(hào)不可比較時(shí),根據(jù)一定的規(guī)則進(jìn)行強(qiáng)制合并,最后 確定一個(gè)新的版本號(hào),因此針對(duì)同一個(gè)key所對(duì)應(yīng)的版本號(hào)和與其對(duì)應(yīng)的數(shù)據(jù),在每個(gè)協(xié) 同服務(wù)器和副本服務(wù)器上最多只保留一個(gè)版本的數(shù)據(jù),協(xié)同服務(wù)器返回給客戶端的也只有 一個(gè)版本的數(shù)據(jù),彌補(bǔ)了背景技術(shù)中第四種方法的不足;此外,服務(wù)器易于得到更多的版本 號(hào)作為參考,相對(duì)來說判斷的較為準(zhǔn)確,所以在服務(wù)器進(jìn)行版本號(hào)的比較比在客戶端進(jìn)行 比較更加具有優(yōu)勢。為實(shí)現(xiàn)上述方法,本發(fā)明還提供一種保持?jǐn)?shù)據(jù)一致性的系統(tǒng),圖3是本發(fā)明實(shí)現(xiàn) 保持?jǐn)?shù)據(jù)一致性的系統(tǒng)的結(jié)構(gòu)示意圖,如圖3所示,該系統(tǒng)包括協(xié)同服務(wù)器31、副本服務(wù) 器32 ;其中,協(xié)同服務(wù)器31,用于將所有的版本號(hào)進(jìn)行相互比較,當(dāng)兩個(gè)版本號(hào)不可比較時(shí),根
9據(jù)強(qiáng)制合并規(guī)則確定新的版本號(hào);在本地更新版本號(hào)和與其對(duì)應(yīng)的數(shù)據(jù),并將數(shù)據(jù)更新請(qǐng) 求、新的版本號(hào)和與其對(duì)應(yīng)的數(shù)據(jù)發(fā)送給各個(gè)副本服務(wù)器32 ;副本服務(wù)器32,用于接收協(xié)同服務(wù)器發(fā)送的數(shù)據(jù)更新請(qǐng)求、新的版本號(hào)和與其對(duì) 應(yīng)的數(shù)據(jù)。用于數(shù)據(jù)更新時(shí),所述協(xié)同服務(wù)器31還用于,收到客戶端發(fā)送的數(shù)據(jù)更新請(qǐng)求后,讀取自身存儲(chǔ)的 版本號(hào)和與其對(duì)應(yīng)的數(shù)據(jù)內(nèi)容,并發(fā)送數(shù)據(jù)讀取請(qǐng)求給各個(gè)副本服務(wù)器32 ;所述副本服務(wù) 器32還用于,收到數(shù)據(jù)讀取請(qǐng)求時(shí),讀取自身存儲(chǔ)的版本號(hào)和與其對(duì)應(yīng)的數(shù)據(jù)內(nèi)容,并發(fā) 送給協(xié)同服務(wù)器31 ;所述副本服務(wù)器32還用于,進(jìn)行數(shù)據(jù)更新,將自身的更新結(jié)果返回給協(xié)同服務(wù)器 31 ;所述協(xié)同服務(wù)器31還用于,將總體的更新結(jié)果返回給客戶端。用于數(shù)據(jù)讀取時(shí),所述協(xié)同服務(wù)器31還用于,收到客戶端發(fā)送的數(shù)據(jù)讀取請(qǐng)求后,讀取自身存儲(chǔ)的 版本號(hào)和與其對(duì)應(yīng)的數(shù)據(jù);發(fā)送數(shù)據(jù)讀取請(qǐng)求和讀取的版本號(hào)給副本服務(wù)器32 ;所述副本 服務(wù)器32還用于,將收到的版本號(hào)和自身存儲(chǔ)的版本號(hào)進(jìn)行比較;當(dāng)自身存儲(chǔ)的版本號(hào)更 新或不可比較時(shí),將讀取的版本號(hào)和與其對(duì)應(yīng)的數(shù)據(jù)發(fā)送給協(xié)同服務(wù)器31,當(dāng)收到的版本 號(hào)更新時(shí),返回比較結(jié)果;所述協(xié)同服務(wù)器31還用于,將新的版本號(hào)和與其對(duì)應(yīng)的數(shù)據(jù)發(fā)送給客戶端;所述 副本服務(wù)器32還用于,進(jìn)行數(shù)據(jù)更新,將更新結(jié)果返回給協(xié)同服務(wù)器31。以上所述,僅為本發(fā)明的較佳實(shí)施例而已,并非用于限定本發(fā)明的保護(hù)范圍,凡在 本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù) 范圍之內(nèi)。
權(quán)利要求
一種保持?jǐn)?shù)據(jù)一致性的方法,其特征在于,該方法包括協(xié)同服務(wù)器將所有的版本號(hào)進(jìn)行相互比較,當(dāng)兩個(gè)版本號(hào)不可比較時(shí),根據(jù)強(qiáng)制合并規(guī)則確定新的版本號(hào);協(xié)同服務(wù)器在本地更新版本號(hào)和與其對(duì)應(yīng)的數(shù)據(jù),并將數(shù)據(jù)更新請(qǐng)求、新的版本號(hào)和與其對(duì)應(yīng)的數(shù)據(jù)發(fā)送給各個(gè)副本服務(wù)器。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述協(xié)同服務(wù)器將所有的版本號(hào)進(jìn)行相 互比較,當(dāng)兩個(gè)版本號(hào)不可比較時(shí),根據(jù)強(qiáng)制合并規(guī)則確定新的版本號(hào)為如果相同的版本號(hào)的數(shù)量超過收到的版本號(hào)的總數(shù)的一半,則協(xié)同服務(wù)器確定所述相 同的版本號(hào)作為新的版本號(hào);如果相同的版本號(hào)的數(shù)量沒有超過收到的版本號(hào)的總數(shù)的一 半,則協(xié)同服務(wù)器根據(jù)大小比較方法,將不同的版本號(hào)進(jìn)行相互比較,協(xié)同服務(wù)器確定將其 中最大的版本號(hào)作為新的版本號(hào);當(dāng)存在兩個(gè)版本號(hào)之間不可比較的情況時(shí),協(xié)同服務(wù)器 根據(jù)強(qiáng)制合并規(guī)則確定新的版本號(hào)。
3.根據(jù)權(quán)利要求1或2所述的方法,其特征在于,所述強(qiáng)制合并規(guī)則為以優(yōu)先級(jí)最高 的服務(wù)器所存儲(chǔ)的版本號(hào)為新的版本號(hào),或以服務(wù)器無故障運(yùn)行時(shí)間最長的服務(wù)器所存儲(chǔ) 的版本號(hào)為新的版本號(hào)。
4.根據(jù)權(quán)利要求1或2所述的方法,其特征在于,用于數(shù)據(jù)更新時(shí),所述協(xié)同服務(wù)器將 所有的版本號(hào)進(jìn)行相互比較之前還包括協(xié)同服務(wù)器收到客戶端發(fā)送的數(shù)據(jù)更新請(qǐng)求后,讀取自身存儲(chǔ)的版本號(hào)和與其對(duì)應(yīng)的 數(shù)據(jù)內(nèi)容,并發(fā)送數(shù)據(jù)讀取請(qǐng)求給各個(gè)副本服務(wù)器;副本服務(wù)器讀取自身存儲(chǔ)的版本號(hào)和 與其對(duì)應(yīng)的數(shù)據(jù)內(nèi)容,并發(fā)送給協(xié)同服務(wù)器。
5.根據(jù)權(quán)利要求1或2所述的方法,其特征在于,用于數(shù)據(jù)更新時(shí),還包括副本服務(wù)器進(jìn)行數(shù)據(jù)更新,將自身的更新結(jié)果返回給協(xié)同服務(wù)器;協(xié)同服務(wù)器將總體 的更新結(jié)果返回給客戶端。
6.根據(jù)權(quán)利要求1或2所述的方法,其特征在于,用于數(shù)據(jù)讀取時(shí),所述協(xié)同服務(wù)器將 所有的版本號(hào)進(jìn)行相互比較之前還包括協(xié)同服務(wù)器收到客戶端發(fā)送的數(shù)據(jù)讀取請(qǐng)求后,讀取自身存儲(chǔ)的版本號(hào)和與其對(duì)應(yīng)的 數(shù)據(jù),并發(fā)送數(shù)據(jù)讀取請(qǐng)求和讀取的版本號(hào)給副本服務(wù)器;副本服務(wù)器將收到的版本號(hào)和 自身存儲(chǔ)的版本號(hào)進(jìn)行比較,當(dāng)自身存儲(chǔ)的版本號(hào)更新或不可比較時(shí),將讀取的版本號(hào)和 與其對(duì)應(yīng)的數(shù)據(jù)發(fā)送給協(xié)同服務(wù)器,當(dāng)收到的版本號(hào)更新時(shí),返回比較結(jié)果。
7.根據(jù)權(quán)利要求1或2所述的方法,其特征在于,用于數(shù)據(jù)更新時(shí),還包括 協(xié)同服務(wù)器將新的版本號(hào)和與其對(duì)應(yīng)的數(shù)據(jù)發(fā)送給客戶端;副本服務(wù)器進(jìn)行數(shù)據(jù)更新,將更新結(jié)果返回給協(xié)同服務(wù)器。
8.一種保持?jǐn)?shù)據(jù)一致性的系統(tǒng),其特征在于,該系統(tǒng)包括協(xié)同服務(wù)器、副本服務(wù)器; 其中,協(xié)同服務(wù)器,用于將所有的版本號(hào)進(jìn)行相互比較,當(dāng)兩個(gè)版本號(hào)不可比較時(shí),根據(jù)強(qiáng)制 合并規(guī)則確定新的版本號(hào);在本地更新版本號(hào)和與其對(duì)應(yīng)的數(shù)據(jù),并將數(shù)據(jù)更新請(qǐng)求、新的 版本號(hào)和與其對(duì)應(yīng)的數(shù)據(jù)發(fā)送給各個(gè)副本服務(wù)器;副本服務(wù)器,用于接收協(xié)同服務(wù)器發(fā)送的數(shù)據(jù)更新請(qǐng)求、新的版本號(hào)和與其對(duì)應(yīng)的數(shù)據(jù)。
9.根據(jù)權(quán)利要求8所述的系統(tǒng),其特征在于,用于數(shù)據(jù)更新時(shí),所述協(xié)同服務(wù)器還用于,收到客戶端發(fā)送的數(shù)據(jù)更新請(qǐng)求后,讀取自身存儲(chǔ)的版本號(hào) 和與其對(duì)應(yīng)的數(shù)據(jù)內(nèi)容,并發(fā)送數(shù)據(jù)讀取請(qǐng)求給各個(gè)副本服務(wù)器;所述副本服務(wù)器還用于, 收到數(shù)據(jù)讀取請(qǐng)求時(shí),讀取自身存儲(chǔ)的版本號(hào)和與其對(duì)應(yīng)的數(shù)據(jù)內(nèi)容,并發(fā)送給協(xié)同服務(wù) 器;所述副本服務(wù)器還用于,進(jìn)行數(shù)據(jù)更新,將自身的更新結(jié)果返回給協(xié)同服務(wù)器;所述協(xié) 同服務(wù)器還用于,將總體的更新結(jié)果返回給客戶端。
10.根據(jù)權(quán)利要求8所述的系統(tǒng),其特征在于,用于數(shù)據(jù)讀取時(shí),所述協(xié)同服務(wù)器還用于,收到客戶端發(fā)送的數(shù)據(jù)讀取請(qǐng)求后,讀取自身存儲(chǔ)的版本號(hào) 和與其對(duì)應(yīng)的數(shù)據(jù);發(fā)送數(shù)據(jù)讀取請(qǐng)求和讀取的版本號(hào)給副本服務(wù)器;所述副本服務(wù)器還 用于,將收到的版本號(hào)和自身存儲(chǔ)的版本號(hào)進(jìn)行比較;當(dāng)自身存儲(chǔ)的版本號(hào)更新或不可比 較時(shí),將讀取的版本號(hào)和與其對(duì)應(yīng)的數(shù)據(jù)發(fā)送給協(xié)同服務(wù)器,當(dāng)收到的版本號(hào)更新時(shí),返回 比較結(jié)果;所述協(xié)同服務(wù)器還用于,將新的版本號(hào)和與其對(duì)應(yīng)的數(shù)據(jù)發(fā)送給客戶端;所述副本服 務(wù)器還用于,進(jìn)行數(shù)據(jù)更新,將更新結(jié)果返回給協(xié)同服務(wù)器。
全文摘要
本發(fā)明公開一種保持?jǐn)?shù)據(jù)一致性的方法,包括協(xié)同服務(wù)器將所有的版本號(hào)進(jìn)行相互比較,當(dāng)兩個(gè)版本號(hào)不可比較時(shí),根據(jù)強(qiáng)制合并規(guī)則確定新的版本號(hào);協(xié)同服務(wù)器在本地更新版本號(hào)和與其對(duì)應(yīng)的數(shù)據(jù),并將數(shù)據(jù)更新請(qǐng)求、新的版本號(hào)和與其對(duì)應(yīng)的數(shù)據(jù)發(fā)送給各個(gè)副本服務(wù)器;本發(fā)明還提供一種保持?jǐn)?shù)據(jù)一致性的系統(tǒng)。根據(jù)本發(fā)明的技術(shù)方案,準(zhǔn)確、高效的保證各個(gè)服務(wù)器中數(shù)據(jù)一致。
文檔編號(hào)H04L29/08GK101964820SQ20101050343
公開日2011年2月2日 申請(qǐng)日期2010年10月8日 優(yōu)先權(quán)日2010年10月8日
發(fā)明者郭斌, 陳典強(qiáng), 韓銀俊, 高洪 申請(qǐng)人:中興通訊股份有限公司