四大分布式事務方案詳解
分布式事務在分布式系統經常遇見,也是大廠經??疾斓膬热荩旅嫖揖椭攸c詳解四大主流分布式事務方案@mikechen
分布式事務
分布式事務是指涉及多個參與者,通常是不同的計算機節點或服務的事務操作,因此需要跨多個節點執行事務操作。
如下圖所示:
圖片
分布式事務需要確保所有相關操作要么全部成功執行,要么全部回滾,以維護數據的一致性和可靠性。
分布式事務解決方案
常見的分布式事務解決方案,主要包含有以下四種:
兩階段提交協議
兩階段提交協議,Two-Phase Commit,簡稱是2PC,該協議包括:準備和提交兩個階段。
如下圖所示:
圖片
1.準備階段
協調者向所有參與者發送準備請求,參與者執行事務準備,并向協調者發送準備就緒的通知。
2.提交階段
如果所有參與者都準備就緒,則協調者向所有參與者發送提交請求,參與者執行事務提交。
如果所有參與者都成功提交了事務,則事務成功完成。
否則,如果任何一個參與者失敗或者無法提交,則所有參與者都會被要求回滾(Rollback)事務,以保持一致性。
2PC的優點是簡單易懂,并且在理想情況下能夠保證分布式系統中事務的原子性和一致性。
兩階段有如下幾個缺點:
1.阻塞問題
在2PC的準備階段,協調者需要等待所有參與者的響應,這可能會導致整個系統的阻塞。
2.單點故障
在2PC中,協調者是一個單點,它負責協調所有參與者的操作。
如果協調者發生故障,那么整個事務可能會無法完成,即使參與者的大部分已經準備好了,這種單點故障會影響系統的可用性和可靠性。
3.數據不一致性
2PC無法處理所有故障情況,例如:協調者和參與者之間的網絡分區或者通信失敗。
在這種情況下,可能會出現數據不一致性,一些參與者已經提交了事務,而另一些參與者卻未收到提交指令,導致系統狀態混亂。
三階段提交協議
三階段提交協議,Three-phase commit, 簡稱是3PC,3PC是2PC的改進版。
如下圖所示:
圖片
3PC的主要思想是引入一個【預提交階段】,以減輕2PC中的阻塞問題,同時保持原子性和一致性。
3PC,主要分為三個階段:
1.預提交階段
協調者詢問參與者是否可以提交事務,并等待它們的響應,如果所有參與者都同意,則進入下一階段。
2.提交階段
協調者向所有參與者發送提交請求,要求它們提交事務,如果任何參與者無法提交,則執行回滾。
3.確認階段
協調者向所有參與者發送確認消息,告知它們事務已經提交,這一階段用于解決2PC中的阻塞問題。
3PC相較于2PC的優點是在第一階段引入了一個“詢問”階段,避免了2PC的直接準備階段可能出現的長時間阻塞問題。
兩階段與三階段對比,如下圖所示:
圖片
補償事務
TCC(Try-Confirm-Cancel)是一種補償性事務處理模式,用于實現分布式系統中的一致性操作。
如下圖所示:
圖片
TCC模式通過三個階段的操作來確保事務的一致性:嘗試(Try)、確認(Confirm)和取消(Cancel)。
1.嘗試階段(Try)
在嘗試階段,系統會嘗試執行事務操作的所有必要檢查和準備工作,以確保事務能夠成功執行。
這包括檢查資源的可用性、鎖定所需資源等,如果所有的檢查都通過,系統會記錄下所有的嘗試操作,但并不會實際執行事務。
2.確認階段(Confirm)
在確認階段,系統會執行事務操作,并且確認之前所做的嘗試操作。
如果事務操作成功執行,系統將確認并提交事務,在這個階段,系統會持久化事務的結果,確保事務的最終執行。
3.取消階段(Cancel)
如果在嘗試階段或者確認階段發生了錯誤或者異常情況,系統將進入取消階段。
在這個階段,系統會執行逆向操作,取消之前嘗試階段所做的操作,這樣可以確保系統的狀態回滾到事務開始之前的狀態,以維持數據的一致性。
TCC模式允許開發人員在每個階段都定義自己的業務邏輯和補償操作,以適應不同的業務需求。
但是,TCC模式要求開發人員在每個階段都顯式定義業務邏輯和補償操作,這增加了系統的復雜性和開發成本,需要設計和維護每個階段的邏輯,并確保它們之間的一致性。
最終一致性
最終一致性是分布式系統中的一種一致性模型,它允許數據副本在一段時間內的狀態之間存在不一致,但最終將會達到一致的狀態。
如下圖所示:
圖片
在最終一致性模型中,節點之間的數據同步通常是通過消息傳遞來實現的。
當一個節點的數據發生變化時,它會通過異步方式將消息發送給其他節點,由于消息傳遞是異步的,因此節點之間的數據同步可能會有一定的延遲。
因此,最終一致性模型允許節點之間的數據副本,在一段時間內存在不一致,但最終會收斂到一致的狀態。
































