2PC, 3PC 分布式提交協(xié)議簡述
事務(wù)
這里主要是指狹義一點(diǎn)的事務(wù)即數(shù)據(jù)庫事務(wù),事務(wù)一般含有以下一些特點(diǎn)
原子性(Atomicity): 事務(wù)全部被執(zhí)行或不被執(zhí)行
一致性(Consistency):事務(wù)在執(zhí)行事務(wù)前后纳猫,數(shù)據(jù)庫處于一致性狀態(tài)
隔離性(Isolation):指在并發(fā)環(huán)境中谈截,并發(fā)的事務(wù)是相互隔離的,一個事務(wù)的執(zhí)行不能被其他事務(wù)所打斷
持久性(Durablity):事務(wù)一旦提交毙死,則對數(shù)據(jù)庫狀態(tài)的變更是永久的
分布式事務(wù)
指的是事務(wù)的參與者扼倘,支持者的服務(wù)器除呵,資源服務(wù)器以及事務(wù)管理器分別位于分布式系統(tǒng)的不同幾點(diǎn)之上。
CAP定理
一個分布式系統(tǒng)不可能同時滿足一致性(C)纠拔,可用性(A)稠诲,分區(qū)容錯性(P)
一致性:指的是數(shù)據(jù)在多個副本中是否能夠保持一致的特性
可用性:系統(tǒng)提供的服務(wù)必須處于可用的狀態(tài)诡曙,對于用戶的每一個請求總要在有限的時間內(nèi)返回結(jié)果
分區(qū)容錯性:分布式系統(tǒng)在遇到任何網(wǎng)絡(luò)分區(qū)故障的時候,仍然需要能夠保證對外提供滿足一致性和可用性的服務(wù)
BASE理論
基本可用 (Basically Avaliable):在分布式系統(tǒng)中出現(xiàn)不可預(yù)知故障的時候劝萤,允許損失部分可用性
弱狀態(tài) (Soft state):允許系統(tǒng)中的數(shù)據(jù)存在中間狀態(tài)荠雕,并認(rèn)為該中間狀態(tài)不會印象系統(tǒng)的整體可用性
最終一致性 (Eventually consistent):系統(tǒng)中所有的副本,在經(jīng)過一段時間的同步后炸卑,最終能夠達(dá)到一個一致的狀態(tài)。五種變種:因果一致性嘱蛋、讀己之所寫、會話一致性洒敏、單調(diào)一致性、單調(diào)讀一致性
2PC與3PC
在分布式系統(tǒng)中郭毕,每一個機(jī)器節(jié)點(diǎn)雖然都能夠明確知道自己在進(jìn)行事務(wù)操作過程中的結(jié)果是成功還是失敗显押,但是卻無法直接獲取到其他分布式節(jié)點(diǎn)的操作結(jié)果
2PC 二階段提交
階段一:提交事務(wù)請求
事務(wù)詢問
協(xié)調(diào)者向所有的參與制發(fā)送事務(wù)內(nèi)容傻挂,詢問是否可以執(zhí)行事務(wù)提交操作金拒,并開始等待各參與者的響應(yīng)
執(zhí)行事務(wù)
各參與者節(jié)點(diǎn)執(zhí)行事務(wù)操作绪抛,并將Undo和Redo信息記入事務(wù)日志中
各參與者向協(xié)調(diào)者反饋事務(wù)詢問的響應(yīng)
如果參與者成功執(zhí)行了事務(wù)操作,那么就反饋給協(xié)調(diào)者Yes響應(yīng)害驹,表示事務(wù)可以執(zhí)行蛤育,反之,反饋No響應(yīng)
階段二:執(zhí)行事務(wù)提交
協(xié)調(diào)者根據(jù)參與者的反饋情況決定是否進(jìn)行事務(wù)提交操作底洗。有兩種可能性
執(zhí)行事務(wù)提交
如果協(xié)調(diào)者從所有的參與者獲得的反饋都是yes響應(yīng)咕娄,那么就會執(zhí)行事務(wù)提交
發(fā)送提交請求
協(xié)調(diào)者向所有參與者節(jié)點(diǎn)發(fā)出Commit請求
事務(wù)提交
參與者接受到Commit請求后圣勒,會正式執(zhí)行事務(wù)提交操作,并在完成提交之后釋放在整個事務(wù)執(zhí)行期間占 用的事務(wù)資源
完成事務(wù)
協(xié)調(diào)者接收到所有參與者反饋的Ack消息后挚歧,完成事務(wù)
中斷事務(wù)
任何一個參與者向協(xié)調(diào)在這反饋了No響應(yīng)吁峻,或者在等待超時后滑负,協(xié)調(diào)者尚無法接收到所有參與者的反饋響應(yīng),那么就會中斷事務(wù)
發(fā)送回滾請求
協(xié)調(diào)者向所有參與者節(jié)點(diǎn)發(fā)出Rollback請求
事務(wù)回滾
參與者接受到Rollback請求后矮慕,會利用其在階段一種記錄的Undo信息來執(zhí)行事務(wù)回滾操作帮匾,并在完成回滾后釋放在整個事務(wù)執(zhí)行期間占用的資源
反饋事務(wù)回滾結(jié)果
參與者在完成事務(wù)回滾之后痴鳄,向協(xié)調(diào)者發(fā)送Ack消息
中斷事務(wù)
協(xié)調(diào)者接收到所有參與者反饋的Ack消息后瘟斜,完成事務(wù)中斷
優(yōu)缺點(diǎn):
優(yōu)點(diǎn):原理簡單,實(shí)現(xiàn)方便
缺點(diǎn): 同步阻塞夏跷,單點(diǎn)問題,腦裂(數(shù)據(jù)不一致)槽华,太過保守
同步阻塞(所謂‘同步’,意思是在發(fā)出一個信息之后,等待有回應(yīng)才返回趟妥,同理可推‘異步’猫态;而阻塞是指程序在等待消息結(jié)果時的狀態(tài),消息結(jié)果沒返回披摄,那么當(dāng)前線程就會被吊起,同理可推‘非阻塞’)
在二階段提交的執(zhí)行階段疚膊,所有參與該事務(wù)的操作的邏輯都處于阻塞狀態(tài)
單點(diǎn)問題
在二階段中,如果協(xié)調(diào)者出現(xiàn)問題灌砖,那么整個流程將無法運(yùn)轉(zhuǎn)傀蚌。更為嚴(yán)重的是善炫,如果協(xié)調(diào)者是在階段而中出現(xiàn)問題撩幽,那么其他事務(wù)參與者將一直處于鎖定事務(wù)資源的狀態(tài)中窜醉。
數(shù)據(jù)不一致
在執(zhí)行事務(wù)提交的時候,出現(xiàn)了局部網(wǎng)絡(luò)異骋兆唬或者協(xié)調(diào)者在尚未發(fā)送完Commit請求之前吱聲發(fā)生了崩潰榨惰,導(dǎo)致只有部分參與者收到了Commit請求。一些參與者完成事務(wù)的提交擂涛,一些無法進(jìn)行事務(wù)的提交读串,整個系統(tǒng)出現(xiàn)不一致情況
太過保守
如果某些參與者出現(xiàn)故障而導(dǎo)致協(xié)調(diào)者出現(xiàn)無法獲取所有的響應(yīng)信息聊记,那么協(xié)調(diào)者就可能會依據(jù)超時機(jī)制判斷是否需要中斷事務(wù)。缺少了容錯機(jī)制恢暖,一個節(jié)點(diǎn)錯誤導(dǎo)致整個事務(wù)失敗