亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種事務(wù)處理方法與裝置與流程

文檔序號:11627668閱讀:227來源:國知局
一種事務(wù)處理方法與裝置與流程

本發(fā)明涉及信息技術(shù)領(lǐng)域,特別涉及一種事務(wù)處理方法和裝置。



背景技術(shù):

對象存儲系統(tǒng)(object-basedstoragesystem)是一種分布式存儲系統(tǒng),由多個基于對象的存儲設(shè)備osd(object-basedstoragedevice)組成,osd通過網(wǎng)絡(luò)互連,osd也可以稱為對象存儲系統(tǒng)中的節(jié)點。在對象存儲系統(tǒng)中,以對象(object)作為最基本的被存儲內(nèi)容單元,對象中包含了數(shù)據(jù)以及數(shù)據(jù)的屬性信息。數(shù)據(jù)指的是對象中存儲的內(nèi)容,例如視頻文件,音樂文件等,數(shù)據(jù)的的屬性信息例如文件的大小,版本信息等。

為了存儲的對象的可靠性,一般會將一個對象存儲到不同的osd上,這樣,即使是一部分osd出現(xiàn)故障,也不影響對象的讀寫操作。這樣,就提升數(shù)據(jù)的可靠性。由于同一個對象需要備份多份后存儲到不同節(jié)點,也就說對象是跨多個osd節(jié)點來存儲,這些備份數(shù)據(jù)也可以稱為副本。為了保證對象存儲的一致性要求,對象的寫操作需要通過事務(wù)來保證。事務(wù)可以理解成是一組面向數(shù)據(jù)變更的操作,這組操中,除非所有操作都成功,否則不會對數(shù)據(jù)進行變更。這樣就保證了同一個對象在不同osd上的副本是相同的,避免了部分副本進行了變更部分副本沒有變更。

事務(wù)包含一系列操作集合,這些操作經(jīng)常由多個節(jié)點并行執(zhí)行,使分布在多個節(jié)點的數(shù)據(jù)從一個一致狀態(tài)轉(zhuǎn)換到另一個一致狀態(tài)(在分布式對象存儲系統(tǒng)中,意味著多個節(jié)點中的相同對象擁有相同的版本號),組成事務(wù)的一系列操作要么全部執(zhí)行,要么全部不執(zhí)行,從而保持節(jié)點上數(shù)據(jù)狀態(tài)的一致性。在非存儲領(lǐng)域,也同樣存在需要使用事務(wù)的情形。

現(xiàn)有的兩階段提交協(xié)議(two-phasecommitmentprotocol,2pc),可以保證分布式事務(wù)提交的原子性。它把分布式事務(wù)的某一個osd指定為協(xié)調(diào)者(coordinator),所有其他osd指定為參與者(participants)。只有協(xié)調(diào)者才有掌握提交或撤銷事務(wù)的決定權(quán),并在做出提交或者撤銷事務(wù)的結(jié)論后,把結(jié)論發(fā)給參與者。如果結(jié)論是提交事務(wù),就發(fā)送commit消息;如果結(jié)論是終止事務(wù),就發(fā)送abort消息。而各個參與者接收協(xié)調(diào)者的結(jié)論,按照結(jié)論在其本地數(shù)據(jù)庫中執(zhí)行操作;參與者還可以向協(xié)調(diào)者提出撤銷或提交子事務(wù)的意向。

在參與者等待協(xié)調(diào)者的結(jié)論時,如果協(xié)調(diào)者失效,參與者會長時間等待協(xié)調(diào)者的結(jié)論。在等待期間,各個參與者的事務(wù)無法結(jié)束,也無法釋放占用的資源,會造成了阻塞。為了避免阻塞,現(xiàn)有技術(shù)提出了一種狀態(tài)確認技術(shù),通過參與者查詢其他參與者的事務(wù)狀態(tài),確認自身是否需要執(zhí)行事務(wù),但是在這種方法中,參與者之間交互過程過多,造成系統(tǒng)性能下降。

即使協(xié)調(diào)者沒有失效,如何通過讀取參與者的信息來獲得事務(wù)的結(jié)論,也是一個需要解決的問題。



技術(shù)實現(xiàn)要素:

本發(fā)明提供一種事務(wù)處理方法,可以通過讀取參與者的信息,獲得事務(wù)結(jié)論。

第一方面,本發(fā)明實施例提供一種事務(wù)處理方法,應(yīng)用于協(xié)調(diào)者,所述協(xié)調(diào)者和參與者通信連接,事務(wù)操作的對象由多個子對象組成,其中,一個所述子對象位于所述協(xié)調(diào)者中,其他所述子對象分別位于不同的所述參與者中,該方法包括:所述協(xié)調(diào)者向各個參與者發(fā)送查詢消息,所述查詢消息中攜帶有事務(wù)id、對象id以及所述對象的變化信息,其中所述事務(wù)id用于標記所述事務(wù),所述對象id用于標記所述對象,所述變化信息與所述對象的內(nèi)容對應(yīng),不同所述變化信息的所述對象的內(nèi)容不同;所述協(xié)調(diào)者接收各個參與者對所述查詢消息的響應(yīng)消息;所述協(xié)調(diào)者根據(jù)所述響應(yīng)消息得出結(jié)論,所述協(xié)調(diào)者執(zhí)行所述結(jié)論,并將所述結(jié)論發(fā)送給所有所述參與者,所述結(jié)論包括下述至少一種:如果任意一個響應(yīng)消息中攜帶有第一信息,則結(jié)論為執(zhí)行事務(wù),其中,所述第一信息表示所述參與者不存在所述事務(wù)id,存在所述對象id,所述對象在參與者中的變化信息與所述對象在協(xié)調(diào)者中的變化信息相同;或者,如果任意一個響應(yīng)消息中攜帶有第二信息,則結(jié)論為終止事務(wù),其中,所述第二信息表示所述參與者不存在所述事務(wù)id,存在所述對象id,所述對象在參與者中的變化信息與所述對象在協(xié)調(diào)者的變化信息不同。

在第一方面的第一種實現(xiàn)方式中,所述結(jié)論還包括下述至少一種:如果所有響應(yīng)消息中均攜帶有第三信息,則結(jié)論包括為執(zhí)行事務(wù),其中,所述第三信息表示所述參與者存在所述事務(wù)id;如果任意一個響應(yīng)消息中攜帶有第四信息,則結(jié)論為執(zhí)行事務(wù),其中,第四信息表示所述參與者不存在所述事務(wù)id,并且所述參與者不存在所述對象id。

第二方面,本發(fā)明實施例提供一種事務(wù)處理裝置,與參與者通信連接,事務(wù)操作的對象由多個子對象組成,其中,一個所述子對象位于所述事務(wù)處理裝置中,其他所述子對象分別位于不同的所述參與者中,該裝置包括:查詢模塊,用于向各個參與者發(fā)送查詢消息,所述查詢消息中攜帶有事務(wù)id、對象id以及所述對象的變化信息,其中所述事務(wù)id用于標記所述事務(wù),所述對象id用于標記所述對象,所述變化信息與所述對象的內(nèi)容對應(yīng),不同所述變化信息的所述對象的內(nèi)容不同;接收模塊,用于接收各個參與者對所述查詢消息的響應(yīng)消息;決策模塊,用于根據(jù)所述響應(yīng)消息得出結(jié)論,并將所述結(jié)論發(fā)送給所有所述參與者,所述結(jié)論包括下述至少一種:如果任意一個響應(yīng)消息中攜帶有第一信息,則結(jié)論為執(zhí)行事務(wù),其中,所述第一信息表示所述參與者存在所述事務(wù)id,存在所述對象id,所述對象在參與者中的變化信息與所述對象在協(xié)調(diào)者中的變化信息相同;或者,如果任意一個響應(yīng)消息中攜帶有第二信息,則結(jié)論為終止事務(wù),其中,所述第二信息表示所述參與者存在所述事務(wù)id,存在所述對象id,所述對象在參與者中的變化信息與所述對象在協(xié)調(diào)者的變化信息不同;執(zhí)行模塊,用于執(zhí)行所述決策模塊的結(jié)論。

