中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

分布式架構,剛性事務-2PC必須注意的問題及3PC詳細解

發布時間:2020-08-09 02:18:04 來源:ITPUB博客 閱讀:159 作者:奈學教育 欄目:軟件技術

2PC必須注意的問題

咱們上文介紹了分布式事務的常見方案、類型劃分、2PC的起源和流程。但是不幸的是2PC還是存在幾個問題:

1、全流程的同步阻塞:不管是第一階段還是第二階段,所有參與節點都是事務阻塞型。當參與者占有公共資源時,其他第三方訪問公共資源可能不得不處于阻塞狀態。

2、TM單點故障:由于全流程依賴TM的協調,一旦TM發生故障。參與者會一直阻塞下去。尤其在第二階段,TM發生故障,那么所有的參與者還都處于鎖定事務資源的狀態中,而無法繼續完成事務操作。所有參與者必須等待TM重新上線(TM重新選舉)后才能繼續工作。

3、TM腦裂引起數據不一致:在第二階段中,當TM向參與者發送commit請求之后,發生了局部網絡異常或者在發送commit請求過程中TM發生了故障,這會導致只有一部分參與者接受到了commit請求。而在這部分參與者接到commit請求之后就會執行commit操作。但是其他部分未接到commit請求的機器則無法執行事務提交。于是整個分布式系統便出現了數據不一致性的現象。

4、TM腦裂引起事務狀態不確定:TM再發出commit消息之后宕機,而接收到這條消息的參與者同時也宕機了。那么即使通過選舉協議產生了新的TM,這條事務的狀態也是不確定的,沒人知道事務是否被已經提交。

3PC詳解來啦

一、3PC定義

2PC是CP的剛性事務,追求數據強一致性。但是通過我們上面分析可以得知TM腦裂可能造成數據不一致和事務狀態不確定問題。無法達到CP的完美狀態。因此業界就出現了3PC,用來處理TM腦裂引起的數據不一致和事務狀態不確定問題。

因為3PC是為徹底解決的2PC的數據不一致和事務狀態不確定問題而出現。根據這一個前提,加上筆者對3PC的理解,總結出3PC的注釋事項:

1)3PC確保任何分支下的數據一致性
2)3PC確保任何分支最多3次握手得到最終結果(超時機制)
3)RM超時后的事務狀態必須從TM獲取。2PC只有TM的超時機制,3PC新增了參與者(RM)的超時機制,一方面輔助解決了2PC的事務/事務問題,還能降低一定的同步阻塞問題。因為TM、RM雙向超時機制,所以維基百科對3PC定義為“非阻塞”協議。

二、優雅的3PC流程

3PC 分成3個階段:CanCommit(準備階段)、PreCommit(對齊階段)、DoCommit(提交階段);筆者根據資料對3階段進行比較合適的翻譯,非官方翻譯。

準備階段:跟2PC的表決階段很類似,TM向參與者發送commit請求,參與者如果可以提交就返回Yes,否則返回No,詢問超時默認參與者為No。唯一差別在于SQL層面:準備階段只做了SQL處理,并未記錄事務日志(Undo 和Redo)

對齊階段:TM 和 各個參與者對齊事務狀態,TM 通知各個參與者事務最終狀態,各個參與者如果一致未收到事務對齊通知,會在超時后從TM反查事務狀態實現事務狀態對齊。在SQL層面:事務狀態對齊后,記錄事務日志(Undo 和Redo)

提交階段:該階段進行真正的事務提交。根據第二階段得到的事務狀態結果,各參與者根據TM的通知命令進行提交/abort或者超時后自動提交/abort。

下圖是筆者根據資料和個人理解整理出來的一個自認為比較合理的3PC流程圖:

分布式架構,剛性事務-2PC必須注意的問題及3PC詳細解

三、總結

或許3PC也不完美,網上有好多各版本的3PC的流程圖和解釋。有的甚至還存在明顯的問題,為3PC的理解帶來了更大的苦難。身為架構師,就需要去追尋本質,了解3PC的前世今生,抓住3PC的本質,就很容易理解3PC了。

對于數據一致性,Google Chubby的作者Mike Burrows說過:“there is only one consensus protocol, and that’s Paxos” – all other approaches are just broken versions of Paxos。”

譯文:世上只有一種一致性算法,那就是Paxos,所有其他一致性算法都是Paxos算法的不完整版。

更多免費資料及視頻

分布式架構,剛性事務-2PC必須注意的問題及3PC詳細解

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

湖州市| 保定市| 郓城县| 通江县| 班玛县| 通辽市| 罗平县| 海淀区| 西城区| 保德县| 兴海县| 满城县| 辽阳县| 莱西市| 临城县| 安化县| 四川省| 珲春市| 宜州市| 莱西市| 怀宁县| 广东省| 徐汇区| 襄汾县| 襄城县| 长泰县| 太保市| 长宁区| 凤阳县| 潮安县| 涟源市| 三台县| 廉江市| 濮阳市| 丁青县| 双柏县| 星子县| 东乌珠穆沁旗| 阳东县| 石棉县| 昂仁县|