本發(fā)明涉及分布式系統(tǒng)領(lǐng)域,特別涉及一種分布式事務(wù)處理方法、裝置及系統(tǒng)。
背景技術(shù):
分布式事務(wù)(Distributed Transaction)是指事務(wù)的參與者、支持事務(wù)的服務(wù)器、資源服務(wù)器以及事務(wù)管理器分別位于不同的分布式系統(tǒng)的不同節(jié)點(diǎn)之上。分布式事務(wù)處理涉及到對多個數(shù)據(jù)庫的操作,分布式事務(wù)處理的關(guān)鍵是保持各個數(shù)據(jù)庫的數(shù)據(jù)一致性。
兩階段提交協(xié)議(Two-Phase Commit protocol,2PC)是一種常見的分布式事務(wù)處理方案。2PC方案的第1階段可稱為準(zhǔn)備階段或投票階段,第2階段可稱為提交階段。在第1階段,事務(wù)管理器向本次業(yè)務(wù)請求涉及的各個業(yè)務(wù)服務(wù)器發(fā)送數(shù)據(jù)操作請求,各個業(yè)務(wù)服務(wù)器接收到數(shù)據(jù)操作請求之后訪問相應(yīng)的數(shù)據(jù)庫并鎖定占用數(shù)據(jù)庫資源,完成向數(shù)據(jù)庫提交相關(guān)的業(yè)務(wù)數(shù)據(jù)的準(zhǔn)備工作,而后業(yè)務(wù)服務(wù)器將投票結(jié)果發(fā)送給事務(wù)管理器。投票結(jié)果分為同意和中止,同意用于指示能夠成功向數(shù)據(jù)庫提交業(yè)務(wù)數(shù)據(jù),中止用于指示無法成功向數(shù)據(jù)庫提交業(yè)務(wù)數(shù)據(jù)。需要說明的是,在第1階段,業(yè)務(wù)服務(wù)器并沒有真正提交業(yè)務(wù)數(shù)據(jù)至數(shù)據(jù)庫,僅是做了提交業(yè)務(wù)數(shù)據(jù)的準(zhǔn)備工作。在第2階段,事務(wù)管理器在接收到各個業(yè)務(wù)服務(wù)器返回的投票結(jié)果之后,決定統(tǒng)一提交或者統(tǒng)一回滾。如果各個業(yè)務(wù)服務(wù)器返回的投票結(jié)果均為同意,則通知各個業(yè)務(wù)服務(wù)器統(tǒng)一提交數(shù)據(jù),本次業(yè)務(wù)請求成功;如果存在業(yè)務(wù)服務(wù)器返回的投票結(jié)果為中止,則通知各個業(yè)務(wù)服務(wù)器統(tǒng)一回滾數(shù)據(jù),本次業(yè)務(wù)請求失敗。
2PC方案采用同步方式提交業(yè)務(wù)數(shù)據(jù),事務(wù)管理器需要等待所有的業(yè)務(wù)服務(wù)器返回投票結(jié)果以后,才能最終決定是統(tǒng)一提交還是統(tǒng)一回滾。在實際的業(yè)務(wù)場景中,一個業(yè)務(wù)請求可能會涉及到多個業(yè)務(wù)服務(wù)器,不同的業(yè)務(wù)服務(wù)器在第1階段的響應(yīng)時間存在差異,采用2PC方案需要等到響應(yīng)時間最長的業(yè)務(wù)服務(wù)器返回投票結(jié)果以后,才能執(zhí)行下一步操作。在此期間,所有被調(diào)用的業(yè)務(wù)服務(wù)器所對應(yīng)的數(shù)據(jù)庫連接和數(shù)據(jù)庫資源都處于鎖定占用狀態(tài),響應(yīng)時間短的業(yè)務(wù)服務(wù)器返回投票結(jié)果以后,還需要繼續(xù)鎖定占用上述連接和資源,以等待其它業(yè)務(wù)服務(wù)器完成響應(yīng),這種等待無疑是對資源的一種浪費(fèi)。
現(xiàn)有技術(shù)中,另一種分布式事務(wù)處理方案為TCC(Try-Commit-Cancel,準(zhǔn)備-提交-取消)方案。TCC方案分為如下3個階段:在第1階段(也即Try階段),事務(wù)管理器向本次業(yè)務(wù)請求涉及的各個業(yè)務(wù)服務(wù)器發(fā)送事務(wù)準(zhǔn)備消息,業(yè)務(wù)服務(wù)器接收到事務(wù)準(zhǔn)備消息之后做業(yè)務(wù)檢查并將結(jié)果反饋給事務(wù)管理器;在第2階段(也即Commit階段),事務(wù)管理器向本次業(yè)務(wù)請求涉及的各個業(yè)務(wù)服務(wù)器發(fā)送事務(wù)提交消息,業(yè)務(wù)服務(wù)器接收到事務(wù)提交消息之后提交業(yè)務(wù)數(shù)據(jù)并將結(jié)果返回給事務(wù)管理器;在第3階段(也即Cancel階段),事務(wù)管理器根據(jù)各個業(yè)務(wù)服務(wù)器返回的提交結(jié)果,判斷是否需要執(zhí)行取消操作。具體來講:如果所有業(yè)務(wù)服務(wù)器均返回提交成功,則不需要執(zhí)行取消操作,本次業(yè)務(wù)請求成功;如果所有業(yè)務(wù)服務(wù)器均返回提交失敗,則也不需要執(zhí)行取消操作,本次業(yè)務(wù)請求失?。蝗绻胁糠謽I(yè)務(wù)服務(wù)器返回提交失敗,則事務(wù)管理器向各個提交成功的業(yè)務(wù)服務(wù)器發(fā)送取消操作指示,業(yè)務(wù)服務(wù)器在接收到取消操作指示之后執(zhí)行數(shù)據(jù)回滾操作,本次業(yè)務(wù)請求失敗。
TCC方案在Commit階段真正提交了業(yè)務(wù)數(shù)據(jù)并實時釋放了資源,因此各個業(yè)務(wù)服務(wù)器不需要長期占用資源,解決了2PC方案的資源長期占用無法釋放的問題。但是,TCC方案因為引入了取消處理邏輯,導(dǎo)致需要為軟件系統(tǒng)中所有的業(yè)務(wù)操作配置取消處理邏輯。如果軟件系統(tǒng)的需求多變,業(yè)務(wù)邏輯復(fù)雜,那么對應(yīng)的取消處理邏輯也會復(fù)雜多變,導(dǎo)致取消處理邏輯的實現(xiàn)成本會很高,給軟件系統(tǒng)帶來較大的開發(fā)成本,甚至對系統(tǒng)的可靠性和穩(wěn)定性都造成影響。
技術(shù)實現(xiàn)要素:
為了解決現(xiàn)有技術(shù)中存在的問題,本發(fā)明實施例提供了一種分布式事務(wù)處理方法、裝置及系統(tǒng)。
一方面,本發(fā)明實施例提供了一種分布式事務(wù)處理方法,應(yīng)用于分布式系統(tǒng)中,分布式系統(tǒng)包括多個業(yè)務(wù)節(jié)點(diǎn),各個業(yè)務(wù)節(jié)點(diǎn)用于執(zhí)行不同的事務(wù)。該方法包括:分布式系統(tǒng)中的一個業(yè)務(wù)節(jié)點(diǎn)接收請求方設(shè)備發(fā)送的業(yè)務(wù)請求,接收到業(yè)務(wù)請求的業(yè)務(wù)節(jié)點(diǎn)作為主業(yè)務(wù)節(jié)點(diǎn);主業(yè)務(wù)節(jié)點(diǎn)確定除主業(yè)務(wù)節(jié)點(diǎn)之外,用于處理該業(yè)務(wù)請求的N個從業(yè)務(wù)節(jié)點(diǎn),N為正整數(shù);主業(yè)務(wù)節(jié)點(diǎn)根據(jù)業(yè)務(wù)請求和各個從業(yè)務(wù)節(jié)點(diǎn)用于執(zhí)行的事務(wù),調(diào)用N個從業(yè)務(wù)節(jié)點(diǎn)分別執(zhí)行對應(yīng)的事務(wù);主業(yè)務(wù)節(jié)點(diǎn)獲取各個從業(yè)務(wù)節(jié)點(diǎn)的執(zhí)行結(jié)果;若存在執(zhí)行失敗的從業(yè)務(wù)節(jié)點(diǎn),則主業(yè)務(wù)節(jié)點(diǎn)根據(jù)預(yù)設(shè)重試策略重新調(diào)用執(zhí)行失敗的從業(yè)務(wù)節(jié)點(diǎn)執(zhí)行對應(yīng)的事務(wù)。
本發(fā)明實施例提供的方案中,通過主業(yè)務(wù)節(jié)點(diǎn)在獲取到各個從業(yè)務(wù)節(jié)點(diǎn)的執(zhí)行結(jié)果之后,若存在執(zhí)行失敗的從業(yè)務(wù)節(jié)點(diǎn),則主業(yè)務(wù)節(jié)點(diǎn)根據(jù)預(yù)設(shè)重試策略重新調(diào)用執(zhí)行失敗的從業(yè)務(wù)節(jié)點(diǎn)執(zhí)行對應(yīng)的事務(wù);一方面,采用異步方式執(zhí)行事務(wù)并提交業(yè)務(wù)數(shù)據(jù),解決了2PC方案采用同步方式提交業(yè)務(wù)數(shù)據(jù)導(dǎo)致資源長期占用無法釋放的問題,使得數(shù)據(jù)庫資源能夠被更為合理有效地利用;另一方面,當(dāng)事務(wù)執(zhí)行失敗時,根據(jù)預(yù)設(shè)重試策略重新執(zhí)行該事務(wù),由于重新執(zhí)行的處理邏輯與首次執(zhí)行的處理邏輯均為正向邏輯,無需配置反向的取消處理邏輯,解決了TCC方案因需要實現(xiàn)大量取消處理邏輯,而導(dǎo)致軟件系統(tǒng)的開發(fā)成本較高的問題,減少了軟件系統(tǒng)的開發(fā)成本,也提高了業(yè)務(wù)請求的成功率。
在一個可能的設(shè)計中,主業(yè)務(wù)節(jié)點(diǎn)根據(jù)預(yù)設(shè)重試策略重新調(diào)用執(zhí)行失敗的從業(yè)務(wù)節(jié)點(diǎn)執(zhí)行對應(yīng)的事務(wù),包括:主業(yè)務(wù)節(jié)點(diǎn)根據(jù)執(zhí)行失敗的從業(yè)務(wù)節(jié)點(diǎn)在上一次執(zhí)行失敗時的錯誤類型,確定目標(biāo)重試方法;主業(yè)務(wù)節(jié)點(diǎn)向執(zhí)行失敗的從業(yè)務(wù)節(jié)點(diǎn)發(fā)送調(diào)用請求,該調(diào)用請求中包括目標(biāo)重試方法,該調(diào)用請求用于調(diào)用執(zhí)行失敗的從業(yè)務(wù)節(jié)點(diǎn)采用目標(biāo)重試方法重新執(zhí)行對應(yīng)的事務(wù);主業(yè)務(wù)節(jié)點(diǎn)接收執(zhí)行失敗的從業(yè)務(wù)節(jié)點(diǎn)發(fā)送的執(zhí)行結(jié)果;若執(zhí)行結(jié)果為執(zhí)行失敗,則主業(yè)務(wù)節(jié)點(diǎn)再次從上述根據(jù)執(zhí)行失敗的從業(yè)務(wù)節(jié)點(diǎn)在上一次執(zhí)行失敗時的錯誤類型,確定目標(biāo)重試方法的步驟開始執(zhí)行。
通過上述方式,主業(yè)務(wù)節(jié)點(diǎn)根據(jù)上一次執(zhí)行失敗時的錯誤類型選擇合適的重試方法進(jìn)行重試,有助于提升重試成功率。
在一個可能的設(shè)計中,主業(yè)務(wù)節(jié)點(diǎn)根據(jù)執(zhí)行失敗的從業(yè)務(wù)節(jié)點(diǎn)在上一次執(zhí)行失敗時的錯誤類型,確定目標(biāo)重試方法,包括:主業(yè)務(wù)節(jié)點(diǎn)獲取與執(zhí)行失敗的從業(yè)務(wù)節(jié)點(diǎn)在上一次執(zhí)行失敗時的錯誤類型相對應(yīng)的重試方法集合,重試方法集合中包括至少一種重試方法;主業(yè)務(wù)節(jié)點(diǎn)根據(jù)重試方法集合中的每一種重試方法的優(yōu)先級和最大重試次數(shù),從可選擇的重試方法中選取優(yōu)先級最高的重試方法作為目標(biāo)重試方法;其中,可選擇的重試方法是指實際重試次數(shù)小于其最大重試次數(shù)的重試方法,實際重試次數(shù)是指因上一次執(zhí)行失敗時的錯誤類型而采用該重試方法重新執(zhí)行事務(wù)的已執(zhí)行次數(shù)。
本發(fā)明實施例提供的重試策略,通過為每一個錯誤類型和重試方法的組合配置相應(yīng)的優(yōu)先級和最大重試次數(shù),以確保選取最優(yōu)的重試方法重新執(zhí)行事務(wù),有助于提高重試的成功率和效率。
在一個可能的設(shè)計中,所述方法還包括:主業(yè)務(wù)節(jié)點(diǎn)統(tǒng)計每一個錯誤類型和重試方法的組合所對應(yīng)的成功率;其中,目標(biāo)組合是指目標(biāo)錯誤類型和目標(biāo)重試方法的組合,目標(biāo)組合所對應(yīng)的成功率是指因目標(biāo)錯誤類型而采用目標(biāo)重試方法重新執(zhí)行事務(wù)的總次數(shù)中執(zhí)行成功的次數(shù)與總次數(shù)的比值;主業(yè)務(wù)節(jié)點(diǎn)根據(jù)各個組合所對應(yīng)的成功率,更新各種錯誤類型所對應(yīng)的重試方法集合中的每一種重試方法的優(yōu)先級。
在本發(fā)明實施例中,還通過統(tǒng)計每一個錯誤類型和重試方法的組合所對應(yīng)的成功率,根據(jù)各個組合所對應(yīng)的成功率,更新各種錯誤類型所對應(yīng)的重試方法集合中的每一種重試方法的優(yōu)先級,使得重試方法的優(yōu)先級更為準(zhǔn)確,為提高重試的成功率和效率提供可靠保障。
在一個可能的設(shè)計中,主業(yè)務(wù)節(jié)點(diǎn)根據(jù)各個組合所對應(yīng)的成功率,更新各種錯誤類型所對應(yīng)的重試方法集合中的每一種重試方法的優(yōu)先級,包括:對于目標(biāo)組合,主業(yè)務(wù)節(jié)點(diǎn)判斷因目標(biāo)錯誤類型而采用目標(biāo)重試方法重新執(zhí)行事務(wù)的總次數(shù)是否大于預(yù)設(shè)閾值;若總次數(shù)大于所述預(yù)設(shè)閾值,則主業(yè)務(wù)節(jié)點(diǎn)根據(jù)目標(biāo)組合所對應(yīng)的成功率,更新目標(biāo)錯誤類型所對應(yīng)的重試方法集合中的目標(biāo)重試方法的優(yōu)先級。
通過上述方式,確保選取有效的、具有參考價值的數(shù)據(jù),保證優(yōu)先級更新的準(zhǔn)確性。
在一個可能的設(shè)計中,調(diào)用請求中還包括:根據(jù)業(yè)務(wù)請求和執(zhí)行失敗的從業(yè)務(wù)節(jié)點(diǎn)用于執(zhí)行的事務(wù)所生成的事務(wù)消息,以及事務(wù)消息的標(biāo)識。
通過上述方式,以使得從業(yè)務(wù)節(jié)點(diǎn)在接收到調(diào)用請求之后,檢測是否存儲有與標(biāo)識相對應(yīng)的執(zhí)行結(jié)果,若已存儲有與標(biāo)識相對應(yīng)的執(zhí)行結(jié)果且執(zhí)行結(jié)果為執(zhí)行成功,則從業(yè)務(wù)節(jié)點(diǎn)向主業(yè)務(wù)節(jié)點(diǎn)發(fā)送與標(biāo)識相對應(yīng)的執(zhí)行結(jié)果。本發(fā)明實施例還提供了重試冪等機(jī)制,針對從業(yè)務(wù)節(jié)點(diǎn)已成功執(zhí)行事務(wù),但因某些特殊原因?qū)е轮鳂I(yè)務(wù)節(jié)點(diǎn)認(rèn)為該事務(wù)執(zhí)行失敗,而再次調(diào)用從業(yè)務(wù)節(jié)點(diǎn)執(zhí)行該事務(wù)的情況,從業(yè)務(wù)節(jié)點(diǎn)在接收到主業(yè)務(wù)節(jié)點(diǎn)發(fā)送的調(diào)用請求之后,首先判斷該調(diào)用請求所請求執(zhí)行的事務(wù)之前是否已成功執(zhí)行,若已成功執(zhí)行則不重復(fù)執(zhí)行該事務(wù),保證了每一次重試調(diào)用的冪等性,充分確保了系統(tǒng)的可靠性。
在一個可能的設(shè)計中,主業(yè)務(wù)節(jié)點(diǎn)根據(jù)業(yè)務(wù)請求和各個所述從業(yè)務(wù)節(jié)點(diǎn)用于執(zhí)行的事務(wù),調(diào)用N個從業(yè)務(wù)節(jié)點(diǎn)分別執(zhí)行對應(yīng)的事務(wù)之前,還包括:主業(yè)務(wù)節(jié)點(diǎn)根據(jù)業(yè)務(wù)請求,執(zhí)行主業(yè)務(wù)節(jié)點(diǎn)對應(yīng)的事務(wù);若主業(yè)務(wù)節(jié)點(diǎn)執(zhí)行成功,則主業(yè)務(wù)節(jié)點(diǎn)從上述根據(jù)業(yè)務(wù)請求和各個從業(yè)務(wù)節(jié)點(diǎn)用于執(zhí)行的事務(wù),調(diào)用N個從業(yè)務(wù)節(jié)點(diǎn)分別執(zhí)行對應(yīng)的事務(wù)的步驟開始執(zhí)行??蛇x地,主業(yè)務(wù)節(jié)點(diǎn)根據(jù)業(yè)務(wù)請求,執(zhí)行主業(yè)務(wù)節(jié)點(diǎn)對應(yīng)的事務(wù)之后,還包括:若主業(yè)務(wù)節(jié)點(diǎn)執(zhí)行失敗,則主業(yè)務(wù)節(jié)點(diǎn)向請求方設(shè)備發(fā)送失敗響應(yīng)。
主業(yè)務(wù)節(jié)點(diǎn)在從請求方設(shè)備接收到業(yè)務(wù)請求之后,采用同步方式執(zhí)行本端對應(yīng)的事務(wù)并提交業(yè)務(wù)數(shù)據(jù),而從業(yè)務(wù)節(jié)點(diǎn)采用異步方式各自執(zhí)行對應(yīng)的事務(wù)并提交業(yè)務(wù)數(shù)據(jù),主業(yè)務(wù)節(jié)點(diǎn)根據(jù)其自身的事務(wù)執(zhí)行結(jié)果即向請求方設(shè)備反饋業(yè)務(wù)響應(yīng),不需要等待其它從業(yè)務(wù)節(jié)點(diǎn)的事務(wù)執(zhí)行結(jié)果,使得業(yè)務(wù)響應(yīng)時間相對于2PC方案和TCC方案明顯縮短。
在一個可能的設(shè)計中,主業(yè)務(wù)節(jié)點(diǎn)確定除主業(yè)務(wù)節(jié)點(diǎn)之外,用于處理業(yè)務(wù)請求的N個從業(yè)務(wù)節(jié)點(diǎn)之后,還包括:主業(yè)務(wù)節(jié)點(diǎn)在調(diào)用N個從業(yè)務(wù)節(jié)點(diǎn)分別執(zhí)行對應(yīng)的事務(wù)的過程中,根據(jù)業(yè)務(wù)請求執(zhí)行主業(yè)務(wù)節(jié)點(diǎn)對應(yīng)的事務(wù)。可選地,主業(yè)務(wù)節(jié)點(diǎn)根據(jù)業(yè)務(wù)請求執(zhí)行主業(yè)務(wù)節(jié)點(diǎn)對應(yīng)的事務(wù)之后,還包括:若主業(yè)務(wù)節(jié)點(diǎn)執(zhí)行失敗,則主業(yè)務(wù)節(jié)點(diǎn)根據(jù)預(yù)設(shè)重試策略重新執(zhí)行主業(yè)務(wù)節(jié)點(diǎn)對應(yīng)的事務(wù)。
當(dāng)主業(yè)務(wù)節(jié)點(diǎn)和各個從業(yè)務(wù)節(jié)點(diǎn)均采用異步方式執(zhí)行事務(wù)并提交數(shù)據(jù)時,主業(yè)務(wù)節(jié)點(diǎn)可在接收到請求方設(shè)備發(fā)送的業(yè)務(wù)請求之后即向請求方設(shè)備發(fā)送成功響應(yīng),能夠進(jìn)一步縮短業(yè)務(wù)響應(yīng)時間。
另一方面,本發(fā)明實施例提供了一種分布式事務(wù)處理方法,應(yīng)用于分布式系統(tǒng)中,分布式系統(tǒng)包括多個業(yè)務(wù)節(jié)點(diǎn),各個業(yè)務(wù)節(jié)點(diǎn)用于執(zhí)行不同的事務(wù)。該方法包括:分布式系統(tǒng)中的從業(yè)務(wù)節(jié)點(diǎn)接收主業(yè)務(wù)節(jié)點(diǎn)發(fā)送的調(diào)用請求;其中,主業(yè)務(wù)節(jié)點(diǎn)是指分布式系統(tǒng)中接收到請求方設(shè)備發(fā)送的業(yè)務(wù)請求的一個業(yè)務(wù)節(jié)點(diǎn),從業(yè)務(wù)節(jié)點(diǎn)是所述主業(yè)務(wù)節(jié)點(diǎn)確定的用于處理該業(yè)務(wù)請求的多個業(yè)務(wù)節(jié)點(diǎn)中的一個;調(diào)用請求是主業(yè)務(wù)節(jié)點(diǎn)已調(diào)用從業(yè)務(wù)節(jié)點(diǎn)執(zhí)行對應(yīng)的事務(wù),但判定從業(yè)務(wù)節(jié)點(diǎn)執(zhí)行失敗后根據(jù)預(yù)設(shè)重試策略再次發(fā)送的;從業(yè)務(wù)節(jié)點(diǎn)根據(jù)調(diào)用請求,執(zhí)行從業(yè)務(wù)節(jié)點(diǎn)對應(yīng)的事務(wù);從業(yè)務(wù)節(jié)點(diǎn)向主業(yè)務(wù)節(jié)點(diǎn)發(fā)送執(zhí)行結(jié)果。
本發(fā)明實施例提供的方案中,通過主業(yè)務(wù)節(jié)點(diǎn)在判定從業(yè)務(wù)節(jié)點(diǎn)執(zhí)行對應(yīng)的事務(wù)失敗后根據(jù)預(yù)設(shè)重試策略再次向從業(yè)務(wù)節(jié)點(diǎn)發(fā)送調(diào)用請求,從業(yè)務(wù)節(jié)點(diǎn)根據(jù)該調(diào)用請求,再次執(zhí)行從業(yè)務(wù)節(jié)點(diǎn)對應(yīng)的事務(wù);一方面,采用異步方式執(zhí)行事務(wù)并提交業(yè)務(wù)數(shù)據(jù),解決了2PC方案采用同步方式提交業(yè)務(wù)數(shù)據(jù)導(dǎo)致資源長期占用無法釋放的問題,使得數(shù)據(jù)庫資源能夠被更為合理有效地利用;另一方面,當(dāng)事務(wù)執(zhí)行失敗時,根據(jù)預(yù)設(shè)重試策略重新執(zhí)行該事務(wù),由于重新執(zhí)行的處理邏輯與首次執(zhí)行的處理邏輯均為正向邏輯,無需配置反向的取消處理邏輯,解決了TCC方案因需要實現(xiàn)大量取消處理邏輯,而導(dǎo)致軟件系統(tǒng)的開發(fā)成本較高的問題,減少了軟件系統(tǒng)的開發(fā)成本,也提高了業(yè)務(wù)請求的成功率。
在一個可能的設(shè)計中,調(diào)用請求中包括目標(biāo)重試方法,目標(biāo)重試方法是根據(jù)從業(yè)務(wù)節(jié)點(diǎn)在上一次執(zhí)行失敗時的錯誤類型確定的。從業(yè)務(wù)節(jié)點(diǎn)根據(jù)調(diào)用請求,執(zhí)行從業(yè)務(wù)節(jié)點(diǎn)對應(yīng)的事務(wù),包括:從業(yè)務(wù)節(jié)點(diǎn)根據(jù)調(diào)用請求,采用目標(biāo)重試方法執(zhí)行從業(yè)務(wù)節(jié)點(diǎn)對應(yīng)的事務(wù)。
通過上述方式,主業(yè)務(wù)節(jié)點(diǎn)根據(jù)上一次執(zhí)行失敗時的錯誤類型選擇合適的重試方法進(jìn)行重試,有助于提升重試成功率。
在一個可能的設(shè)計中,調(diào)用請求中還包括:根據(jù)業(yè)務(wù)請求和從業(yè)務(wù)節(jié)點(diǎn)用于執(zhí)行的事務(wù)所生成的事務(wù)消息,以及事務(wù)消息的標(biāo)識。從業(yè)務(wù)節(jié)點(diǎn)根據(jù)調(diào)用請求,執(zhí)行從業(yè)務(wù)節(jié)點(diǎn)對應(yīng)的事務(wù)之前,還包括:從業(yè)務(wù)節(jié)點(diǎn)檢測是否存儲有與標(biāo)識相對應(yīng)的執(zhí)行結(jié)果;若已存儲有與標(biāo)識相對應(yīng)的執(zhí)行結(jié)果且執(zhí)行結(jié)果為執(zhí)行成功,則從業(yè)務(wù)節(jié)點(diǎn)向主業(yè)務(wù)節(jié)點(diǎn)發(fā)送與標(biāo)識相對應(yīng)的執(zhí)行結(jié)果。
本發(fā)明實施例還提供了重試冪等機(jī)制,針對從業(yè)務(wù)節(jié)點(diǎn)已成功執(zhí)行事務(wù),但因某些特殊原因?qū)е轮鳂I(yè)務(wù)節(jié)點(diǎn)認(rèn)為該事務(wù)執(zhí)行失敗,而再次調(diào)用從業(yè)務(wù)節(jié)點(diǎn)執(zhí)行該事務(wù)的情況,從業(yè)務(wù)節(jié)點(diǎn)在接收到主業(yè)務(wù)節(jié)點(diǎn)發(fā)送的調(diào)用請求之后,首先判斷該調(diào)用請求所請求執(zhí)行的事務(wù)之前是否已成功執(zhí)行,若已成功執(zhí)行則不重復(fù)執(zhí)行該事務(wù),保證了每一次重試調(diào)用的冪等性,充分確保了系統(tǒng)的可靠性。
又一方面,本發(fā)明實施例提供一種分布式事務(wù)處理裝置,該裝置具有實現(xiàn)上述方法示例中主業(yè)務(wù)節(jié)點(diǎn)側(cè)行為的功能。所述功能可以通過硬件實現(xiàn),也可以通過硬件執(zhí)行相應(yīng)的軟件實現(xiàn)。所述硬件或軟件包括一個或多個與上述功能相對應(yīng)的單元。
在一個可能的設(shè)計中,主業(yè)務(wù)節(jié)點(diǎn)的結(jié)構(gòu)中包括處理器、發(fā)射器和接收器,所述處理器被配置為支持主業(yè)務(wù)節(jié)點(diǎn)執(zhí)行上述方法中相應(yīng)的功能。所述發(fā)射器和接收器用于支持主業(yè)務(wù)節(jié)點(diǎn)與其它業(yè)務(wù)節(jié)點(diǎn)之間的通信。進(jìn)一步的,主業(yè)務(wù)節(jié)點(diǎn)還可以包括存儲器,所述存儲器用于與處理器耦合,其保存主業(yè)務(wù)節(jié)點(diǎn)必要的程序指令和數(shù)據(jù)。
又一方面,本發(fā)明實施例提供一種分布式事務(wù)處理裝置,該裝置具有實現(xiàn)上述方法示例中從業(yè)務(wù)節(jié)點(diǎn)側(cè)行為的功能。所述功能可以通過硬件實現(xiàn),也可以通過硬件執(zhí)行相應(yīng)的軟件實現(xiàn)。所述硬件或軟件包括一個或多個與上述功能相對應(yīng)的單元。
在一個可能的設(shè)計中,從業(yè)務(wù)節(jié)點(diǎn)包括處理器、接收器和發(fā)射器,所述處理器被配置為支持從業(yè)務(wù)節(jié)點(diǎn)執(zhí)行上述方法中相應(yīng)的功能。所述接收器和發(fā)射器用于支持從業(yè)務(wù)節(jié)點(diǎn)與主業(yè)務(wù)節(jié)點(diǎn)之間的通信。進(jìn)一步的,從業(yè)務(wù)節(jié)點(diǎn)還可以包括存儲器,所述存儲器用于與處理器耦合,其保存從業(yè)務(wù)節(jié)點(diǎn)必要的程序指令和數(shù)據(jù)。
又一方面,本發(fā)明實施例提供一種分布式事務(wù)處理系統(tǒng),該分布式系統(tǒng)包括多個業(yè)務(wù)節(jié)點(diǎn),各個業(yè)務(wù)節(jié)點(diǎn)用于執(zhí)行不同的事務(wù)。每一個業(yè)務(wù)節(jié)點(diǎn),包括:如上述方面所述的分布式業(yè)務(wù)處理裝置。
再一方面,本發(fā)明實施例提供一種計算機(jī)存儲介質(zhì),用于儲存為上述用于主業(yè)務(wù)節(jié)點(diǎn)所用的計算機(jī)軟件指令,其包含用于執(zhí)行上述方面所設(shè)計的程序。
再一方面,本發(fā)明實施例提供一種計算機(jī)存儲介質(zhì),用于儲存為上述用于從業(yè)務(wù)節(jié)點(diǎn)所用的計算機(jī)軟件指令,其包含用于執(zhí)行上述方面所設(shè)計的程序。
相較于現(xiàn)有技術(shù),本發(fā)明實施例的方案中,提供了一種新的分布式事務(wù)處理方案,也即TCR(Try-Commit-Redo,準(zhǔn)備-提交-重試)方案。一方面,采用異步方式執(zhí)行事務(wù)并提交業(yè)務(wù)數(shù)據(jù),解決了2PC方案采用同步方式提交業(yè)務(wù)數(shù)據(jù)導(dǎo)致資源長期占用無法釋放的問題,使得數(shù)據(jù)庫資源能夠被更為合理有效地利用;另一方面,當(dāng)事務(wù)執(zhí)行失敗時,根據(jù)預(yù)設(shè)重試策略重新執(zhí)行該事務(wù),由于重新執(zhí)行的處理邏輯與首次執(zhí)行的處理邏輯均為正向邏輯,無需配置反向的取消處理邏輯,解決了TCC方案因需要實現(xiàn)大量取消處理邏輯,而導(dǎo)致軟件系統(tǒng)的開發(fā)成本較高的問題,減少了軟件系統(tǒng)的開發(fā)成本,也提高了業(yè)務(wù)請求的成功率。
附圖說明
為了更清楚地說明本發(fā)明實施例中的技術(shù)方案,下面將對實施例描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1示出了本發(fā)明實施例提供的一種可能的應(yīng)用場景的示意圖;
圖2A是本發(fā)明另一實施例提供的分布式事務(wù)處理方法的流程圖;
圖2B是圖2A所示實施例涉及的步驟208的流程圖;
圖2C示出了錯誤類型與重試方法之間的對應(yīng)關(guān)系的示意圖;
圖3A是本發(fā)明一個實施例提供的分布式事務(wù)處理裝置的框圖;
圖3B是本發(fā)明另一實施例提供的分布式事務(wù)處理裝置的框圖;
圖3C是本發(fā)明另一實施例提供的分布式事務(wù)處理裝置的框圖;
圖3D是本發(fā)明另一實施例提供的分布式事務(wù)處理裝置的框圖;
圖4A是本發(fā)明另一實施例提供的分布式事務(wù)處理裝置的框圖;
圖4B是本發(fā)明另一實施例提供的分布式事務(wù)處理裝置的框圖;
圖5是本發(fā)明一個實施例提供的業(yè)務(wù)節(jié)點(diǎn)的結(jié)構(gòu)示意圖。
具體實施方式
為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合附圖對本發(fā)明實施方式作進(jìn)一步地詳細(xì)描述。
本發(fā)明實施例描述的網(wǎng)絡(luò)架構(gòu)以及業(yè)務(wù)場景是為了更加清楚地說明本發(fā)明實施例的技術(shù)方案,并不構(gòu)成對本發(fā)明實施例提供的技術(shù)方案的限定,本領(lǐng)域普通技術(shù)人員可知,隨著網(wǎng)絡(luò)架構(gòu)的演變和新業(yè)務(wù)場景的出現(xiàn),本發(fā)明實施例提供的技術(shù)方案對于類似的技術(shù)問題,同樣適用。
圖1示出了本發(fā)明實施例提供的一種可能的應(yīng)用場景的示意圖。該應(yīng)用場景可以是分布式系統(tǒng),該應(yīng)用場景包括:多個業(yè)務(wù)節(jié)點(diǎn)。
在本發(fā)明實施例中,主業(yè)務(wù)節(jié)點(diǎn)可以是分布式系統(tǒng)中的任一個業(yè)務(wù)節(jié)點(diǎn)。示意性地,如圖1所示,主業(yè)務(wù)節(jié)點(diǎn)以標(biāo)號110表示。在分布式系統(tǒng)中,接收到請求方設(shè)備發(fā)送的業(yè)務(wù)請求的業(yè)務(wù)節(jié)點(diǎn),即作為主業(yè)務(wù)節(jié)點(diǎn)。分布式系統(tǒng)中除主業(yè)務(wù)節(jié)點(diǎn)110之外的其它業(yè)務(wù)節(jié)點(diǎn)以標(biāo)號120表示。業(yè)務(wù)節(jié)點(diǎn)可以是一臺服務(wù)器,也可以是由多臺服務(wù)器組成的服務(wù)器集群,或者是一臺服務(wù)器中的一個獨(dú)立的計算處理單元。各個業(yè)務(wù)節(jié)點(diǎn)之間通過網(wǎng)絡(luò)建立通信連接。
分布式系統(tǒng)中的各個業(yè)務(wù)節(jié)點(diǎn)用于執(zhí)行不同的事務(wù)。例如,以分布式系統(tǒng)實現(xiàn)成為CRM(Customer Relationship Management,客戶關(guān)系管理)系統(tǒng)為例,CRM系統(tǒng)用于為電信運(yùn)營商提供客戶關(guān)系管理服務(wù),具體包括開戶、停開機(jī)、改產(chǎn)品、銷戶等服務(wù)。按照微服務(wù)架構(gòu)方法,CRM系統(tǒng)分為訂單管理、客戶管理、資源管理、產(chǎn)品管理、合作伙伴管理、系統(tǒng)管理等多個子服務(wù),每個子服務(wù)的數(shù)據(jù)都保存在不同的數(shù)據(jù)庫實例上。在微服務(wù)部署時,一次業(yè)務(wù)請求可能會同時涉及多個子服務(wù)的調(diào)用和數(shù)據(jù)修改。
可選地,每一個業(yè)務(wù)節(jié)點(diǎn)包括:業(yè)務(wù)受理器、事務(wù)管理器和事務(wù)處理器。其中,業(yè)務(wù)受理器用于接收請求方設(shè)備發(fā)送的業(yè)務(wù)請求,確定除本端之外用于處理該業(yè)務(wù)請求的其它業(yè)務(wù)節(jié)點(diǎn),根據(jù)該業(yè)務(wù)請求和各個其它業(yè)務(wù)節(jié)點(diǎn)用于執(zhí)行的事務(wù),生成每個其它業(yè)務(wù)節(jié)點(diǎn)各自對應(yīng)的事務(wù)消息,并將生成的事務(wù)消息存儲至事務(wù)管理器中。事務(wù)管理器用于對事務(wù)消息進(jìn)行管理。在一個示例中,事務(wù)管理器包括:事務(wù)消息隊列、失敗重試隊列和歷史消息隊列。事務(wù)消息隊列用于保存從業(yè)務(wù)受理器接收到的事務(wù)消息。失敗重試隊列用于保存執(zhí)行結(jié)果為失敗的事務(wù)消息。歷史消息隊列用于保存執(zhí)行結(jié)果為成功的事務(wù)消息。事務(wù)處理器用于根據(jù)業(yè)務(wù)請求執(zhí)行本端對應(yīng)的事務(wù),例如執(zhí)行數(shù)據(jù)修改等操作。
當(dāng)業(yè)務(wù)節(jié)點(diǎn)作為主業(yè)務(wù)節(jié)點(diǎn)時,業(yè)務(wù)受理器具備下述裝置示例中接收單元和確定單元的功能;事務(wù)管理器具備下述裝置示例中調(diào)用單元、獲取單元和重新調(diào)用單元的功能,可選地,事務(wù)管理器還具備下述裝置示例中統(tǒng)計單元和更新單元的功能;事務(wù)處理器具備下述裝置示例中同步執(zhí)行單元和發(fā)送單元的功能,或者,事務(wù)處理器具備下述裝置示例中異步執(zhí)行單元和重新執(zhí)行單元的功能。當(dāng)業(yè)務(wù)節(jié)點(diǎn)作為從業(yè)務(wù)節(jié)點(diǎn)時,事務(wù)處理器具備下述裝置示例中接收單元、處理單元和發(fā)送單元的功能,可選地,事務(wù)處理器還具備下述裝置示例中檢測單元的功能。
在現(xiàn)有技術(shù)中,TCC方案雖然能夠解決2PC方案所存在的資源長期占用無法釋放的問題,但TCC方案因為引入了取消處理邏輯,仍然存在上文介紹的一些問題。基于此,本發(fā)明實施例提供一種分布式事務(wù)處理方法,和基于這個方法的裝置及系統(tǒng)。本發(fā)明實施例提供的技術(shù)方案,核心思想是提供一種新的分布式事務(wù)處理方案,也即TCR方案,以解決現(xiàn)有技術(shù)存在的問題。TCR方案分為如下3個階段:在第1階段(也即Try階段),事務(wù)管理器向本次業(yè)務(wù)請求涉及的各個業(yè)務(wù)服務(wù)器發(fā)送事務(wù)準(zhǔn)備消息,業(yè)務(wù)服務(wù)器接收到事務(wù)準(zhǔn)備消息之后做業(yè)務(wù)檢查并將結(jié)果反饋給事務(wù)管理器;在第2階段(也即Commit階段),事務(wù)管理器向本次業(yè)務(wù)請求涉及的各個業(yè)務(wù)服務(wù)器發(fā)送事務(wù)提交消息,業(yè)務(wù)服務(wù)器接收到事務(wù)提交消息之后提交業(yè)務(wù)數(shù)據(jù)并將結(jié)果返回給事務(wù)管理器;在第3階段(也即Redo階段),事務(wù)管理器根據(jù)各個業(yè)務(wù)服務(wù)器返回的提交結(jié)果,判斷是否需要執(zhí)行重試操作。具體來講:如果所有業(yè)務(wù)服務(wù)器均返回提交成功,則不需要執(zhí)行重試操作,本次業(yè)務(wù)請求成功;如果存在業(yè)務(wù)服務(wù)器返回提交失敗,則事務(wù)管理器向各個提交失敗的業(yè)務(wù)服務(wù)器發(fā)送重試指示,業(yè)務(wù)服務(wù)器在接收到重試指示之后重新執(zhí)行對應(yīng)的事務(wù)。
另外,在本發(fā)明實施例中,同步方式是指執(zhí)行一項操作之前,需要等待上一項操作執(zhí)行完成;異步方式是指執(zhí)行一項操作之前,無需等待上一項操作執(zhí)行完成。
下面將基于上面所述的本發(fā)明實施例涉及的共性方面,對本發(fā)明實施例進(jìn)一步詳細(xì)說明。
圖2A是本發(fā)明一個實施例提供的分布式事務(wù)處理方法的流程圖。該方法可應(yīng)用于圖1所示的應(yīng)用場景中。該方法可以包括如下步驟。
步驟201,分布式系統(tǒng)中的一個業(yè)務(wù)節(jié)點(diǎn)接收請求方設(shè)備發(fā)送的業(yè)務(wù)請求,接收到該業(yè)務(wù)請求的業(yè)務(wù)節(jié)點(diǎn)作為主業(yè)務(wù)節(jié)點(diǎn)。
分布式系統(tǒng)包括多個業(yè)務(wù)節(jié)點(diǎn),各個業(yè)務(wù)節(jié)點(diǎn)用于執(zhí)行不同的事務(wù)。在本發(fā)明實施例中,對分布式系統(tǒng)所提供的服務(wù)不作限定。例如,分布式系統(tǒng)可用于為電信運(yùn)營商提供客戶關(guān)系管理服務(wù)。該分布式系統(tǒng)中可包括:用于提供訂單管理子服務(wù)的業(yè)務(wù)節(jié)點(diǎn)、用于提供客戶管理子服務(wù)的業(yè)務(wù)節(jié)點(diǎn)、用于提供資源管理子服務(wù)的業(yè)務(wù)節(jié)點(diǎn)、用于提供產(chǎn)品管理子服務(wù)的業(yè)務(wù)節(jié)點(diǎn)、用于提供合作伙伴管理子服務(wù)的業(yè)務(wù)節(jié)點(diǎn)、用于提供系統(tǒng)管理子服務(wù)的業(yè)務(wù)節(jié)點(diǎn),等等。每個業(yè)務(wù)節(jié)點(diǎn)有各自對應(yīng)的數(shù)據(jù)庫實例,不同業(yè)務(wù)節(jié)點(diǎn)的數(shù)據(jù)保存在不同的數(shù)據(jù)庫實例上。
業(yè)務(wù)請求用于請求分布式系統(tǒng)所提供的一項或多項子服務(wù)。在本發(fā)明實施例中,僅針對請求多項子服務(wù)的情況所涉及的事務(wù)處理流程進(jìn)行介紹說明。在本發(fā)明實施例中,主業(yè)務(wù)節(jié)點(diǎn)是指分布式系統(tǒng)中接收到請求方設(shè)備發(fā)送的業(yè)務(wù)請求的一個業(yè)務(wù)節(jié)點(diǎn)。例如,假設(shè)用于提供訂單管理子服務(wù)的業(yè)務(wù)節(jié)點(diǎn)接收到請求方設(shè)備發(fā)送的訂單創(chuàng)建請求,則該業(yè)務(wù)節(jié)點(diǎn)即為主業(yè)務(wù)節(jié)點(diǎn)。
步驟202,主業(yè)務(wù)節(jié)點(diǎn)根據(jù)業(yè)務(wù)請求,執(zhí)行主業(yè)務(wù)節(jié)點(diǎn)對應(yīng)的事務(wù)。
在本發(fā)明實施例中,主業(yè)務(wù)節(jié)點(diǎn)對應(yīng)的事務(wù)采用同步方式執(zhí)行。若主業(yè)務(wù)節(jié)點(diǎn)執(zhí)行成功,則主業(yè)務(wù)節(jié)點(diǎn)向請求方設(shè)備發(fā)送成功響應(yīng),并執(zhí)行下述步驟204。若主業(yè)務(wù)節(jié)點(diǎn)執(zhí)行失敗,則主業(yè)務(wù)節(jié)點(diǎn)向請求方設(shè)備發(fā)送失敗響應(yīng)。
以主業(yè)務(wù)節(jié)點(diǎn)為上述用于提供訂單管理子服務(wù)的業(yè)務(wù)節(jié)點(diǎn)為例,主業(yè)務(wù)節(jié)點(diǎn)根據(jù)訂單創(chuàng)建請求創(chuàng)建訂單;若訂單創(chuàng)建成功,則主業(yè)務(wù)節(jié)點(diǎn)向請求方設(shè)備發(fā)送成功響應(yīng),并執(zhí)行下述步驟204;若訂單創(chuàng)建失敗,則主業(yè)務(wù)節(jié)點(diǎn)向請求方設(shè)備發(fā)送失敗響應(yīng)。
通過上述方式,能夠使得主業(yè)務(wù)節(jié)點(diǎn)采用同步方式執(zhí)行事務(wù)并提交數(shù)據(jù),盡可能地保證數(shù)據(jù)一致性。
步驟203,主業(yè)務(wù)節(jié)點(diǎn)確定除主業(yè)務(wù)節(jié)點(diǎn)之外,用于處理該業(yè)務(wù)請求的N個從業(yè)務(wù)節(jié)點(diǎn),N為正整數(shù)。
主業(yè)務(wù)節(jié)點(diǎn)根據(jù)業(yè)務(wù)請求和各個從業(yè)務(wù)節(jié)點(diǎn)用于執(zhí)行的事務(wù),確定除其自身之外用于處理該業(yè)務(wù)請求的N個其它業(yè)務(wù)節(jié)點(diǎn),該N個其它業(yè)務(wù)節(jié)點(diǎn)稱為N個從業(yè)務(wù)節(jié)點(diǎn)。
仍然以主業(yè)務(wù)節(jié)點(diǎn)為上述用于提供訂單管理子服務(wù)的業(yè)務(wù)節(jié)點(diǎn)為例,主業(yè)務(wù)節(jié)點(diǎn)確定除其自身之外,用于提供客戶管理子服務(wù)的業(yè)務(wù)節(jié)點(diǎn)和用于提供資源管理子服務(wù)的業(yè)務(wù)節(jié)點(diǎn)也用于處理該業(yè)務(wù)請求。其中,用于提供客戶管理子服務(wù)的業(yè)務(wù)節(jié)點(diǎn)用于在訂單創(chuàng)建成功之后修改用戶信息,用于提供資源管理子服務(wù)的業(yè)務(wù)節(jié)點(diǎn)用于在訂單創(chuàng)建成功之后存儲用戶與訂單之間的對應(yīng)關(guān)系。
另外,在本實施例中,對上述步驟202和步驟203的執(zhí)行順序不作限定。步驟202可以在步驟203之前執(zhí)行,也可在步驟203之后執(zhí)行,或者與步驟203同時執(zhí)行。
步驟204,主業(yè)務(wù)節(jié)點(diǎn)根據(jù)業(yè)務(wù)請求和各個從業(yè)務(wù)節(jié)點(diǎn)用于執(zhí)行的事務(wù),調(diào)用N個從業(yè)務(wù)節(jié)點(diǎn)分別執(zhí)行對應(yīng)的事務(wù)。
在一個示例中,主業(yè)務(wù)節(jié)點(diǎn)包括業(yè)務(wù)受理器、事務(wù)管理器和事務(wù)處理器。業(yè)務(wù)受理器根據(jù)業(yè)務(wù)請求和各個從業(yè)務(wù)節(jié)點(diǎn)用于執(zhí)行的事務(wù),生成每個從業(yè)務(wù)節(jié)點(diǎn)各自對應(yīng)的事務(wù)消息,并將生成的事務(wù)消息存儲至事務(wù)管理器的事務(wù)消息隊列中。事務(wù)管理器從事務(wù)消息隊列中依次讀取事務(wù)消息,生成攜帶有事務(wù)消息的調(diào)用請求,并將生成的調(diào)用請求發(fā)送給對應(yīng)的從業(yè)務(wù)節(jié)點(diǎn)。
例如,主業(yè)務(wù)節(jié)點(diǎn)的業(yè)務(wù)受理器生成第一事務(wù)消息和第二事務(wù)消息;其中,第一事務(wù)消息用于指示上述用于提供客戶管理子服務(wù)的業(yè)務(wù)節(jié)點(diǎn)在訂單創(chuàng)建成功之后修改用戶信息;第二事務(wù)消息用于指示上述用于提供資源管理子服務(wù)的業(yè)務(wù)節(jié)點(diǎn)在訂單創(chuàng)建成功之后存儲用戶與訂單之間的對應(yīng)關(guān)系。主業(yè)務(wù)節(jié)點(diǎn)的業(yè)務(wù)受理器將第一事務(wù)消息和第二事務(wù)消息存儲至事務(wù)管理器的事務(wù)消息隊列中。事務(wù)管理器從事務(wù)消息隊列中讀取第一事務(wù)消息,生成攜帶有第一事務(wù)消息的第一調(diào)用請求,并將第一調(diào)用請求發(fā)送給上述用于提供客戶管理子服務(wù)的業(yè)務(wù)節(jié)點(diǎn);事務(wù)管理器從事務(wù)消息隊列中讀取第二事務(wù)消息,生成攜帶有第二事務(wù)消息的第二調(diào)用請求,并將第二調(diào)用請求發(fā)送給上述用于提供資源管理子服務(wù)的業(yè)務(wù)節(jié)點(diǎn)。
步驟205,從業(yè)務(wù)節(jié)點(diǎn)根據(jù)調(diào)用請求,執(zhí)行從業(yè)務(wù)節(jié)點(diǎn)對應(yīng)的事務(wù)。
對于每一個從業(yè)務(wù)節(jié)點(diǎn),從業(yè)務(wù)節(jié)點(diǎn)接收到調(diào)用請求之后,根據(jù)調(diào)用請求中攜帶的事務(wù)消息,執(zhí)行從業(yè)務(wù)節(jié)點(diǎn)對應(yīng)的事務(wù)。
步驟206,從業(yè)務(wù)節(jié)點(diǎn)向主業(yè)務(wù)節(jié)點(diǎn)發(fā)送執(zhí)行結(jié)果。
相應(yīng)地,主業(yè)務(wù)節(jié)點(diǎn)獲取各個從業(yè)務(wù)節(jié)點(diǎn)的執(zhí)行結(jié)果。其中,執(zhí)行結(jié)果為執(zhí)行成功的指示信息或執(zhí)行失敗的指示信息。
在一個示例中,主業(yè)務(wù)節(jié)點(diǎn)的事務(wù)管理器獲取到任一從業(yè)務(wù)節(jié)點(diǎn)的執(zhí)行結(jié)果之后,若執(zhí)行結(jié)果為執(zhí)行成功,則主業(yè)務(wù)節(jié)點(diǎn)將相應(yīng)的事務(wù)消息添加至歷史消息隊列中;如執(zhí)行結(jié)果為執(zhí)行失敗,則主業(yè)務(wù)節(jié)點(diǎn)將相應(yīng)的事務(wù)消息添加至失敗重試隊列中,后續(xù)從失敗執(zhí)行隊列中依次讀取事務(wù)消息以進(jìn)行重試。
步驟207,主業(yè)務(wù)節(jié)點(diǎn)檢測是否存在執(zhí)行失敗的從業(yè)務(wù)節(jié)點(diǎn)。
主業(yè)務(wù)節(jié)點(diǎn)根據(jù)各個從業(yè)務(wù)節(jié)點(diǎn)反饋的執(zhí)行結(jié)果,檢測是否存在執(zhí)行失敗的從業(yè)務(wù)節(jié)點(diǎn)。
步驟208,若存在執(zhí)行失敗的從業(yè)務(wù)節(jié)點(diǎn),則主業(yè)務(wù)節(jié)點(diǎn)根據(jù)預(yù)設(shè)重試策略重新調(diào)用執(zhí)行失敗的從業(yè)務(wù)節(jié)點(diǎn)執(zhí)行對應(yīng)的事務(wù)。
在本發(fā)明實施例中,采用TCR方案,對于執(zhí)行失敗的從業(yè)務(wù)節(jié)點(diǎn),主業(yè)務(wù)節(jié)點(diǎn)根據(jù)預(yù)設(shè)重試策略進(jìn)行失敗重試。預(yù)設(shè)重試策略是指預(yù)先設(shè)定的失敗重試的方案。
在一個示例中,如圖2B所示,本步驟包括如下幾個子步驟:
步驟208a,主業(yè)務(wù)節(jié)點(diǎn)根據(jù)執(zhí)行失敗的從業(yè)務(wù)節(jié)點(diǎn)在上一次執(zhí)行失敗時的錯誤類型,確定目標(biāo)重試方法;
在本發(fā)明實施例中,預(yù)先設(shè)定錯誤類型與重試方法之間的對應(yīng)關(guān)系。其中,錯誤類型是指導(dǎo)致業(yè)務(wù)節(jié)點(diǎn)執(zhí)行事務(wù)失敗的錯誤所屬的類型。示例性地,錯誤類型包括但不限于:網(wǎng)絡(luò)連接錯誤、超時錯誤、服務(wù)不存在錯誤、業(yè)務(wù)錯誤等。在實際應(yīng)用中,可根據(jù)實際需求預(yù)先設(shè)定多種不同的錯誤類型,本發(fā)明實施例對此不作限定。重試方法是指業(yè)務(wù)節(jié)點(diǎn)重新執(zhí)行對應(yīng)的事務(wù)時所采用的方法。示例性地,重試方法包括但不限于:尋找心跳響應(yīng)時間最小的處理節(jié)點(diǎn)重新執(zhí)行對應(yīng)的事務(wù)、輪詢集群中心跳健康的處理節(jié)點(diǎn)重新執(zhí)行對應(yīng)的事務(wù)、發(fā)送告警通過人工接入方式實現(xiàn)重新執(zhí)行對應(yīng)的事務(wù),等等。其中,處理節(jié)點(diǎn)是指業(yè)務(wù)節(jié)點(diǎn)用于處理對應(yīng)的事務(wù)的最小處理單元,在通常情況下,一個業(yè)務(wù)節(jié)點(diǎn)包括多個處理節(jié)點(diǎn),每一個處理節(jié)點(diǎn)均可用于執(zhí)行該業(yè)務(wù)節(jié)點(diǎn)所用于執(zhí)行的事務(wù)。在實際應(yīng)用中,可根據(jù)實際需求預(yù)先設(shè)定多種不同的重試方法,本發(fā)明實施例對此不作限定。每一種錯誤類型可對應(yīng)于一種或多種重試方法。示例性地,如圖2C所示,其示出了錯誤類型與重試方法之間的對應(yīng)關(guān)系的示意圖。
在一個示例中,步驟208a包括如下幾個子步驟:
1、主業(yè)務(wù)節(jié)點(diǎn)獲取與執(zhí)行失敗的從業(yè)務(wù)節(jié)點(diǎn)在上一次執(zhí)行失敗時的錯誤類型相對應(yīng)的重試方法集合,該重試方法集合中包括至少一種重試方法;
2、主業(yè)務(wù)節(jié)點(diǎn)根據(jù)重試方法集合中的每一種重試方法的優(yōu)先級和最大重試次數(shù),從可選擇的重試方法中選取優(yōu)先級最高的重試方法作為目標(biāo)重試方法;
其中,可選擇的重試方法是指實際重試次數(shù)小于其最大重試次數(shù)的重試方法,實際重試次數(shù)是指因上一次執(zhí)行失敗時的錯誤類型而采用重試方法重新執(zhí)行事務(wù)的已執(zhí)行次數(shù)。在本發(fā)明實施例中,對于每一個錯誤類型和重試方法的組合(記為一條配置項),設(shè)置對應(yīng)的權(quán)重和最大重試次數(shù);其中,權(quán)重用于指示該條配置項的優(yōu)先級,最大重試次數(shù)用于指示該條配置項重新派發(fā)的最大次數(shù)。示例性地,以錯誤類型為網(wǎng)絡(luò)連接錯誤為例,上述相關(guān)參數(shù)可如下表-1所示:
表-1
如果執(zhí)行失敗的從業(yè)務(wù)節(jié)點(diǎn)在上一次執(zhí)行失敗時的錯誤類型為網(wǎng)絡(luò)連接錯誤,則主業(yè)務(wù)節(jié)點(diǎn)優(yōu)先選擇的重試方法為輪詢集群中心跳健康的處理節(jié)點(diǎn)重新執(zhí)行對應(yīng)的事務(wù),如果該重試方法的實際重試次數(shù)超過了最大重試次數(shù),則不再使用該重試方法,選擇另一優(yōu)先級較低的重試方法,也即發(fā)送告警通過人工接入方式實現(xiàn)重新執(zhí)行對應(yīng)的事務(wù)。由于每次重新執(zhí)行對應(yīng)的事務(wù)之后,導(dǎo)致執(zhí)行失敗的錯誤類型都有可能發(fā)生變化,在選取重試方法時,以上一次執(zhí)行失敗時的錯誤類型(也即最后一次執(zhí)行失敗時的錯誤類型)為準(zhǔn)。
步驟208b,主業(yè)務(wù)節(jié)點(diǎn)向執(zhí)行失敗的從業(yè)務(wù)節(jié)點(diǎn)發(fā)送調(diào)用請求,該調(diào)用請求中包括目標(biāo)重試方法,該調(diào)用請求用于調(diào)用執(zhí)行失敗的從業(yè)務(wù)節(jié)點(diǎn)采用目標(biāo)重試方法重新執(zhí)行對應(yīng)的事務(wù);
相應(yīng)地,執(zhí)行失敗的從業(yè)務(wù)節(jié)點(diǎn)在接收到該調(diào)用請求之后,采用目標(biāo)重試方法重新執(zhí)行對應(yīng)的事務(wù),并將執(zhí)行結(jié)果發(fā)送給主業(yè)務(wù)節(jié)點(diǎn)。
步驟208c,主業(yè)務(wù)節(jié)點(diǎn)接收執(zhí)行失敗的從業(yè)務(wù)節(jié)點(diǎn)發(fā)送的執(zhí)行結(jié)果;
步驟208d,主業(yè)務(wù)節(jié)點(diǎn)判斷執(zhí)行結(jié)果是否為執(zhí)行成功。若是,則結(jié)束流程;若否,則再次從上述步驟208a開始執(zhí)行。
在本發(fā)明實施例中,通過采用上文介紹的重試策略,為每一個錯誤類型和重試方法的組合配置相應(yīng)的優(yōu)先級和最大重試次數(shù),以確保選取最優(yōu)的重試方法重新執(zhí)行事務(wù),有助于提高重試的成功率和效率。
可選地,調(diào)用請求中還包括:根據(jù)業(yè)務(wù)請求和執(zhí)行失敗的從業(yè)務(wù)節(jié)點(diǎn)用于執(zhí)行的事務(wù)所生成的事務(wù)消息,以及該事務(wù)消息的標(biāo)識。其中,事務(wù)消息由業(yè)務(wù)受理器在接收到業(yè)務(wù)請求之后生成。事務(wù)消息的標(biāo)識用于唯一標(biāo)識事務(wù)消息,不同的事務(wù)消息其標(biāo)識也不同。事務(wù)消息的標(biāo)識可以由業(yè)務(wù)受理器為分配,也可由事務(wù)管理器分配。
在一個示例中,從業(yè)務(wù)節(jié)點(diǎn)根據(jù)調(diào)用請求執(zhí)行從業(yè)務(wù)節(jié)點(diǎn)對應(yīng)的事務(wù)之前,還包括:從業(yè)務(wù)節(jié)點(diǎn)檢測是否存儲有與調(diào)用請求中攜帶的事務(wù)消息的標(biāo)識相對應(yīng)的執(zhí)行結(jié)果;若已存儲有與該標(biāo)識相對應(yīng)的執(zhí)行結(jié)果且執(zhí)行結(jié)果為執(zhí)行成功,則從業(yè)務(wù)節(jié)點(diǎn)向主業(yè)務(wù)節(jié)點(diǎn)發(fā)送與標(biāo)識相對應(yīng)的執(zhí)行結(jié)果;若未存儲有與該標(biāo)識相對應(yīng)的執(zhí)行結(jié)果,或者已存儲有與該標(biāo)識相對應(yīng)的執(zhí)行結(jié)果且執(zhí)行結(jié)果為執(zhí)行失敗,則從業(yè)務(wù)節(jié)點(diǎn)根據(jù)調(diào)用請求執(zhí)行從業(yè)務(wù)節(jié)點(diǎn)對應(yīng)的事務(wù)。
在本發(fā)明實施例中,提供了重試冪等機(jī)制,針對從業(yè)務(wù)節(jié)點(diǎn)已成功執(zhí)行事務(wù),但因某些特殊原因?qū)е轮鳂I(yè)務(wù)節(jié)點(diǎn)認(rèn)為該事務(wù)執(zhí)行失敗,而再次調(diào)用從業(yè)務(wù)節(jié)點(diǎn)執(zhí)行該事務(wù)的情況,從業(yè)務(wù)節(jié)點(diǎn)在接收到主業(yè)務(wù)節(jié)點(diǎn)發(fā)送的調(diào)用請求之后,首先判斷該調(diào)用請求所請求執(zhí)行的事務(wù)之前是否已成功執(zhí)行,若已成功執(zhí)行則不重復(fù)執(zhí)行該事務(wù),保證了每一次重試調(diào)用的冪等性,充分確保了系統(tǒng)的可靠性。例如,從業(yè)務(wù)節(jié)點(diǎn)已成功執(zhí)行事務(wù),但因網(wǎng)絡(luò)連接問題,從業(yè)務(wù)節(jié)點(diǎn)并未成功向主業(yè)務(wù)節(jié)點(diǎn)發(fā)送用于指示執(zhí)行成功的執(zhí)行結(jié)果,在這種情況下,主業(yè)務(wù)節(jié)點(diǎn)會判定從業(yè)務(wù)節(jié)點(diǎn)執(zhí)行失敗,后續(xù)會重新調(diào)用該從業(yè)務(wù)節(jié)點(diǎn)執(zhí)行對應(yīng)的事務(wù)。如果從業(yè)務(wù)節(jié)點(diǎn)接收到主業(yè)務(wù)節(jié)點(diǎn)再次發(fā)來的調(diào)用請求之后,再執(zhí)行一次對應(yīng)的事務(wù),則會導(dǎo)致已成功執(zhí)行的事務(wù)被重復(fù)執(zhí)行,會產(chǎn)生數(shù)據(jù)被重復(fù)修改等問題。從業(yè)務(wù)節(jié)點(diǎn)在根據(jù)調(diào)用請求執(zhí)行完成對應(yīng)的事務(wù)之后,將執(zhí)行結(jié)果和事務(wù)消息的標(biāo)識對應(yīng)存儲,在接收到主業(yè)務(wù)節(jié)點(diǎn)發(fā)來的調(diào)用請求之后,根據(jù)調(diào)用請求中攜帶的事務(wù)消息的標(biāo)識判斷是否有必要執(zhí)行該調(diào)用請求所請求執(zhí)行的事務(wù),能夠使得已成功執(zhí)行的事務(wù)不重復(fù)執(zhí)行。
可選地,本實施例提供的方法還包括如下步驟:
1、主業(yè)務(wù)節(jié)點(diǎn)統(tǒng)計每一個錯誤類型和重試方法的組合所對應(yīng)的成功率;
其中,目標(biāo)組合是指目標(biāo)錯誤類型和目標(biāo)重試方法的組合,目標(biāo)組合所對應(yīng)的成功率是指因目標(biāo)錯誤類型而采用目標(biāo)重試方法重新執(zhí)行事務(wù)的總次數(shù)中執(zhí)行成功的次數(shù)與總次數(shù)的比值;
2、主業(yè)務(wù)節(jié)點(diǎn)根據(jù)各個組合所對應(yīng)的成功率,更新各種錯誤類型所對應(yīng)的重試方法集合中的每一種重試方法的優(yōu)先級。
系統(tǒng)經(jīng)過一段時間的運(yùn)行之后,會存在大量的歷史重試記錄。通過指定對象對歷史重試記錄進(jìn)行統(tǒng)計,計算出每一個錯誤類型和重試方法的組合所對應(yīng)的成功率,并根據(jù)該成功率更新該組合對應(yīng)的優(yōu)先級,例如將該成功率作為該組合對應(yīng)的權(quán)重。通過上述方式,能夠使得重試方法的優(yōu)先級更為準(zhǔn)確,為提高重試的成功率和效率提供可靠保障。
在一個示例中,對于目標(biāo)組合,主業(yè)務(wù)節(jié)點(diǎn)判斷因目標(biāo)錯誤類型而采用目標(biāo)重試方法重新執(zhí)行事務(wù)的總次數(shù)是否大于預(yù)設(shè)閾值;若上述總次數(shù)大于預(yù)設(shè)閾值,則主業(yè)務(wù)節(jié)點(diǎn)根據(jù)目標(biāo)組合所對應(yīng)的成功率,更新目標(biāo)錯誤類型所對應(yīng)的重試方法集合中的目標(biāo)重試方法的優(yōu)先級;若上述總次數(shù)小于或等于預(yù)設(shè)閾值,則主業(yè)務(wù)節(jié)點(diǎn)不執(zhí)行上述更新操作,保持目標(biāo)重試方法的優(yōu)先級不變。通過上述方式,確保選取有效的、具有參考價值的數(shù)據(jù),保證優(yōu)先級更新的準(zhǔn)確性。
另外,在本發(fā)明實施例中,僅以主業(yè)務(wù)節(jié)點(diǎn)進(jìn)行上述統(tǒng)計和更新為例,在實際應(yīng)用中,分布式系統(tǒng)中的任意一個業(yè)務(wù)節(jié)點(diǎn)均可具備上述統(tǒng)計和更新的功能,或者也可通過系統(tǒng)中的一個特定功能實體以實現(xiàn)上述統(tǒng)計和更新的功能。
綜上所述,本實施例提供的方法,通過主業(yè)務(wù)節(jié)點(diǎn)在判定從業(yè)務(wù)節(jié)點(diǎn)執(zhí)行對應(yīng)的事務(wù)失敗后根據(jù)預(yù)設(shè)重試策略再次向從業(yè)務(wù)節(jié)點(diǎn)發(fā)送調(diào)用請求,從業(yè)務(wù)節(jié)點(diǎn)根據(jù)該調(diào)用請求,再次執(zhí)行從業(yè)務(wù)節(jié)點(diǎn)對應(yīng)的事務(wù);一方面,采用異步方式執(zhí)行事務(wù)并提交業(yè)務(wù)數(shù)據(jù),解決了2PC方案采用同步方式提交業(yè)務(wù)數(shù)據(jù)導(dǎo)致資源長期占用無法釋放的問題,使得數(shù)據(jù)庫資源能夠被更為合理有效地利用;另一方面,當(dāng)事務(wù)執(zhí)行失敗時,根據(jù)預(yù)設(shè)重試策略重新執(zhí)行該事務(wù),由于重新執(zhí)行的處理邏輯與首次執(zhí)行的處理邏輯均為正向邏輯,無需配置反向的取消處理邏輯,解決了TCC方案因需要實現(xiàn)大量取消處理邏輯,而導(dǎo)致軟件系統(tǒng)的開發(fā)成本較高的問題,減少了軟件系統(tǒng)的開發(fā)成本,也提高了業(yè)務(wù)請求的成功率。
另外,主業(yè)務(wù)節(jié)點(diǎn)在從請求方設(shè)備接收到業(yè)務(wù)請求之后,采用同步方式執(zhí)行本端對應(yīng)的事務(wù)并提交業(yè)務(wù)數(shù)據(jù),而從業(yè)務(wù)節(jié)點(diǎn)采用異步方式各自執(zhí)行對應(yīng)的事務(wù)并提交業(yè)務(wù)數(shù)據(jù),主業(yè)務(wù)節(jié)點(diǎn)根據(jù)其自身的事務(wù)執(zhí)行結(jié)果即向請求方設(shè)備反饋業(yè)務(wù)響應(yīng),不需要等待其它從業(yè)務(wù)節(jié)點(diǎn)的事務(wù)執(zhí)行結(jié)果,使得業(yè)務(wù)響應(yīng)時間相對于2PC方案和TCC方案明顯縮短。
另外,本發(fā)明實施例提供的重試策略,通過為每一個錯誤類型和重試方法的組合配置相應(yīng)的優(yōu)先級和最大重試次數(shù),以確保選取最優(yōu)的重試方法重新執(zhí)行事務(wù),有助于提高重試的成功率和效率。
另外,在本發(fā)明實施例中,還通過統(tǒng)計每一個錯誤類型和重試方法的組合所對應(yīng)的成功率,根據(jù)各個組合所對應(yīng)的成功率,更新各種錯誤類型所對應(yīng)的重試方法集合中的每一種重試方法的優(yōu)先級,使得重試方法的優(yōu)先級更為準(zhǔn)確,為提高重試的成功率和效率提供可靠保障。
另外,本發(fā)明實施例還提供了重試冪等機(jī)制,針對從業(yè)務(wù)節(jié)點(diǎn)已成功執(zhí)行事務(wù),但因某些特殊原因?qū)е轮鳂I(yè)務(wù)節(jié)點(diǎn)認(rèn)為該事務(wù)執(zhí)行失敗,而再次調(diào)用從業(yè)務(wù)節(jié)點(diǎn)執(zhí)行該事務(wù)的情況,從業(yè)務(wù)節(jié)點(diǎn)在接收到主業(yè)務(wù)節(jié)點(diǎn)發(fā)送的調(diào)用請求之后,首先判斷該調(diào)用請求所請求執(zhí)行的事務(wù)之前是否已成功執(zhí)行,若已成功執(zhí)行則不重復(fù)執(zhí)行該事務(wù),保證了每一次重試調(diào)用的冪等性,充分確保了系統(tǒng)的可靠性。
需要說明的一點(diǎn)是,在上述圖2A所示實施例中,主業(yè)務(wù)節(jié)點(diǎn)采用同步方式執(zhí)行事務(wù)并提交數(shù)據(jù),各個從業(yè)務(wù)節(jié)點(diǎn)采用異步方式執(zhí)行事務(wù)并提交數(shù)據(jù)。在一個可選實施例中,主業(yè)務(wù)節(jié)點(diǎn)和各個從業(yè)務(wù)節(jié)點(diǎn)均可采用異步方式執(zhí)行事務(wù)并提交數(shù)據(jù)。主業(yè)務(wù)節(jié)點(diǎn)在調(diào)用N個從業(yè)務(wù)節(jié)點(diǎn)分別執(zhí)行對應(yīng)的事務(wù)的過程中,根據(jù)業(yè)務(wù)請求執(zhí)行主業(yè)務(wù)節(jié)點(diǎn)對應(yīng)的事務(wù)。在一個示例中,主業(yè)務(wù)節(jié)點(diǎn)的業(yè)務(wù)受理器在接收到業(yè)務(wù)請求之后,還根據(jù)業(yè)務(wù)請求和主業(yè)務(wù)節(jié)點(diǎn)用于執(zhí)行的事務(wù),生成主業(yè)務(wù)節(jié)點(diǎn)對應(yīng)的事務(wù)消息,并將生成的事務(wù)消息存儲至事務(wù)管理器的事務(wù)消息隊列中。通過上述方式,實現(xiàn)主業(yè)務(wù)節(jié)點(diǎn)和各個從業(yè)務(wù)節(jié)點(diǎn)均采用異步方式執(zhí)行事務(wù)并提交數(shù)據(jù)。
另外,主業(yè)務(wù)節(jié)點(diǎn)根據(jù)業(yè)務(wù)請求執(zhí)行主業(yè)務(wù)節(jié)點(diǎn)對應(yīng)的事務(wù)之后,還包括:若主業(yè)務(wù)節(jié)點(diǎn)執(zhí)行失敗,則主業(yè)務(wù)節(jié)點(diǎn)根據(jù)預(yù)設(shè)重試策略重新執(zhí)行主業(yè)務(wù)節(jié)點(diǎn)對應(yīng)的事務(wù)。其中,主業(yè)務(wù)節(jié)點(diǎn)進(jìn)行失敗重試的過程與上文介紹的從業(yè)務(wù)節(jié)點(diǎn)進(jìn)行失敗重試的過程相同,參見上文介紹和說明,此處不再贅述。
可選地,當(dāng)主業(yè)務(wù)節(jié)點(diǎn)和各個從業(yè)務(wù)節(jié)點(diǎn)均采用異步方式執(zhí)行事務(wù)并提交數(shù)據(jù)時,主業(yè)務(wù)節(jié)點(diǎn)可在接收到請求方設(shè)備發(fā)送的業(yè)務(wù)請求之后即向請求方設(shè)備發(fā)送成功響應(yīng),能夠進(jìn)一步縮短業(yè)務(wù)響應(yīng)時間。
下述為本發(fā)明裝置實施例,可以用于執(zhí)行本發(fā)明方法實施例。對于本發(fā)明裝置實施例中未披露的細(xì)節(jié),請參照本發(fā)明方法實施例。
圖3A是本發(fā)明一個實施例提供的分布式事務(wù)處理裝置的框圖。該裝置是位于分布式系統(tǒng)中的一個業(yè)務(wù)節(jié)點(diǎn)。該裝置具有實現(xiàn)上述方法示例中主業(yè)務(wù)節(jié)點(diǎn)側(cè)的功能,所述裝置可以通過硬件實現(xiàn),也可通過硬件執(zhí)行相應(yīng)的軟件實現(xiàn)。該裝置可以包括:接收單元310、確定單元320、調(diào)用單元330、獲取單元340和重新調(diào)用單元350。
接收單元310,用于接收請求方設(shè)備發(fā)送的業(yè)務(wù)請求,接收到所述業(yè)務(wù)請求的所述裝置為主業(yè)務(wù)節(jié)點(diǎn)。
確定單元320,用于確定除所述主業(yè)務(wù)節(jié)點(diǎn)之外,用于處理所述業(yè)務(wù)請求的N個從業(yè)務(wù)節(jié)點(diǎn),所述N為正整數(shù)。
調(diào)用單元330,用于根據(jù)所述業(yè)務(wù)請求和各個所述從業(yè)務(wù)節(jié)點(diǎn)用于執(zhí)行的事務(wù),調(diào)用所述N個從業(yè)務(wù)節(jié)點(diǎn)分別執(zhí)行對應(yīng)的事務(wù)。
獲取單元340,用于獲取各個所述從業(yè)務(wù)節(jié)點(diǎn)的執(zhí)行結(jié)果。
重新調(diào)用單元350,用于當(dāng)存在執(zhí)行失敗的從業(yè)務(wù)節(jié)點(diǎn)時,根據(jù)所述預(yù)設(shè)重試策略重新調(diào)用所述執(zhí)行失敗的從業(yè)務(wù)節(jié)點(diǎn)執(zhí)行對應(yīng)的事務(wù)。
綜上所述,本實施例提供的裝置,通過主業(yè)務(wù)節(jié)點(diǎn)在獲取到各個從業(yè)務(wù)節(jié)點(diǎn)的執(zhí)行結(jié)果之后,若存在執(zhí)行失敗的從業(yè)務(wù)節(jié)點(diǎn),則主業(yè)務(wù)節(jié)點(diǎn)根據(jù)預(yù)設(shè)重試策略重新調(diào)用執(zhí)行失敗的從業(yè)務(wù)節(jié)點(diǎn)執(zhí)行對應(yīng)的事務(wù);一方面,采用異步方式執(zhí)行事務(wù)并提交業(yè)務(wù)數(shù)據(jù),解決了2PC方案采用同步方式提交業(yè)務(wù)數(shù)據(jù)導(dǎo)致資源長期占用無法釋放的問題,使得數(shù)據(jù)庫資源能夠被更為合理有效地利用;另一方面,當(dāng)事務(wù)執(zhí)行失敗時,根據(jù)預(yù)設(shè)重試策略重新執(zhí)行該事務(wù),由于重新執(zhí)行的處理邏輯與首次執(zhí)行的處理邏輯均為正向邏輯,無需配置反向的取消處理邏輯,解決了TCC方案因需要實現(xiàn)大量取消處理邏輯,而導(dǎo)致軟件系統(tǒng)的開發(fā)成本較高的問題,減少了軟件系統(tǒng)的開發(fā)成本,也提高了業(yè)務(wù)請求的成功率。
其中,接收單元310的具體功能可參見上述方法示例中步驟201的相關(guān)內(nèi)容;確定單元320的具體功能可參見上述方法示例中步驟203的相關(guān)內(nèi)容;調(diào)用單元330的具體功能可參見上述方法示例中步驟204的相關(guān)內(nèi)容;獲取單元340的具體功能可參見上述方法示例中步驟206的相關(guān)內(nèi)容;重新調(diào)用單元350的具體功能可參見上述方法示例中步驟208的相關(guān)內(nèi)容。
可選地,如圖3B所示,所述裝置還包括:統(tǒng)計單元360和更新單元370。
統(tǒng)計單元360,用于統(tǒng)計每一個錯誤類型和重試方法的組合所對應(yīng)的成功率;其中,目標(biāo)組合是指目標(biāo)錯誤類型和目標(biāo)重試方法的組合,所述目標(biāo)組合所對應(yīng)的成功率是指因所述目標(biāo)錯誤類型而采用所述目標(biāo)重試方法重新執(zhí)行事務(wù)的總次數(shù)中執(zhí)行成功的次數(shù)與所述總次數(shù)的比值。
更新單元370,用于根據(jù)各個所述組合所對應(yīng)的成功率,更新各種錯誤類型所對應(yīng)的重試方法集合中的每一種重試方法的優(yōu)先級。
統(tǒng)計單元360和更新單元370的具體功能可參見上述方法示例中的相關(guān)內(nèi)容。
在基于圖3A所示實施例提供的另一可選實施例中,如圖3C所示,所述裝置還包括:同步執(zhí)行單元312。
同步執(zhí)行單元312,用于根據(jù)所述業(yè)務(wù)請求,執(zhí)行所述主業(yè)務(wù)節(jié)點(diǎn)對應(yīng)的事務(wù)。同步執(zhí)行單元312的具體功能可參見上述方法示例中步驟402的相關(guān)內(nèi)容。
所述調(diào)用單元330,還用于當(dāng)所述主業(yè)務(wù)節(jié)點(diǎn)執(zhí)行成功時,則執(zhí)行所述根據(jù)所述業(yè)務(wù)請求和各個所述從業(yè)務(wù)節(jié)點(diǎn)用于執(zhí)行的事務(wù),調(diào)用所述N個從業(yè)務(wù)節(jié)點(diǎn)分別執(zhí)行對應(yīng)的事務(wù)的步驟。
可選地,所述裝置還包括:發(fā)送單元314。
發(fā)送單元314,用于當(dāng)所述主業(yè)務(wù)節(jié)點(diǎn)執(zhí)行失敗時,向所述請求方設(shè)備發(fā)送失敗響應(yīng)。
在基于圖3A所示實施例提供的另一可選實施例中,如圖3D所示,所述裝置還包括:異步執(zhí)行單元332。
異步執(zhí)行單元332,用于在調(diào)用所述N個從業(yè)務(wù)節(jié)點(diǎn)分別執(zhí)行對應(yīng)的事務(wù)的過程中,根據(jù)所述業(yè)務(wù)請求執(zhí)行所述主業(yè)務(wù)節(jié)點(diǎn)對應(yīng)的事務(wù)。
可選地,所述裝置還包括:重新執(zhí)行單元334。
重新執(zhí)行單元334,用于當(dāng)所述主業(yè)務(wù)節(jié)點(diǎn)執(zhí)行失敗時,根據(jù)所述預(yù)設(shè)重試策略重新執(zhí)行所述主業(yè)務(wù)節(jié)點(diǎn)對應(yīng)的事務(wù)。
圖4A是本發(fā)明另一實施例提供的分布式事務(wù)處理裝置的框圖。該裝置是位于分布式系統(tǒng)中的一個業(yè)務(wù)節(jié)點(diǎn)。該裝置具有實現(xiàn)上述方法示例中從業(yè)務(wù)節(jié)點(diǎn)側(cè)的功能,所述裝置可以通過硬件實現(xiàn),也可通過硬件執(zhí)行相應(yīng)的軟件實現(xiàn)。該裝置可以包括:接收單元410、處理單元420和發(fā)送單元430。
接收單元410,用于接收主業(yè)務(wù)節(jié)點(diǎn)發(fā)送的調(diào)用請求。其中,所述主業(yè)務(wù)節(jié)點(diǎn)是指所述分布式系統(tǒng)中接收到請求方設(shè)備發(fā)送的業(yè)務(wù)請求的一個業(yè)務(wù)節(jié)點(diǎn),所述裝置是所述主業(yè)務(wù)節(jié)點(diǎn)確定的用于處理所述業(yè)務(wù)請求的多個從業(yè)務(wù)節(jié)點(diǎn)中的一個。所述調(diào)用請求是所述主業(yè)務(wù)節(jié)點(diǎn)已調(diào)用所述從業(yè)務(wù)節(jié)點(diǎn)執(zhí)行對應(yīng)的事務(wù),但判定所述從業(yè)務(wù)節(jié)點(diǎn)執(zhí)行失敗后根據(jù)預(yù)設(shè)重試策略再次發(fā)送的。
處理單元420,用于根據(jù)所述調(diào)用請求,執(zhí)行所述裝置對應(yīng)的事務(wù)。
發(fā)送單元430,用于向所述主業(yè)務(wù)節(jié)點(diǎn)發(fā)送執(zhí)行結(jié)果。
綜上所述,本實施例提供的裝置,通過主業(yè)務(wù)節(jié)點(diǎn)在判定從業(yè)務(wù)節(jié)點(diǎn)執(zhí)行對應(yīng)的事務(wù)失敗后根據(jù)預(yù)設(shè)重試策略再次向從業(yè)務(wù)節(jié)點(diǎn)發(fā)送調(diào)用請求,從業(yè)務(wù)節(jié)點(diǎn)根據(jù)該調(diào)用請求,再次執(zhí)行從業(yè)務(wù)節(jié)點(diǎn)對應(yīng)的事務(wù);一方面,采用異步方式執(zhí)行事務(wù)并提交業(yè)務(wù)數(shù)據(jù),解決了2PC方案采用同步方式提交業(yè)務(wù)數(shù)據(jù)導(dǎo)致資源長期占用無法釋放的問題,使得數(shù)據(jù)庫資源能夠被更為合理有效地利用;另一方面,當(dāng)事務(wù)執(zhí)行失敗時,根據(jù)預(yù)設(shè)重試策略重新執(zhí)行該事務(wù),由于重新執(zhí)行的處理邏輯與首次執(zhí)行的處理邏輯均為正向邏輯,無需配置反向的取消處理邏輯,解決了TCC方案因需要實現(xiàn)大量取消處理邏輯,而導(dǎo)致軟件系統(tǒng)的開發(fā)成本較高的問題,減少了軟件系統(tǒng)的開發(fā)成本,也提高了業(yè)務(wù)請求的成功率。
在基于圖4A所示實施例提供的一個可選實施例中,所述調(diào)用請求中包括目標(biāo)重試方法,所述目標(biāo)重試方法是根據(jù)所述裝置在上一次執(zhí)行失敗時的錯誤類型確定的。
所述處理單元420,具體用于:根據(jù)所述調(diào)用請求,采用所述目標(biāo)重試方法執(zhí)行所述裝置對應(yīng)的事務(wù)。
在基于圖4A所示實施例提供的另一可選實施例中,所述調(diào)用請求中還包括:根據(jù)所述業(yè)務(wù)請求和所述裝置用于執(zhí)行的事務(wù)所生成的事務(wù)消息,以及所述事務(wù)消息的標(biāo)識。
如圖4B所示,所述裝置還包括:檢測單元440。
檢測單元440,用于檢測是否存儲有與所述標(biāo)識相對應(yīng)的執(zhí)行結(jié)果。
所述發(fā)送單元430,還用于當(dāng)已存儲有與所述標(biāo)識相對應(yīng)的執(zhí)行結(jié)果且所述執(zhí)行結(jié)果為執(zhí)行成功時,向所述主業(yè)務(wù)節(jié)點(diǎn)發(fā)送與所述標(biāo)識相對應(yīng)的執(zhí)行結(jié)果。
有關(guān)各個單元的具體功能可參見上述方法示例中的相關(guān)內(nèi)容,本實施例對此不作贅述。
本發(fā)明一示例性實施例還提供了一種分布式事務(wù)處理系統(tǒng),該分布式系統(tǒng)包括:如圖3A所示實施例或基于圖3A所示實施例提供的任一可選實施例所提供的分布式事務(wù)處理裝置,以及,如圖4A所示實施例或基于圖4A所示實施例提供的任一可選實施例所提供的分布式事務(wù)處理裝置。
需要說明的是,上述實施例提供的裝置在實現(xiàn)其功能時,僅以上述各功能模塊的劃分進(jìn)行舉例說明,實際應(yīng)用中,可以根據(jù)需要而將上述功能分配由不同的功能模塊完成,即將設(shè)備的內(nèi)部結(jié)構(gòu)劃分成不同的功能模塊,以完成以上描述的全部或者部分功能。另外,上述實施例提供的裝置與方法實施例屬于同一構(gòu)思,其具體實現(xiàn)過程詳見方法實施例,這里不再贅述。
上述主要從業(yè)務(wù)節(jié)點(diǎn)的角度對本發(fā)明實施例提供的方案進(jìn)行了介紹。可以理解的是,業(yè)務(wù)節(jié)點(diǎn)為了實現(xiàn)上述功能,其包含了執(zhí)行各個功能相應(yīng)的硬件結(jié)構(gòu)和/或軟件模塊。結(jié)合本發(fā)明中所公開的實施例描述的各示例的模塊及算法步驟,本發(fā)明實施例能夠以硬件或硬件和計算機(jī)軟件的結(jié)合形式來實現(xiàn)。某個功能究竟以硬件還是計算機(jī)軟件驅(qū)動硬件的方式來執(zhí)行,取決于技術(shù)方案的特定應(yīng)用和設(shè)計約束條件。本領(lǐng)域技術(shù)人員可以對每個特定的應(yīng)用來使用不同的方法來實現(xiàn)所描述的功能,但是這種實現(xiàn)不應(yīng)認(rèn)為超出本發(fā)明實施例的技術(shù)方案的范圍。
圖5是根據(jù)一示例性實施例示出的一種業(yè)務(wù)節(jié)點(diǎn)的結(jié)構(gòu)示意圖。例如,該業(yè)務(wù)節(jié)點(diǎn)可以是服務(wù)器,用于實現(xiàn)上述方法示例的功能。業(yè)務(wù)節(jié)點(diǎn)500可以包括:發(fā)射器/接收器501和處理器502。
發(fā)射器/接收器501用于支持業(yè)務(wù)節(jié)點(diǎn)500與外部設(shè)備之間收發(fā)信息。處理器502用于實現(xiàn)業(yè)務(wù)節(jié)點(diǎn)500的各項功能,比如上文介紹的業(yè)務(wù)受理器、事務(wù)管理器和事務(wù)處理器的各項功能。所述處理器502還用于執(zhí)行上述圖2、圖3和圖4A所示實施例中的各個步驟,或者本發(fā)明所描述的技術(shù)方案的其它步驟。
進(jìn)一步地,業(yè)務(wù)節(jié)點(diǎn)500還可以包括存儲器503,存儲器503用于存儲業(yè)務(wù)節(jié)點(diǎn)500的程序代碼和數(shù)據(jù)。
此外,業(yè)務(wù)節(jié)點(diǎn)500還可以包括總線504。所述存儲器503和所述發(fā)射器/接收器501通過總線504與所述處理器502相連。
可以理解的是,圖5僅僅示出了業(yè)務(wù)節(jié)點(diǎn)500的簡化設(shè)計。在實際應(yīng)用中,業(yè)務(wù)節(jié)點(diǎn)500可以包含任意數(shù)量的發(fā)射器,接收器,處理器,存儲器等,而所有可以實現(xiàn)本發(fā)明實施例的設(shè)備都在本發(fā)明實施例的保護(hù)范圍之內(nèi)。
應(yīng)當(dāng)理解的是,在本文中提及的“多個”是指兩個或兩個以上?!昂?或”,描述關(guān)聯(lián)對象的關(guān)聯(lián)關(guān)系,表示可以存在三種關(guān)系,例如,A和/或B,可以表示:單獨(dú)存在A,同時存在A和B,單獨(dú)存在B這三種情況。字符“/”一般表示前后關(guān)聯(lián)對象是一種“或”的關(guān)系。
上述本發(fā)明實施例序號僅僅為了描述,不代表實施例的優(yōu)劣。
本領(lǐng)域普通技術(shù)人員可以理解實現(xiàn)上述實施例的全部或部分步驟可以通過硬件來完成,也可以通過程序來指令相關(guān)的硬件完成,所述的程序可以存儲于一種計算機(jī)可讀存儲介質(zhì)中,上述提到的存儲介質(zhì)可以是只讀存儲器,磁盤或光盤等。
以上所述僅為本發(fā)明的較佳實施例,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。