在第二方面的第一種實現(xiàn)方式中,所述結(jié)論還包括下述至少一種:如果所有響應(yīng)消息中均攜帶有第三信息,則結(jié)論包括為執(zhí)行事務(wù),其中,所述第三信息表示所述參與者存在所述事務(wù)id;如果任意一個響應(yīng)消息中攜帶有第四信息,則結(jié)論為執(zhí)行事務(wù),其中,第四信息表示所述參與者不存在所述事務(wù)id,并且所述參與者不存在所述對象id。

第三方面,本發(fā)明實施例提供一種事務(wù)處理方法,應(yīng)用于協(xié)調(diào)者,所述協(xié)調(diào)者和參與者通信連接,事務(wù)操作的對象由多個子對象組成,其中,一個所述子對象位于所述協(xié)調(diào)者中,其他所述子對象分別位于不同的所述參與者中,該方法包括:所述協(xié)調(diào)者向各個參與者發(fā)送查詢消息,所述查詢消息中攜帶有事務(wù)id以及對象id,其中所述事務(wù)id用于標記所述事務(wù),所述對象id用于標記所述對象,所述變化信息與所述對象的內(nèi)容對應(yīng),不同所述變化信息的所述對象的內(nèi)容不同;所述協(xié)調(diào)者接收各個參與者對所述查詢消息的響應(yīng)消息,所述響應(yīng)消息攜帶所述第五信息,所述第五消息表示所述參與者不存在所述事務(wù)id,存在所述對象id,其中,所述第五信息中還攜帶有發(fā)出響應(yīng)消息的參與者中所述對象變化信息;所述協(xié)調(diào)者根據(jù)所述響應(yīng)消息得出結(jié)論,所述協(xié)調(diào)者執(zhí)行所述結(jié)論,并將所述結(jié)論發(fā)送給所有所述參與者,所述結(jié)論包括下述至少一種:如果所述對象在參與者中的變化信息與所述對象在協(xié)調(diào)者中的變化信息相同,則結(jié)論為執(zhí)行事務(wù);或者,如果所述對象在參與者中的變化信息與所述對象在協(xié)調(diào)者中的變化信息不同,則結(jié)論為終止事務(wù)。

在第三方面的第一種實現(xiàn)方式中,所述結(jié)論還包括下述至少一種:如果所有響應(yīng)消息中均攜帶有第三信息,則結(jié)論包括為執(zhí)行事務(wù),其中,所述第三信息表示所述參與者存在所述事務(wù)id;如果任意一個響應(yīng)消息中攜帶有第四信息,則結(jié)論為執(zhí)行事務(wù),其中,第四信息表示所述參與者不存在所述事務(wù)id,并且所述參與者不存在所述對象id。

第四方面,本發(fā)明實施例一種事務(wù)處理裝置,與參與者通信連接,事務(wù)操作的對象由多個子對象組成,其中,一個所述子對象位于所述事務(wù)處理裝置中,其他所述子對象分別位于不同的所述參與者中,該裝置包括:查詢模塊,用于向各個參與者發(fā)送查詢消息,所述查詢消息中攜帶有所述查詢消息中攜帶有事務(wù)id以及對象id,其中所述事務(wù)id用于標記所述事務(wù),所述對象id用于標記所述對象;接收模塊,用于接收各個參與者對所述查詢消息的響應(yīng)消息,所述響應(yīng)消息攜帶所述第五信息,所述表示所述參與者不存在所述事務(wù)id,存在所述對象id,其中,所述第五信息中還攜帶有發(fā)出響應(yīng)消息的參與者中所述對象變化信息;決策模塊,根據(jù)所述響應(yīng)消息得出結(jié)論,所述協(xié)調(diào)者執(zhí)行所述結(jié)論,所述變化信息與所述對象的內(nèi)容對應(yīng),不同所述變化信息的所述對象的內(nèi)容不同;并將所述結(jié)論發(fā)送給所有所述參與者,所述結(jié)論包括下述至少一種:如果所述對象在參與者中的變化信息與所述對象在協(xié)調(diào)者中的變化信息相同,則結(jié)論為執(zhí)行事務(wù);或者,如果所述對象在參與者中的變化信息與所述對象在協(xié)調(diào)者中的變化信息不同,則結(jié)論為終止事務(wù);執(zhí)行模塊,用于執(zhí)行所述決策模塊的結(jié)論。

在第四方面的第一種實現(xiàn)方式中,所述結(jié)論還包括下述至少一種:如果所有響應(yīng)消息中均攜帶有第三信息,則結(jié)論包括為執(zhí)行事務(wù),其中,所述第三信息表示所述參與者存在所述事務(wù)id;如果任意一個響應(yīng)消息中攜帶有第四信息,則結(jié)論為執(zhí)行事務(wù),其中,第四信息表示所述參與者不存在所述事務(wù)id,并且所述參與者不存在所述對象id。

上述各種方面中一種實現(xiàn)方式中,對象的變化信息可以是對象的版本號。

應(yīng)用本發(fā)明實施例提供的方法,通過檢測參與者的對象的變化信息,可以獲得事務(wù)的結(jié)論,提高事務(wù)處理的效率。

附圖說明

為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,下面描述中的附圖僅僅是本發(fā)明的一些實施例,還可以根據(jù)這些附圖獲得其他的附圖。

圖1是本發(fā)明實施例一種事務(wù)處理方法流程圖;

圖2是本發(fā)明實施例一種事務(wù)處理方法流程圖;

圖3是本發(fā)明實施例一種事務(wù)處理裝置示意圖;

圖4是本發(fā)明實施例一種事務(wù)處理方法流程圖;

圖5是本發(fā)明實施例一種協(xié)調(diào)者結(jié)構(gòu)示意圖。

具體實施方式

下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。

事務(wù)是一系列操作的一個集合,事務(wù)可以包含多個操作,但是其包含的所有操作都是不可分割的,要么在執(zhí)行所有操作,要么不執(zhí)行任何操作??梢园褜+m個節(jié)點的操作作為一個事務(wù),對任意一個或者多個節(jié)點進行操作,那么其他節(jié)點也需要執(zhí)行同樣類型的操作。

事務(wù)由協(xié)調(diào)者和參與者共同執(zhí)行,協(xié)調(diào)者通過決策產(chǎn)生結(jié)論,參與者執(zhí)行協(xié)調(diào)者的結(jié)論,參與者還可以為協(xié)調(diào)者提供決策依據(jù)。

兩階段提交協(xié)議中,系統(tǒng)一般包含兩類節(jié)點:一類為協(xié)調(diào)者

(coordinator),通常一個事務(wù)中只有一個;另一類為參與者(participants),可以有多個。每個節(jié)點都可以記錄寫前日志(write-aheadlog)并持久性存儲,即使節(jié)點發(fā)生故障日志也不會丟失。一種可行的事務(wù)協(xié)商方法步驟如下:(1)協(xié)調(diào)者發(fā)送操作請求給各個參與者,操作請求可以是同意執(zhí)行事務(wù)或者不同意執(zhí)行事務(wù),這個操作請求用于與參與者進行協(xié)商,并不需要被參與者執(zhí)行;(2)參與者收到協(xié)調(diào)者操作請求后,返回響應(yīng)消息,響應(yīng)消息中攜帶各個參與者是否贊同協(xié)調(diào)者的操作請求,例如響應(yīng)消息可以是同意協(xié)調(diào)者的操作請求、或者拒絕協(xié)調(diào)者的操作請求,并且參與者進入等待階段,等待協(xié)調(diào)者的決策;(3)協(xié)調(diào)者匯總各個參與者的響應(yīng)消息進行決策,得出結(jié)論,并把結(jié)論發(fā)給各個參與者;(4)各個參與者收到結(jié)論后執(zhí)行這個結(jié)論,然后釋放事務(wù)占用的資源。

