2PC必須注意的問題
創(chuàng)新互聯(lián)專注于豐潤網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠為您提供豐潤營銷型網(wǎng)站建設(shè),豐潤網(wǎng)站制作、豐潤網(wǎng)頁設(shè)計(jì)、豐潤網(wǎng)站官網(wǎng)定制、微信小程序定制開發(fā)服務(wù),打造豐潤網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供豐潤網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。
咱們上文介紹了分布式事務(wù)的常見方案、類型劃分、2PC的起源和流程。但是不幸的是2PC還是存在幾個(gè)問題:
1、全流程的同步阻塞:不管是第一階段還是第二階段,所有參與節(jié)點(diǎn)都是事務(wù)阻塞型。當(dāng)參與者占有公共資源時(shí),其他第三方訪問公共資源可能不得不處于阻塞狀態(tài)。
2、TM單點(diǎn)故障:由于全流程依賴TM的協(xié)調(diào),一旦TM發(fā)生故障。參與者會一直阻塞下去。尤其在第二階段,TM發(fā)生故障,那么所有的參與者還都處于鎖定事務(wù)資源的狀態(tài)中,而無法繼續(xù)完成事務(wù)操作。所有參與者必須等待TM重新上線(TM重新選舉)后才能繼續(xù)工作。
3、TM腦裂引起數(shù)據(jù)不一致:在第二階段中,當(dāng)TM向參與者發(fā)送commit請求之后,發(fā)生了局部網(wǎng)絡(luò)異常或者在發(fā)送commit請求過程中TM發(fā)生了故障,這會導(dǎo)致只有一部分參與者接受到了commit請求。而在這部分參與者接到commit請求之后就會執(zhí)行commit操作。但是其他部分未接到commit請求的機(jī)器則無法執(zhí)行事務(wù)提交。于是整個(gè)分布式系統(tǒng)便出現(xiàn)了數(shù)據(jù)不一致性的現(xiàn)象。
4、TM腦裂引起事務(wù)狀態(tài)不確定:TM再發(fā)出commit消息之后宕機(jī),而接收到這條消息的參與者同時(shí)也宕機(jī)了。那么即使通過選舉協(xié)議產(chǎn)生了新的TM,這條事務(wù)的狀態(tài)也是不確定的,沒人知道事務(wù)是否被已經(jīng)提交。
3PC詳解來啦
一、3PC定義
2PC是CP的剛性事務(wù),追求數(shù)據(jù)強(qiáng)一致性。但是通過我們上面分析可以得知TM腦裂可能造成數(shù)據(jù)不一致和事務(wù)狀態(tài)不確定問題。無法達(dá)到CP的完美狀態(tài)。因此業(yè)界就出現(xiàn)了3PC,用來處理TM腦裂引起的數(shù)據(jù)不一致和事務(wù)狀態(tài)不確定問題。
因?yàn)?PC是為徹底解決的2PC的數(shù)據(jù)不一致和事務(wù)狀態(tài)不確定問題而出現(xiàn)。根據(jù)這一個(gè)前提,加上筆者對3PC的理解,總結(jié)出3PC的注釋事項(xiàng):
1)3PC確保任何分支下的數(shù)據(jù)一致性
2)3PC確保任何分支最多3次握手得到最終結(jié)果(超時(shí)機(jī)制)
3)RM超時(shí)后的事務(wù)狀態(tài)必須從TM獲取。2PC只有TM的超時(shí)機(jī)制,3PC新增了參與者(RM)的超時(shí)機(jī)制,一方面輔助解決了2PC的事務(wù)/事務(wù)問題,還能降低一定的同步阻塞問題。因?yàn)門M、RM雙向超時(shí)機(jī)制,所以維基百科對3PC定義為“非阻塞”協(xié)議。
二、優(yōu)雅的3PC流程
3PC 分成3個(gè)階段:CanCommit(準(zhǔn)備階段)、PreCommit(對齊階段)、DoCommit(提交階段);筆者根據(jù)資料對3階段進(jìn)行比較合適的翻譯,非官方翻譯。
準(zhǔn)備階段:跟2PC的表決階段很類似,TM向參與者發(fā)送commit請求,參與者如果可以提交就返回Yes,否則返回No,詢問超時(shí)默認(rèn)參與者為No。唯一差別在于SQL層面:準(zhǔn)備階段只做了SQL處理,并未記錄事務(wù)日志(Undo 和Redo)
對齊階段:TM 和 各個(gè)參與者對齊事務(wù)狀態(tài),TM 通知各個(gè)參與者事務(wù)最終狀態(tài),各個(gè)參與者如果一致未收到事務(wù)對齊通知,會在超時(shí)后從TM反查事務(wù)狀態(tài)實(shí)現(xiàn)事務(wù)狀態(tài)對齊。在SQL層面:事務(wù)狀態(tài)對齊后,記錄事務(wù)日志(Undo 和Redo)
提交階段:該階段進(jìn)行真正的事務(wù)提交。根據(jù)第二階段得到的事務(wù)狀態(tài)結(jié)果,各參與者根據(jù)TM的通知命令進(jìn)行提交/abort或者超時(shí)后自動提交/abort。
下圖是筆者根據(jù)資料和個(gè)人理解整理出來的一個(gè)自認(rèn)為比較合理的3PC流程圖:
三、總結(jié)
或許3PC也不完美,網(wǎng)上有好多各版本的3PC的流程圖和解釋。有的甚至還存在明顯的問題,為3PC的理解帶來了更大的苦難。身為架構(gòu)師,就需要去追尋本質(zhì),了解3PC的前世今生,抓住3PC的本質(zhì),就很容易理解3PC了。
對于數(shù)據(jù)一致性,Google Chubby的作者M(jìn)ike Burrows說過:“there is only one consensus protocol, and that’s Paxos” – all other approaches are just broken versions of Paxos?!?/p>
譯文:世上只有一種一致性算法,那就是Paxos,所有其他一致性算法都是Paxos算法的不完整版。
更多免費(fèi)資料及視頻
分享題目:分布式架構(gòu),剛性事務(wù)-2PC必須注意的問題及3PC詳細(xì)解
分享URL:http://www.ekvhdxd.cn/article22/jcgdjc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名、關(guān)鍵詞優(yōu)化、自適應(yīng)網(wǎng)站、網(wǎng)站設(shè)計(jì)、虛擬主機(jī)、企業(yè)建站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)