分布式事務(wù)管理(數(shù)據(jù)庫)
時(shí)間:2022-12-20 10:30:02 | 來源:信息時(shí)代
時(shí)間:2022-12-20 10:30:02 來源:信息時(shí)代
分布式事務(wù)管理 : 在分布式環(huán)境下采用進(jìn)程模型和服務(wù)器模型及有關(guān)協(xié)議實(shí)現(xiàn)對(duì)分布式事務(wù)的有效管理。分布式事務(wù)管理的目標(biāo)就是追求高效、可靠和并發(fā)地執(zhí)行事務(wù)。具體可描述為:維護(hù)分布式事務(wù)的ACID性質(zhì);提高系統(tǒng)的性能,包括CPU、內(nèi)存等的系統(tǒng)資源的使用效率和數(shù)據(jù)資源的使用效率,減少控制報(bào)文傳送的次數(shù),加速事務(wù)的響應(yīng)速度,降低系統(tǒng)運(yùn)行開銷; 提高系統(tǒng)可靠性和可用性,當(dāng)系統(tǒng)的一部分或者局部發(fā)生故障時(shí),系統(tǒng)仍能正常運(yùn)轉(zhuǎn),而不是整個(gè)系統(tǒng)癱瘓。
1. 分布式事務(wù)
在分布式數(shù)據(jù)庫系統(tǒng)中,任何一個(gè)應(yīng)用的請(qǐng)求最終將轉(zhuǎn)化成對(duì)數(shù)據(jù)庫的存取操作序列,將該操作序列定義為一個(gè)或幾個(gè)事務(wù)。因此,分布式事務(wù)是指分布式數(shù)據(jù)庫應(yīng)用中的事務(wù)。一個(gè)分布式事務(wù)是一個(gè)應(yīng)用中不可分割的操作序列,是用戶對(duì)數(shù)據(jù)庫存取操作序列執(zhí)行的最小單位,也遵循ACID四個(gè)特性。由于分布式系統(tǒng)的特性,一個(gè)分布式事務(wù)在執(zhí)行時(shí)將被分解為若干和各場(chǎng)地上的計(jì)算機(jī)相關(guān)的操作序列,稱之為子事務(wù)。子事務(wù)也可定義為: 一個(gè)分布式子事務(wù)是在某個(gè)場(chǎng)地上操作的集合。分布式事務(wù)是典型的嵌套類型的事務(wù)。例如,實(shí)現(xiàn)兩個(gè)賬戶間的轉(zhuǎn)賬操作的事務(wù): 設(shè)有一賬戶關(guān)系A(chǔ)CCOUNT{Acc_No,Amount},其中,Acc_No、Amount分別為賬號(hào)和金額。該關(guān)系用于存放賬戶的金額,要求實(shí)現(xiàn): 完成從貸方賬號(hào)(From_Acc)到借方賬號(hào)(To_Acc)的轉(zhuǎn)賬操作,轉(zhuǎn)賬金額為transfer amount。
假設(shè): 貸方賬戶和借方的賬目分別存在不同場(chǎng)地上,則分布執(zhí)行程序說明如下:
(1)有兩個(gè)進(jìn)程:根代理(協(xié)調(diào)進(jìn)程)ROOT和代理子進(jìn)程(AGENT1)。
(2)貸款賬目在根代理所在的場(chǎng)地上,借款賬目存在另一場(chǎng)地上。
(3)根代理進(jìn)程完成貸款處理。
(4)借款處理時(shí),由ROOT創(chuàng)建的代理子進(jìn)程(AGENT1)將參數(shù)傳給AGENT1,之后由AGENT1完成借款處理。
(5) ROOT負(fù)責(zé)全局事務(wù)的啟動(dòng)、提交或終止處理。AGENT1發(fā)生故障,ROOT將不產(chǎn)生任何效果,即貸款賬目或借款賬目均保持轉(zhuǎn)賬前的狀態(tài)。
2.分布式事務(wù)實(shí)現(xiàn)模型
為完成各個(gè)場(chǎng)地的子事務(wù),有兩種實(shí)現(xiàn)模型:
(1)進(jìn)程模型: 在相應(yīng)的場(chǎng)地上創(chuàng)建子進(jìn)程。即全局事務(wù)必須為每一子事務(wù)在相應(yīng)的場(chǎng)地上創(chuàng)建一個(gè)代理者進(jìn)程,也稱局部進(jìn)程或子進(jìn)程。同時(shí),為協(xié)調(diào)各子事務(wù)的操作,全局進(jìn)程還要啟動(dòng)一個(gè)協(xié)調(diào)者進(jìn)程,來控制和協(xié)調(diào)各代理者間的操作。
通常,發(fā)出分布式事務(wù)的場(chǎng)地稱為事務(wù)的源場(chǎng)地。在源場(chǎng)地上,每個(gè)事務(wù)有一個(gè)根代理(也稱協(xié)調(diào)者進(jìn)程),負(fù)責(zé)創(chuàng)建、啟動(dòng)和協(xié)調(diào)其他進(jìn)程。為完成事務(wù)的操作,在各場(chǎng)地上創(chuàng)建的進(jìn)程,稱為事務(wù)的代理進(jìn)程,簡(jiǎn)稱代理。進(jìn)程模型如圖1所示。子代理完成各場(chǎng)地上的子事務(wù); 根代理負(fù)責(zé)創(chuàng)建、啟動(dòng)和協(xié)調(diào)其他進(jìn)程,以完成全局事務(wù)的操作。
(2)服務(wù)器模型: 每個(gè)場(chǎng)地上創(chuàng)建有事務(wù)服務(wù)器進(jìn)程,用于執(zhí)行子事務(wù)。事務(wù)通過服務(wù)請(qǐng)求,申請(qǐng)服務(wù)器為其服務(wù)。服務(wù)器可交替地為多個(gè)事務(wù)服務(wù)。服務(wù)器模型如圖2所示。
圖2 服務(wù)器模型圖
3.分布式事務(wù)提交協(xié)議
在一個(gè)分布式事務(wù)的執(zhí)行過程中,全局事務(wù)將被分解為多個(gè)場(chǎng)地上的子事務(wù)執(zhí)行。為完成各個(gè)場(chǎng)地的子事務(wù),全局事務(wù)必須為每一子事務(wù)在相應(yīng)的場(chǎng)地上創(chuàng)建一個(gè)代理者進(jìn)程,也稱局部進(jìn)程或子進(jìn)程。同時(shí),為協(xié)調(diào)各子事務(wù)的操作,全局進(jìn)程還要啟動(dòng)一個(gè)協(xié)調(diào)者進(jìn)程,來控制和協(xié)調(diào)各代理者間的操作。協(xié)調(diào)者是在事務(wù)的各個(gè)代理中指定的一個(gè)特殊代理,負(fù)責(zé)決定所有子事務(wù)的提交或廢棄。參與者是除協(xié)調(diào)者之外的其他代理,負(fù)責(zé)各個(gè)子事務(wù)的提交或廢棄。
分布式事務(wù)的提交要求所有子事務(wù)均正確提交才能提交。為實(shí)現(xiàn)分布式事務(wù)的提交,普遍采用兩段提交(two-phase-commitment,2PC)協(xié)議。除了基本的2PC協(xié)議外,還有分布式的2PC、層次的2PC和線性的2PC協(xié)議。針對(duì)2PC協(xié)議的阻塞特性,又提出了非阻塞的提交(3PC)協(xié)議。
(1)基本的兩階段提交(2PC)協(xié)議: 基本的2PC協(xié)議是為了實(shí)現(xiàn)分布式事務(wù)提交而采用的協(xié)議。其基本內(nèi)容是,把全局事務(wù)的提交分為決定和執(zhí)行兩個(gè)階段(見圖3)。
圖3 基本的2PC協(xié)議示意圖
決定階段: 協(xié)調(diào)者向各個(gè)參與者發(fā)prepare命令,然后等待回答; 若所有的參與者返回ready信息,則該事務(wù)滿足提交條件。如果至少有一個(gè)事務(wù)返回abort消息,則該事務(wù)不能提交。
執(zhí)行階段: 在事務(wù)具備提交條件的情況下,協(xié)調(diào)者向各個(gè)參與者發(fā)commit命令,各個(gè)參與者執(zhí)行提交。否則,協(xié)調(diào)者向各個(gè)參與者發(fā)出abort命令,各個(gè)參與者執(zhí)行廢棄,取消對(duì)數(shù)據(jù)庫的修改。各參與者返回ack確認(rèn)信息,通告協(xié)調(diào)者事務(wù)執(zhí)行結(jié)束?;镜?PC協(xié)議也可用圖3直觀地顯示。
(2)非阻塞分布式事務(wù)提交(3PC)協(xié)議: 事務(wù)的阻塞是指一個(gè)場(chǎng)地上可結(jié)束的事務(wù)(提交和廢棄)的執(zhí)行,只有等到允許該事務(wù)結(jié)束的消息到來后才能完成。例如,在分布式數(shù)據(jù)庫事務(wù)處理的2PC協(xié)議中,一參與者在等待協(xié)調(diào)者的回答時(shí),由于協(xié)調(diào)者場(chǎng)地出現(xiàn)故障而沒有接收到消息,這時(shí),參與者等待超時(shí),重新向協(xié)調(diào)者發(fā)“準(zhǔn)備提交”請(qǐng)求,要求協(xié)調(diào)者給予命令。該種情況下,事務(wù)處于阻塞狀態(tài),只有等到協(xié)調(diào)者場(chǎng)地恢復(fù)正常,事務(wù)提交過程才能正常執(zhí)行。若協(xié)調(diào)者場(chǎng)地不能恢復(fù)正常,事務(wù)就一直處于掛起狀態(tài),并占用一定的系統(tǒng)資源。降低了事務(wù)的可用性。
3PC協(xié)議是在2PC協(xié)議基礎(chǔ)上,增加了一個(gè)預(yù)提交階段。在3PC協(xié)議中,第二階段為“協(xié)調(diào)者向參與者發(fā)“準(zhǔn)備提交”命令,則參與者接收命令后發(fā)“準(zhǔn)備就緒”給協(xié)調(diào)者; 第三階段為: 當(dāng)協(xié)調(diào)者收到所有參與者發(fā)來的“準(zhǔn)備就緒”命令后,再向參與者發(fā)“提交”命令。參與者收到提交命令后,即可進(jìn)行提交。
在3PC協(xié)議中,避免事務(wù)進(jìn)入阻塞狀態(tài)的策略是在參與者進(jìn)行提交之前,已經(jīng)知道其他參與者已經(jīng)進(jìn)入“準(zhǔn)備提交”狀態(tài)。這時(shí),即使協(xié)調(diào)者場(chǎng)地發(fā)生故障,在沒有收到“提交”命令情況下,每個(gè)參與者也可自行決定進(jìn)行提交和廢棄,不必進(jìn)入阻塞狀態(tài)。
3PC協(xié)議的工作過程為:
第一階段: 協(xié)調(diào)者向所有的參與者發(fā)“開始提交”報(bào)文,當(dāng)收到所有參與者發(fā)回的“同意提交”報(bào)文后,進(jìn)入第二階段;
第二階段: 協(xié)調(diào)者向所有的參與者發(fā)“準(zhǔn)備提交”報(bào)文,當(dāng)所有參與者已經(jīng)準(zhǔn)備好提交,發(fā)回“準(zhǔn)備就緒”報(bào)文,進(jìn)入第三階段; 否則,進(jìn)行廢棄處理。
第三階段:協(xié)調(diào)者收到所有的參與者發(fā)回的“準(zhǔn)備就緒”報(bào)文后,向所有參與者發(fā)“提交”報(bào)文,所有參與者收到提交報(bào)文后,即可進(jìn)行提交。
4.分布式事務(wù)管理參考模型
圖4 分布式事務(wù)管理參考模型
分布式事務(wù)管理參考模型如圖4所示。局部事務(wù)由本地事務(wù)管理器執(zhí)行,分布式事務(wù)由分布式事務(wù)管理器與局部事務(wù)管理器協(xié)同完成。具體介紹如下:
GTM(全局事務(wù)管理): 負(fù)責(zé)處理全局事務(wù)調(diào)度以及將全局事務(wù)劃分為各子事務(wù)等。
DTM(分布事務(wù)管理): 負(fù)責(zé)管理分布式事務(wù),調(diào)度子事務(wù)的執(zhí)行,保證分布式事務(wù)的原子性。
LTM(局部事務(wù)管理):負(fù)責(zé)管理DTM交付的子事務(wù)的執(zhí)行,保證子事務(wù)的原子性。
根代理向DTM發(fā)出事務(wù)開始、提交和廢棄的命令,由DTM之間協(xié)調(diào)分布式事務(wù)的執(zhí)行。根代理與DTM的接口命令原語有: 事務(wù)開始命令(begin_transaction)、事務(wù)提交命令(commit)和事務(wù)廢棄命令(abort)。
LTM之間不需要進(jìn)行通信聯(lián)系,它們執(zhí)行上層DTM發(fā)來的命令原語。DTM與LTM的接口命令原語有:局部事務(wù)開始命令(local_begin)、局部事務(wù)提交命令(local_commit)、局部事務(wù)廢棄命令(local_abort)和局部創(chuàng)建代理命令(local_creat)。