在上述事務(wù)的協(xié)商處理過程中,有可能發(fā)生意外情況,例如步驟(4)也可能是協(xié)調(diào)者發(fā)生故障,導致發(fā)往一部分參與者的結(jié)論沒有成功發(fā)出,或者參與者自身故障沒有接收到結(jié)論,或者其他原因?qū)е虏糠謪⑴c者沒有收到結(jié)論。這些導致部分參與者沒有收到結(jié)論的情況,我們統(tǒng)稱為協(xié)調(diào)者失效。協(xié)調(diào)者失效,導致部分參與者執(zhí)行了事務(wù)的結(jié)論;另一部分參與者沒有執(zhí)行事務(wù)的結(jié)論。這些沒有收到結(jié)論的參與者會一直停留在等待階段,或者稱為準備(prepared)狀態(tài),事務(wù)占用的資源無法及時釋放,這種現(xiàn)象我們稱為阻塞。

現(xiàn)有技術(shù)中,為了避免阻塞,參與者在收到協(xié)調(diào)者的決策結(jié)論后,不能釋放事務(wù)占用的資源。上述步驟(4)替換為(5)和(6),其中:(5)參與者執(zhí)行結(jié)論后,還需要用日志的方式把自己收到的結(jié)論記錄下來,然后向其他參與者發(fā)送消息,以通知其他參與者自己已經(jīng)收到了結(jié)論;以及(6)當某個參與者收到其他所有參與者的結(jié)論后,證明沒有意外發(fā)生,因此可以釋放事務(wù)占用的資源,并且再次記錄操作日志。

現(xiàn)有技術(shù)雖然可以一定程度上解決阻塞的問題,但為了避免發(fā)生意外時系統(tǒng)阻塞,不論是否發(fā)生意外,每次執(zhí)行事務(wù)都要執(zhí)行(5)(6)中的協(xié)商、記錄日志的操作,對系統(tǒng)資源造成了耗費。

為了方便理解,本發(fā)明實施例以存儲系統(tǒng),尤其是一種分布式對象存儲系統(tǒng)進行舉例,但本發(fā)明不限于分布式存儲,也同樣適用于其他需要使用事務(wù)的技術(shù)領(lǐng)域。在存儲領(lǐng)域中,事務(wù)可以是寫入數(shù)據(jù)、刪除數(shù)據(jù)或者修改數(shù)據(jù)。對象是事務(wù)操作的目標,例如一段數(shù)據(jù)。這個數(shù)據(jù)可以用文件名、流水號、路徑、邏輯地址、物理地址進行標記。例如“新建”的事務(wù),可以把新數(shù)據(jù)寫入目標數(shù)據(jù)中;“刪除”事務(wù)可以刪除目標數(shù)據(jù)。

需要說明的是,對象存儲是分布式存儲的一種,本發(fā)明實施例可以應(yīng)用在對象存儲中,也可以應(yīng)用在其他分布式存儲中,本發(fā)明實施例中的對象并不用于將本發(fā)明實施例限制在對象存儲的領(lǐng)域。在分布式存儲中,被存儲的數(shù)據(jù)都可以稱為對象,例如可以是文件、文字、圖片、數(shù)據(jù)流以及計算機代碼中的某一種或者某一種的一部分。本發(fā)明實施例中,對象是可以被事務(wù)所操作的數(shù)據(jù)。本發(fā)明實施例可以把一個數(shù)據(jù)拆分成多個子數(shù)據(jù)塊,每個子數(shù)據(jù)塊存儲到一個存儲節(jié)點中。存儲節(jié)點可以是物理上分離的,也可以是邏輯上分離的,存儲節(jié)點例如可以是存儲集群、存儲服務(wù)器、硬盤、硬盤分區(qū)、文件夾等。

本發(fā)明實施例中,對象的版本號可以標記對象是否發(fā)生變化,對象的版本號用在組成對象的各個子對象中。例如創(chuàng)建或者修改了一個對象,對象會擁有一個新的版本號,對象的子對象版本號也會相應(yīng)更新。版本號可以標記對象中子對象的一致性。

在其他實施例中,除了版本號,還可以用其他信息來標記對象是否發(fā)生變化,例如對象的名稱、對象占用存儲空間的大小、對象的屬性。可以記錄所述對象的內(nèi)容是否發(fā)生改變的信息,統(tǒng)稱為對象的變化信息,所述變化信息與所述對象的內(nèi)容對應(yīng),不同變化信息的所述對象的內(nèi)容不同。任意子對象發(fā)生改變,則相當于整個對象的內(nèi)容發(fā)生改變,相應(yīng)的,整個對象的變化信息都需要更新。本發(fā)明實施例中,為了方便說明,以對象的版本號為例介紹對象的變化信息。

將一個數(shù)據(jù)文件對象劃分為n個等長的業(yè)務(wù)數(shù)據(jù)塊,不足的部分可以使用0來補齊。對這n個數(shù)據(jù)塊進行編碼計算生成m個校驗數(shù)據(jù)塊,將這個n+m個數(shù)據(jù)塊存放到n+m個不同的節(jié)點上,其中,n和m都是自然數(shù)。任意m份數(shù)據(jù)故障,都可以利用剩余的n份數(shù)據(jù)計算出來發(fā)生故障的數(shù)據(jù),這種數(shù)據(jù)恢復(fù)技術(shù)可以稱為糾錯碼(erasurecode,ec)。我們可以把n+m個數(shù)據(jù)組成的集合稱為對象,n+m個數(shù)據(jù)中的任意一個稱為子對象。

這n+m個子對象是相互關(guān)聯(lián)的,任意一個進行了更新,余下的所有子對象也需要更新,以保持子對象之間的一致性。這n+m個子對象的一致性可以通過事務(wù)來保證。在把對象拆分成n個子對象之前,可以為這個對象分配版本號,這個對象的版本號會記錄到他生成的n+m個子對象中。因此通過對象的版本號來標識一致性,如果n+m個子對象是一致的,則他們擁有相同的版本號;如果部分節(jié)點上的數(shù)據(jù)與其他節(jié)點上的數(shù)據(jù)的版本號不同,則意味著數(shù)據(jù)不一致。

造成版本號不同的原因有很多,例如某個節(jié)點出現(xiàn)了一段時間的故障,在故障期間這個節(jié)點錯過了一些寫入子對象的操作,那么這個發(fā)生過故障的節(jié)點上的子對象,就會和其他沒有做過寫操做的節(jié)點上的子對象不一致,并且版本號不同??蛻舳藦姆植际酱鎯ο到y(tǒng)中讀取這些子對象時,可以發(fā)現(xiàn)這些不一致的子對象,可以利用n份版本一致的子對象通過錯誤校驗的方式對不一致的子對象進行恢復(fù),恢復(fù)出與這n份子對象一致的子對象。

應(yīng)用本發(fā)明實施例提供的方法,當原協(xié)調(diào)者失效后,從參與者中重新選出新的協(xié)調(diào)者,新的協(xié)調(diào)者通過檢測其他參與者的對象的變化信息,可以得出事務(wù)的結(jié)論。而現(xiàn)有技術(shù)中,為了應(yīng)對協(xié)調(diào)者失效時出現(xiàn)阻塞,不論協(xié)調(diào)者是否失效,都采用同樣的處理流程來獲得事務(wù)的結(jié)論。而這個流程比本申請中事務(wù)沒有失效時,所采用的事務(wù)處理技術(shù)更加復(fù)雜。因此本申請的總體效率更高,通過提供一種異常(例如協(xié)調(diào)者失效)處理機制,簡化了沒有發(fā)生異常時,事務(wù)處理的流程。

即使原協(xié)調(diào)者沒有失效,本申請方案也提出了一種新的協(xié)商機制,可以通過協(xié)商得出事務(wù)結(jié)論。實施例一

本發(fā)明實施例提供一種事務(wù)處理方法,應(yīng)用于協(xié)調(diào)者,所述協(xié)調(diào)者和參與者通信連接,事務(wù)操作的對象由多個子對象組成,其中,一個所述子對象位于所述協(xié)調(diào)者中,其他所述子對象分別位于不同的所述參與者中,該方法包括:所述協(xié)調(diào)者向各個參與者發(fā)送查詢消息,所述查詢消息中攜帶有事務(wù)id、對象id以及所述對象的版本號,其中所述事務(wù)id用于標記所述事務(wù),所述對象id用于標記所述對象;所述協(xié)調(diào)者接收各個參與者對所述查詢消息的響應(yīng)消息;所述協(xié)調(diào)者根據(jù)所述響應(yīng)消息得出結(jié)論,所述協(xié)調(diào)者執(zhí)行所述結(jié)論,并將所述結(jié)論發(fā)送給所有所述參與者。

所述結(jié)論包括下述至少一種:如果任意一個響應(yīng)消息中攜帶有第一信息,則結(jié)論為執(zhí)行事務(wù),其中,所述第一信息表示所述參與者不存在所述事務(wù)id,存在所述對象id,所述對象在參與者中的版本號與所述對象在協(xié)調(diào)者中的版本號相同;或者,如果任意一個響應(yīng)消息中攜帶有第二信息,則結(jié)論為終止事務(wù),其中,所述第二信息表示所述參與者不存在所述事務(wù)id,存在所述對象id,所述對象在參與者中的版本號與所述對象在協(xié)調(diào)者的版本號不同。

所述結(jié)論還包括下述至少一種:如果所有響應(yīng)消息中均攜帶有第三信息,則結(jié)論包括為執(zhí)行事務(wù),其中,所述第三信息表示所述參與者存在所述事務(wù)id;如果任意一個響應(yīng)消息中攜帶有第四信息,則結(jié)論為執(zhí)行事務(wù),其中,第四信息表示所述參與者不存在所述事務(wù)id,并且所述參與者不存在所述對象id。

協(xié)調(diào)者可以同時具有檢測第一信息以及第二信息是否存在,并根據(jù)檢測結(jié)果得出結(jié)論的功能。也可以同時具有檢測第一信息、第二信息、第三信息以及第四信息是否存在,并根據(jù)檢測結(jié)果得出結(jié)論的功能。也可以僅具檢測第一信息、第二信息、第三信息以及第四信息中任意一種是否存在,并根據(jù)檢測結(jié)果得出結(jié)論的功能。

參見圖1是本發(fā)明實施例一種事務(wù)執(zhí)行方法實施例的具體實現(xiàn)步驟。應(yīng)用于協(xié)調(diào)者和多個參與者組成的事務(wù)處理系統(tǒng)中,事務(wù)操作的對象由多個子對象組成,其中,協(xié)調(diào)者中可以不存儲子對象,協(xié)調(diào)者對事務(wù)進行協(xié)調(diào);所述子對象分別位于不同的所述參與者中。參與者例如可以是osd。事務(wù)的執(zhí)行可以包括以下步驟。

步驟11,協(xié)調(diào)者發(fā)送操作請求給各個參與者,操作請求中攜帶有事務(wù)id、操作類型、協(xié)調(diào)者中記錄的對象版本號version_t。如果事務(wù)的操作類型是寫數(shù)據(jù),操作請求中還可以攜帶待寫數(shù)據(jù)。

所述操作請求可以通知參與者準備為對象進行操作。事務(wù)id標記一個事務(wù),這個被標記的事務(wù)與事務(wù)所操作的對象關(guān)聯(lián)。

例如發(fā)送寫(write)命令給n+m個參與者,寫命令中攜帶事務(wù)id,操作類型,協(xié)調(diào)者中記錄的對象版本號version_t,操作類型例如是寫入、刪除。當操作類型是寫入時,還可以在寫命令中攜帶準備寫入各個子對象的待寫數(shù)據(jù)。

步驟12,協(xié)調(diào)者發(fā)送準備(prepare)命令給各個參與者,prepare命令中攜帶事務(wù)id、對象id、協(xié)調(diào)者中記錄的對象的版本號,以及參與者清單。

其中,對象id是事務(wù)id標記的事務(wù)所操作的對象的id,對象的版本號是對象id所標記的對象的版本號,參與者清單中記錄了所有參與者。

步驟13,參與者收到協(xié)調(diào)者的準備(prepare)命令后,存儲參與者清單,并且為事務(wù)分配資源。參與者分配完資源后,發(fā)送準備完成(prepared)消息給協(xié)調(diào)者,參與者進入prepared階段。在其他實施例中,如果參與者沒有找到這個事務(wù)id或者不符合執(zhí)行事務(wù)的條件,會發(fā)送消息告知協(xié)調(diào)者。

步驟14,協(xié)調(diào)者進行決策,并發(fā)送決策獲得到的結(jié)論給各個參與者。例如,當所有參與者都反饋prepared消息時,決策結(jié)論是執(zhí)行事務(wù),并發(fā)送這個結(jié)論給各個參與者。當結(jié)論是執(zhí)行事務(wù)時,這個結(jié)論可以用commit消息來表示。在其他情況下,結(jié)論也可能是終止事務(wù)。

步驟15,收到?jīng)Q策者的結(jié)論的參與者,執(zhí)行結(jié)論。然后釋放事務(wù)占用的資源。

現(xiàn)有技術(shù)的非阻塞式事務(wù)處理方法和步驟11—步驟14不同。例如,步驟(1)不會發(fā)送本次事務(wù)對象id,操作類型,版本號version_t中的任意一個。

應(yīng)用本發(fā)明實施例,減少了節(jié)點之間的信息交互,并且減少了需要記錄的日志。相較于現(xiàn)有技術(shù)占用系統(tǒng)資源更少,處理事務(wù)耗費的時間更短。

下面以協(xié)調(diào)者發(fā)生故障為例,介紹一種當出現(xiàn)意外時一種事務(wù)處理實施例。需要特別說明的是,由于協(xié)調(diào)者失效后,會從參與者中選出一個作為新的協(xié)調(diào)者,為了區(qū)分失效的協(xié)調(diào)者和新選出的協(xié)調(diào)者,除非特別說明,在步驟21-步驟29及其他相關(guān)實施例中,把失效的協(xié)調(diào)者稱為原協(xié)調(diào)者,原協(xié)調(diào)者在失效前可以正常工作;把新選出的協(xié)調(diào)者稱為協(xié)調(diào)者。也就是說,步驟11-步驟15中的協(xié)調(diào)者,在步驟21-步驟29以及步驟37、38中,被稱為原協(xié)調(diào)者。

實施例二

本發(fā)明實施例中,當協(xié)調(diào)者發(fā)生故障時,可以通過參與者之間查詢事務(wù)狀態(tài)和當前版本號來保證數(shù)據(jù)的一致性。本發(fā)明實施例中,隨著版本的更新,版本號可以采用遞增規(guī)律,也可以采用遞減的規(guī)律。在其他實施例中,可以使用例如字母等非數(shù)值作為版本號,只要版本號具有唯一性,并且參與者和協(xié)調(diào)者約定好伴隨著版本的更新,版本號的變化規(guī)則即可。為了方便介紹,后續(xù)以隨著版本的更新,版本號的數(shù)值遞增進行舉例。每次寫操作導致對象版本遞增,并且新版本的內(nèi)容對舊版本的內(nèi)容有替代關(guān)系,一個新版本的子對象可以與它的舊版本的子對象寫到同一個osd中,并且覆蓋舊版本的子對象。事務(wù)操作可以針對一個對象的所有子對象的操作,這些子對象分布在不同的osd中。osd可以包括控制器和存儲介質(zhì),控制器用于管理,存儲介質(zhì)用于存儲數(shù)據(jù),例如硬盤(harddisk)、固態(tài)硬盤(ssd)或者磁帶(magnetictap)。osd也可以是存儲服務(wù)器或者個人電腦。

步驟21,分布式存儲系統(tǒng)中的原協(xié)調(diào)者失效后,從參與者中選出一個作為新的協(xié)調(diào)者。步驟21可以在步驟13或者步驟14之后執(zhí)行,例如在執(zhí)行完步驟14后,參與者在預(yù)設(shè)的時間內(nèi)沒有收到協(xié)調(diào)者的結(jié)論,開始執(zhí)行步驟21。步驟21是可選步驟。

新的協(xié)調(diào)者可以通過選舉產(chǎn)生,具體選舉辦法可以有多種,例如可以直接指定一個參與者作為協(xié)調(diào)者,也可以選擇編號最小的參與者作為協(xié)調(diào)者,或者性能最強的參與者作為協(xié)調(diào)者。需要說明的是,這個選舉出的協(xié)調(diào)者存儲有子對象,因此兼有參與者的部分功能。除非特別說明,后續(xù)步驟中提到的協(xié)調(diào)者都是指新選出的協(xié)調(diào)者。

本發(fā)明實施例中,參與者存儲有參與者清單,可以從參與者清單所記錄的參與者中,選舉出參與者作為協(xié)調(diào)者,參與者清單中記錄有一個對象的所有子對象所在的osd,本步驟從這n+m個參與者中選出一個新的協(xié)調(diào)者。

本發(fā)明實施例中,協(xié)調(diào)者失效是一種泛指,指參與者沒有收到協(xié)調(diào)者發(fā)送的結(jié)論,例如可以是協(xié)調(diào)者無法正常工作、協(xié)調(diào)者與參與者之間通信中斷、或者參與者發(fā)生故障。故障原因可能是軟件故障或者硬件故障,在其他實施例中,也可能沒有發(fā)生物理或者軟件故障,而是由管理員指令選舉新的對協(xié)調(diào)者進行更改。

步驟22,協(xié)調(diào)者向系統(tǒng)中的參與者發(fā)送查詢消息,查詢消息中記錄有需要查詢的事務(wù)的:事務(wù)id、對象id以及對象的目標版本號version_t。

事務(wù)id用于標記本次事務(wù)的操作,不同事務(wù)的事務(wù)id不同,擁有相同事務(wù)id的所有操作是屬于同一個事務(wù)的操作。本發(fā)明實施例中,這些操作由n+m個osd分別執(zhí)行。對象id用于標記事務(wù)id所操作的對象,例如可以用對象的文件名作為對象id,對象的目標版本號是所述對象id所標記的對象的目標版本號。如果事務(wù)結(jié)論是執(zhí)行事務(wù),則參與者和協(xié)調(diào)者上存儲的子對象的版本都躍遷到這個目標版本號,或者說對象的版本會躍遷到這個目標版本號。除了文件名,也可以用其他方式標記對象id,存儲系統(tǒng)可以使用2k字節(jié)的數(shù)據(jù)量來記錄這個標記。查詢消息的接收者是參與者清單中,除協(xié)調(diào)者之外的所有參與者。

參與者收到查詢消息后,可以查找自身是否有相同事務(wù)id并且相同對象id的事務(wù),如果有,則進一步判定參與者的子對象的當前版本號和所述目標版本號是否相同,用版本的一致性來推理事務(wù)的結(jié)論。

目標版本號可以來自原協(xié)調(diào)者,例如步驟11。

步驟23,接收到查詢消息的參與者,根據(jù)查詢消息中的事務(wù)id,確認本地是否存在相同的事務(wù)。其具體確認方法是是查找本地的事務(wù)id中,是否存在相同的事務(wù)id。如果存在,則進入步驟24;如果不存在,則進入步驟25。

步驟24,接收到查詢消息的參與者,返回攜帶有“存在相同事務(wù)”信息的響應(yīng)消息給協(xié)調(diào)者,本實施例中,這個響應(yīng)消息中攜帶的信息稱為第三信息。

這個響應(yīng)消息是在參與者查找到本地存在相同的事務(wù)id后發(fā)出,如果在本地沒有查找到具有相同事務(wù)id,不發(fā)這個響應(yīng)消息。響應(yīng)消息可以告訴決策者,自己已經(jīng)收到查詢消息,并且成功應(yīng)答。還可以告訴決策者,自己不知道決策結(jié)果,處于等待決策的階段。

步驟25,接收到查詢消息的參與者,查找本地是否存在這個對象,也就是確認在所有本地的對象id中,是否存在與查詢消息中相同的對象id。如果存在,則進入步驟27;如果不存在,則進入步驟26。

步驟26,接收到查詢消息的參與者返回響應(yīng)消息給協(xié)調(diào)者,告知協(xié)調(diào)者本地不存在該事務(wù)也不存在該對象,這個信息可以用“不存在該對象”或者“不存在該事務(wù)、也不存在該對象”表示,這個信息可以稱為第四信息。

步驟27,接收到查詢消息的參與者,讀取對象id所標記對象的版本號version_c,比較version_t與version_c是否相同,并把比較結(jié)果作為查詢消息的響應(yīng)消息反饋給協(xié)調(diào)者。

以版本越新版本號的數(shù)值越大為例。(1)如果version_c>version_t,則返回給協(xié)調(diào)者的信息中攜帶有“本參與者的對象的版本號比目標版本號更加新”的信息,該消息后文簡稱為“版本更新”消息,(2)如果version_c=version_t,則返回給協(xié)調(diào)者的信息中攜帶有“本參與者的對象的版本號與目標版本號相同”的信息,該消息后文用“版本相同”表示;(3)如果version_c<version_t;則返回給協(xié)調(diào)者的信息中攜帶有““本參與者的對象的版本比目標版本號更加舊”的信息,該消息可以用“版本更舊”表示。

在其他實施例中,由于在后續(xù)步驟中“版本更新”和“版本更舊”的處理方式相同,因此這兩種情況可以合并,反饋“版本不同”的消息。也就是說,在本步驟中,可以不用比較version_c與version_t之間的大小,比較版本是否相同即可,返回的響應(yīng)消息是“版本相同”或者“版本不同”。

也就是說,本步驟中參與者發(fā)送的響應(yīng)消息可能攜帶第一信息或者第二信息。第一信息是“版本相同”的信息,信息內(nèi)容也可以是“equal”;第一信息可以是參與者經(jīng)過事務(wù)id判斷、對象id判斷、版本號判斷后得出;第一信息可以表示所述參與者不存在所述事務(wù)id,存在所述對象id,所述參與者中的對象版本號與所述目標版本號相同。第二信息是“版本不同”的信息,信息內(nèi)容也可以“unequal”,;第二信息可以是參與者經(jīng)過事務(wù)id判斷、對象id判斷、版本號判斷后得出;第二信息可以表示所述參與者不存在所述事務(wù)id,存在所述對象id,所述對象在參與者中的對象版本號與所述目標版本號不同。

步驟28,協(xié)調(diào)者接收到參與者的響應(yīng)消息后,響應(yīng)消息攜帶第一信息、第二信息、第三信息、第四信息中的一個,根據(jù)響應(yīng)消息的內(nèi)容得出結(jié)論。這個結(jié)論需要協(xié)調(diào)者與參與者執(zhí)行。協(xié)調(diào)者執(zhí)行結(jié)論,并發(fā)送結(jié)論給系統(tǒng)中的參與者,釋放事務(wù)在協(xié)調(diào)者上占用的資源。協(xié)調(diào)者和參與者共同執(zhí)行這個結(jié)論,可以保證事務(wù)的一致性。

結(jié)論是終止事務(wù)或者執(zhí)行事務(wù)。如果是終止事務(wù),則發(fā)出abort的消息,如果結(jié)論是執(zhí)行事務(wù),則發(fā)出commit的消息。如果結(jié)論是終止事務(wù),執(zhí)行方式是終止事務(wù)。如果結(jié)論是執(zhí)行事務(wù),則參與者對參與者上的子對象執(zhí)行事務(wù)的一系列操作。

需要說明的是,對一些實施例而言,參與者會分別進行事務(wù)id、對象id、版本號的判斷,因此有可能發(fā)出第一信息、第二信息、第三信息、第四信息中的任意一個。但是在其他實施例中,參與者只其中一項進行檢測,例如只檢測是不是存在第一信息,因此返回給協(xié)調(diào)者的響應(yīng)消息是第一信息,不包括第二信息、第三信息或者第四信息,相應(yīng)的,協(xié)調(diào)者也不對產(chǎn)生第二信息、第三信息或者第四信息的事務(wù)結(jié)論。在其他實施例中,也可以檢測第一信息以及第二信息。

表1介紹協(xié)調(diào)者收到參與者反饋的響應(yīng)消息后,如何根據(jù)響應(yīng)消息攜帶的信息決策得到結(jié)論,結(jié)論是終止事務(wù)或者執(zhí)行事務(wù),終止事務(wù)可以用abort命令表示,執(zhí)行事務(wù)可以用commit命令表示。在決策時還可以考慮事務(wù)的操作類型,操作類型可以包括新建、修改以及刪除,其中新建和修改都屬于寫(write)。操作類型可以來自于原協(xié)調(diào)者,存儲在協(xié)調(diào)者、參與者中,例如通過步驟11發(fā)送給協(xié)調(diào)者、參與者。協(xié)調(diào)者發(fā)給參與者的查詢消息中也可以攜帶事務(wù)的操作類型。

對操作類型是新建或者修改的事務(wù)而言,可以有以下規(guī)則中的一個或多個:(a)如果任一參與者返回“版本相同”的信息,也就是第一信息,說明返回消息的參與者已經(jīng)執(zhí)行了事務(wù),按照事務(wù)“同進同退”的原則,則結(jié)論是執(zhí)行事務(wù);(b)如果任一參與者返回“版本不同”的信息,也就是第二信息,說明已經(jīng)有參與者進行了abort動作,按照事務(wù)“同進同退”的原則,則結(jié)論是終止事務(wù);(c)如果所有參與者返回存在該事務(wù)的信息,也就是第三信息,說明協(xié)調(diào)者并沒有給出事務(wù)的決策結(jié)果,此時所有參與者都處于prepared狀態(tài),雖然沒有參與者完成事務(wù)執(zhí)行,但都已經(jīng)做好了執(zhí)行事務(wù)的準備,處于能夠正常執(zhí)行事務(wù)的狀態(tài),則結(jié)論是執(zhí)行事務(wù);(d)如果任一參與者返回“沒有該事務(wù)且沒有該對象”的信息,也就是第四信息,則結(jié)論是終止事務(wù)。

對操作類型是刪除的事務(wù)而言,可以有以下結(jié)論中的一個或多個:(a)如果任一參與者返回“版本不同”的信息,也就是第二信息,說明該參與者已經(jīng)執(zhí)行了abort動作,則結(jié)論是終止事務(wù);(b)如果所有參與者返回存在該事務(wù)的信息,也就是第三信息,說明該參與者已經(jīng)執(zhí)行了刪除操作,說明協(xié)調(diào)者并沒有給出事務(wù)的決策結(jié)果,此時所有參與者都處于prepared狀態(tài),雖然沒有參與者完成事務(wù)執(zhí)行,但都已經(jīng)做好了執(zhí)行事務(wù)的準備,則結(jié)論是執(zhí)行事務(wù);(c)如果任一參與者返回“沒有該事務(wù)且沒有該對象”的信息,也就是第四信息,則結(jié)論是執(zhí)行事務(wù)。當操作類型是刪除時,參與者不會反饋第一信息,因為如果版本相同,對象和事務(wù)都會刪除,參與者無法查找到對象id、事務(wù)id,所以實際返回的是沒有這個事務(wù)且沒有這個對象的信息,也就是第四信息。

需要說明的是,操作不同時,對于某些信息的可能得出相同的結(jié)論。對這些操作信息,可以不需要判斷操作類型,直接根據(jù)響應(yīng)消息攜帶的信息得出結(jié)論。例如,只要任一參與者返回的響應(yīng)消息攜帶有“版本不同”的信息,事務(wù)的結(jié)論就可以確定為abort,得出這個abort的結(jié)論,并不需要知道事務(wù)的操作類型。此外,如果任一參與者返回“版本相同”的信息,也不需要判斷操作類型,就可以得出commit的結(jié)論。

協(xié)調(diào)者得出的結(jié)論示例參見表1。

表1

另外需要說明的是,本實施例中查詢消息攜帶有事務(wù)id、對象id、目標版本號三項內(nèi)容。由于部分結(jié)論不需要進行多次判斷即得出,例如當所有參與者返回的響應(yīng)消息都攜帶有“存在這個事務(wù)”時,已經(jīng)足以得出執(zhí)行事務(wù)的結(jié)論。不需再進一步判斷參與者中是否存在事務(wù)id,也不需要判斷版本號是否相同。同樣的,當任意參與者返回的響應(yīng)消息攜帶“存在該事務(wù),并且不存在該對象”信息時,所有參與者都不需要進一步判斷參與者的對象版本是否和協(xié)調(diào)者提供的對象目標版本相同。因此,協(xié)調(diào)者發(fā)送給參與者的的查詢消息,可以僅發(fā)送事務(wù)id,也可以發(fā)送事務(wù)id以及對象id,也可以發(fā)送事務(wù)id、對象id以及對象的目標版本號。

此外,查詢消息還可以分階段發(fā)送:協(xié)調(diào)者第一次發(fā)送事務(wù)id給參與者;當收到的響應(yīng)消息不足以得出結(jié)論時,協(xié)調(diào)者再發(fā)送對象id給參與者;如果對象id的響應(yīng)消息仍然無法得出結(jié)論,協(xié)調(diào)者再繼續(xù)發(fā)送版本號信息給參與者。這些發(fā)送方法可以減少查詢消息的數(shù)據(jù)量。

由于當前的協(xié)調(diào)者是由選舉產(chǎn)生,在選舉前,協(xié)調(diào)者自己也是參與者的角色。因此協(xié)調(diào)者兼有參與者的責任,協(xié)調(diào)者除了把結(jié)論發(fā)送給參與者由參與者執(zhí)行,協(xié)調(diào)者自己也需要像參與者一樣執(zhí)行結(jié)論。本實施例中,如果結(jié)論是執(zhí)行事務(wù),則協(xié)調(diào)者需要執(zhí)行事務(wù)的一系列操作,例如對協(xié)調(diào)者上存儲的子對象進行刪除操作的所需要的一系列操作、或?qū)憯?shù)據(jù)操作一系列操作。執(zhí)行的方式可以是osd的控制器生成對存儲介質(zhì)進行操作指令,例如刪除存儲介質(zhì)上的數(shù)據(jù)的指令。在生成對存儲介質(zhì)進行操作的指令后,可以記錄日志,這個日志可以是committed;在操作完成時,也就是控制器完成操作時,可以記錄日志,這個日志可以是cleared。然后釋放這個事務(wù)所占用的資源,例如存儲器資源。啟動執(zhí)行命令的過程,可以稱為提交事務(wù)。

步驟29,參與者在收到協(xié)調(diào)者的結(jié)論后,執(zhí)行結(jié)論。執(zhí)行結(jié)論后,可以釋放事務(wù)占用的資源。對協(xié)調(diào)者來說,步驟29是可選步驟。

如果結(jié)論是執(zhí)行事務(wù),則參與者執(zhí)行事務(wù)的一系列操作,例如對參與者上存儲的子對象進行刪除操作、寫數(shù)據(jù)操作。具體而言,如果結(jié)論是執(zhí)行,執(zhí)行的方式可以是osd的控制器生成對存儲介質(zhì)進行操作指令,例如刪除存儲介質(zhì)上的數(shù)據(jù)的指令。在生成對存儲介質(zhì)進行操作的指令后,可以記錄日志,這個日志可以是committed。在事務(wù)執(zhí)行完成后,也就是控制器完成操作時,可以記錄日志,這個日志可以是cleared。然后釋放這個事務(wù)所占用的資源,例如存儲器資源。

參與者收到的結(jié)論可能是commit,也可能是abort。參與者收到結(jié)論后,可以不用給協(xié)調(diào)者發(fā)送已經(jīng)收到的確認消息結(jié)論給協(xié)調(diào)者,也可以不發(fā)送已經(jīng)執(zhí)行結(jié)論的確認消息。

步驟21-步驟29的事務(wù)處理方法具有獨立性,是一個完整的事務(wù)處理方法。步驟21-步驟29,可以在步驟13或步驟14之后執(zhí)行,也可以用于其他場景,例如不是原協(xié)調(diào)者故障,而是原協(xié)調(diào)者自始就不存在,僅由若干參與者組成的事務(wù)處理系統(tǒng),通過協(xié)商進行事務(wù)處理,在這種實施例中,可以沒有步驟21。

實施例二的方法中,一部分步驟由協(xié)調(diào)者執(zhí)行,另一部分由參與者執(zhí)行,步驟23-步驟28一共涉及事務(wù)id、對象id以及版本號三種信息的比較,并可以通過比較結(jié)果得出事務(wù)結(jié)論,這個過程也可以包括如下4種結(jié)論,這4種結(jié)論之間是并列的,沒有相互依存的關(guān)系,因此本發(fā)明實施例實現(xiàn)其中至少一種就是一個完整的方案。

(1)如果任意一個響應(yīng)消息中攜帶有第一信息,則結(jié)論為執(zhí)行事務(wù),其中,第一信息表示發(fā)出第一信息的參與者不存在收到的事務(wù)id,存在收到的對象id,收到的對象的變化信息和自己的對象的變化信息相同。

(2)如果任意一個響應(yīng)消息中攜帶有第二信息,則結(jié)論為終止事務(wù),其中,第二信息表示發(fā)出第二信息的參與者不存在所述事務(wù)id,存在所述對象id,收到的對象的變化信息和自己的對象的變化信息不同。

(3)如果所有參與者返回的響應(yīng)消息中攜帶第三信息,則事務(wù)的結(jié)論為執(zhí)行事務(wù),所述第三信息表示發(fā)出第三信息的參與者存在收到的事務(wù)id。(4)如果任意參與者返回的響應(yīng)消息中攜帶第四信息,對新建或者修改操作,則事務(wù)的結(jié)論為取消事務(wù)執(zhí)行事務(wù),對刪除事務(wù),則事務(wù)的結(jié)論為執(zhí)行事務(wù)。第四信息表示發(fā)出第四信息的參與者不存在收到的事務(wù)id,不存在收到的對象id。

實施例三

如圖3所示,本發(fā)明另外一種實施例還提供一種事務(wù)處理裝置31,可以應(yīng)用上述實施例二的方法。事務(wù)處理裝置31與參與者32通信連接,事務(wù)操作的對象由多個子對象組成,其中,一個所述子對象位于所述事務(wù)處理裝置中,其他所述子對象分別位于不同的所述參與者中。事務(wù)處理裝置31包括查詢模塊311、接收模塊312、決策模塊313以及執(zhí)行模塊313。

查詢模塊311,用于向各個參與者32發(fā)送查詢消息,所述查詢消息中攜帶有事務(wù)id、對象id以及所述對象的版本號,其中所述事務(wù)id用于標記所述事務(wù),所述對象id用于標記所述對象。

接收模塊312,用于接收各個參與者對所述查詢消息的響應(yīng)消息;

決策模塊313,用于根據(jù)所述響應(yīng)消息得出結(jié)論,并將所述結(jié)論發(fā)送給所有所述參與者,所述結(jié)論包括下述至少一種。

(1)如果任意一個響應(yīng)消息中攜帶有第一信息,則結(jié)論為執(zhí)行事務(wù),其中,第一信息表示發(fā)出第一信息的參與者不存在收到的事務(wù)id,存在收到的對象id,收到的對象的版本號和自己的對象的版本號相同。

(2)如果任意一個響應(yīng)消息中攜帶有第二信息,則結(jié)論為終止事務(wù),其中,第二信息表示發(fā)出第二信息的參與者不存在所述事務(wù)id,存在所述對象id,收到的對象的版本號和自己的對象的版本號不同。

(3)如果所有參與者返回的響應(yīng)消息中攜帶第三信息,則事務(wù)的結(jié)論為執(zhí)行事務(wù),所述第三信息表示發(fā)出第三信息的參與者存在收到的事務(wù)id。

(4)如果任意參與者返回的響應(yīng)消息中攜帶第四信息,對新建或者修改操作,則事務(wù)的結(jié)論為取消事務(wù)執(zhí)行事務(wù),對刪除事務(wù),則事務(wù)的結(jié)論為執(zhí)行事務(wù)。第四信息表示發(fā)出第四信息的參與者不存在收到的事務(wù)id,不存在收到的對象id。

執(zhí)行模塊314,用于執(zhí)行決策模塊313的結(jié)論,并將結(jié)論發(fā)送給所有所述參與者32。

參與者32收到執(zhí)行模塊314的結(jié)論后,可以執(zhí)行結(jié)論。

在本發(fā)明實施例中,協(xié)調(diào)者31、參與者32都是對象存儲設(shè)備osd,所述事務(wù)是對所有所述子對象進行讀取、對所有所述子對象刪除或者對所有所述子對象寫入。

實施例四

需要說明的是,如圖4所示提供了另外一種事務(wù)處理方法的實施方式,這種實施方式與實施例二所揭露的實施方式相似,區(qū)別點之一是,version_c與version_t是否相同的比較可以由協(xié)調(diào)者來做。

在這種實施方式中,步驟22中協(xié)調(diào)者發(fā)送的查詢消息中,可以不包含對象當前版本號version_t,因此這個實施例中,參與者發(fā)送的響應(yīng)消息可能攜帶第三消息或者第四消息,不會攜帶第一消息或者第二消息。

相應(yīng)的,在步驟25判斷結(jié)果為是之后,執(zhí)行步驟47:收到查詢消息的參與者讀取對象id所標記的對象的版本號version_c,并把version_c發(fā)送給協(xié)調(diào)者。參與者不執(zhí)行版本是否相同的比較,也不發(fā)送于版本是否相同的應(yīng)答信息給協(xié)調(diào)者。

步驟47中,參與者可以發(fā)送攜帶第五消息的響應(yīng)消息,所述第五信息中還有發(fā)出響應(yīng)消息的參與者中所述對象版本號。第五消息還可以表示所述參與者不存在所述事務(wù)id,存在所述對象id。

接著執(zhí)行步驟48:協(xié)調(diào)者比較響應(yīng)消息中攜帶的參與者的對象版本,和協(xié)調(diào)者記錄的目標版本號進行比較,比較方式與步驟27基本相同,不同之處在于執(zhí)行比較的主體是參與者。獲得比較結(jié)果以后,依照與步驟28相同的方式得出結(jié)論并執(zhí)行結(jié)論。

協(xié)調(diào)者可以同時具有檢測第三信息、第四信息以及第五信息是否存在,并根據(jù)檢測結(jié)果得出結(jié)論的功能。也可以僅具檢測第三信息、第四信息、第五信息中任意一種是否存在,并根據(jù)檢測結(jié)果得出結(jié)論的功能。所述結(jié)論包括下述至少一種。

(1)如果所有參與者返回的響應(yīng)消息中攜帶第三信息,則事務(wù)的結(jié)論為執(zhí)行事務(wù),所述第三信息表示發(fā)出第三信息的參與者存在收到的事務(wù)id。

(2)如果任意參與者返回的響應(yīng)消息中攜帶第四信息,對新建或者修改操作,則事務(wù)的結(jié)論為取消事務(wù)執(zhí)行事務(wù),對刪除事務(wù),則事務(wù)的結(jié)論為執(zhí)行事務(wù)。第四信息表示發(fā)出第四信息的參與者不存在收到的事務(wù)id,不存在收到的對象id。

(3)如果任意參與者返回的響應(yīng)消息中攜帶第五信息,可以根據(jù)第五消息得出結(jié)論,所述結(jié)論包括下述至少一種:(i)如果參與者返回給協(xié)調(diào)者的班花信息和協(xié)調(diào)者記錄的目標版本號相同,則結(jié)論為執(zhí)行事務(wù);或者(ii)如果參與者返回給協(xié)調(diào)者的班花信息和協(xié)調(diào)者記錄的目標版本號不同,則結(jié)論為終止事務(wù)。其中,第五消息表示所述參與者不存在收到的事務(wù)id,存在收到的對象id,第五信息中還攜帶有發(fā)出響應(yīng)消息的參與者中所述對象版本號。

實施例五

同樣參考如圖3,本發(fā)明另外一種實施例提供一種事務(wù)處理裝置31,可以應(yīng)用上述實施例四的方法。事務(wù)處理裝置31與參與者32通信連接,事務(wù)操作的對象由多個子對象組成,其中,一個所述子對象位于所述事務(wù)處理裝置中,其他所述子對象分別位于不同的所述參與者中。事務(wù)處理裝置31包括查詢模塊311、接收模塊312、決策模塊313以及執(zhí)行模塊313。

查詢模塊311,用于向各個參與者32發(fā)送查詢消息,所述查詢消息中攜帶有所述查詢消息中攜帶有事務(wù)id以及對象id,其中所述事務(wù)id用于標記所述事務(wù),所述對象id用于標記所述對象。

接收模塊312,用于接收各個參與者32對所述查詢消息的響應(yīng)消息,所述響應(yīng)消息攜帶所述第五信息,所述表示所述參與者不存在所述事務(wù)id,存在所述對象id,其中,所述第五信息中還攜帶有發(fā)出響應(yīng)消息的參與者中所述對象版本號。

決策模塊313,根據(jù)所述響應(yīng)消息得出結(jié)論,所述協(xié)調(diào)者執(zhí)行所述結(jié)論,并將所述結(jié)論發(fā)送給所有所述參與者,所述結(jié)論包括下述至少一種:如果所述對象在參與者中的版本號與所述對象在協(xié)調(diào)者中的版本號相同,則結(jié)論為執(zhí)行事務(wù);或者,如果所述對象在參與者中的版本號與所述對象在協(xié)調(diào)者中的版本號不同,則結(jié)論為終止事務(wù)。

執(zhí)行模塊,用于執(zhí)行所述決策模塊的結(jié)論。

實施例六

如圖5所示,本發(fā)明另一實施例提供一種協(xié)調(diào)者51,和參與者42通信連接,事務(wù)操作的對象由多個子對象組成,其中,一個所述子對象位于所述協(xié)調(diào)者中,其他所述子對象分別位于不同的所述參與者中,所述協(xié)調(diào)者包括處理器(processor)511以及與處理器通信的存儲器512,所述存儲器用于存儲程序,所述處理器用于執(zhí)行程序,程序可以執(zhí)行上述方法中的一種或者多種,例實施例一、實施例二、實施例四所描述方法的一種或多種。

一種實施例中所述處理器511執(zhí)行的程序用于:向各個參與者發(fā)送查詢消息,所述查詢消息中攜帶有事務(wù)id、對象id以及所述對象的版本號,其中所述事務(wù)id用于標記所述事務(wù),所述對象id用于標記所述對象,所述對象的版本號用于標記所述對象的內(nèi)容是否發(fā)生改變,不同版本號的所述對象的內(nèi)容不同;接收各個參與者對所述查詢消息的響應(yīng)消息;根據(jù)所述響應(yīng)消息得出結(jié)論,執(zhí)行所述結(jié)論,并將所述結(jié)論發(fā)送給所有所述參與者。所述結(jié)論包括下述至少一種:如果任意一個響應(yīng)消息中攜帶有第一信息,則結(jié)論為執(zhí)行事務(wù),其中,所述第一信息表示所述參與者不存在所述事務(wù)id,存在所述對象id,所述對象在參與者中的版本號與所述對象在協(xié)調(diào)者中的版本號相同;或者,如果任意一個響應(yīng)消息中攜帶有第二信息,則結(jié)論為終止事務(wù),其中,所述第二信息表示所述參與者不存在所述事務(wù)id,存在所述對象id,所述對象在參與者中的版本號與所述對象在協(xié)調(diào)者的版本號不同。

一種實施例中所述處理器511執(zhí)行的程序用于:向各個參與者發(fā)送查詢消息,所述查詢消息中攜帶有事務(wù)id以及對象id,其中所述事務(wù)id用于標記所述事務(wù),所述對象id用于標記所述對象,所述對象的版本號用于標記所述對象的內(nèi)容是否發(fā)生改變,不同版本號的所述對象的內(nèi)容不同;接收各個參與者對所述查詢消息的響應(yīng)消息,所述響應(yīng)消息攜帶所述第五信息,第五消息表示所述參與者不存在所述事務(wù)id,存在所述對象id,其中,所述第五信息中還攜帶有發(fā)出響應(yīng)消息的參與者中所述對象版本號;根據(jù)所述響應(yīng)消息得出結(jié)論,所述協(xié)調(diào)者執(zhí)行所述結(jié)論,并將所述結(jié)論發(fā)送給所有所述參與者。所述結(jié)論包括下述至少一種:如果所述對象在參與者中的版本號與所述對象在協(xié)調(diào)者中的版本號相同,則結(jié)論為執(zhí)行事務(wù);或者,如果所述對象在參與者中的版本號與所述對象在協(xié)調(diào)者中的版本號不同,則結(jié)論為終止事務(wù)。

處理器511可能是一個中央處理器cpu,或者是特定集成電路asic(applicationspecificintegratedcircuit),或者是被配置成實施本發(fā)明實施例的一個或多個集成電路。存儲器512可能包含高速ram存儲器,也可能還包括非易失性存儲器(non-volatilememory),例如至少一個磁盤存儲器。

通過以上的實施方式的描述,可以清楚地了解到本發(fā)明可借助軟件加必需的通用硬件的方式來實現(xiàn),當然也可以通過硬件,但很多情況下前者是更佳的實施方式。基于這樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機軟件產(chǎn)品存儲在可讀取的存儲介質(zhì)中,如計算機的軟盤,硬盤或光盤等,包括若干指令用以使得一臺計算機設(shè)備(可以是個人計算機,服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個實施例所述的方法。

以上所述,僅為本發(fā)明的具體實施方式,但本發(fā)明的保護范圍并不局限于此,任何人員在本發(fā)明揭露的技術(shù)范圍內(nèi),想到的變化或替換,都應(yīng)涵蓋在本發(fā)明的保護范圍之內(nèi)。因此,本發(fā)明的保護范圍應(yīng)以所述權(quán)利要求的保護范圍為準。

當前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1