分布式事務說的的2PC、3PC、TCC是啥


2PC(Two Phase Commit)

顧名思義,二階段提交的意思。

  1. 發起事務(Prepare)
    事務的發起者提出一個請求(比如下單購買某個商品),要求其依賴的服務響應請求(比如鎖定優惠券,凍結庫存等等)
    當所有的依賴方成都回復確認之后,事務的准備階段完畢
  2. 確認/取消事務(Confirm/Cncel)
    當請求得到所有的依賴服務的確認后,事務的發起者通知所有執行者確認(confirm)事務
    如果第一步只有有一個執行者返回失敗,則取消(Cancel)事務

需要考慮的問題:

  1. 執行者如果沒有收到第二步事務,如何處理?此時執行者會一起鎖定資源等待第二步事務
    比起一直鎖定和超時confirm,更適合直接超時cancel
  2. 發起者如果第一步沒有收到回復,如何處理?此時發起者無法得知是否所有執行者都鎖定資源
    超時重試,多次超時當作失敗
  3. 發起者如果第二步沒有收到回復,如何處理?此時的發起者無法得知是否所有執行者都確認了事務
    這是一個無法回滾的異常,可能需要人工介入修復數據

3PC(Three Phase Commit)

2PC的改進版本,在Prepare階段前加了一個階段:是否可提交請求
詢問是否可以執行事務提交操作,如果執行者都返回成功響應,則進入Prepare階段,否則結束事務
這一步查詢不會加鎖,降低了反復“鎖定-釋放”的可能,提高了並發。

無論是2PC還是3PC,都無法徹底解決分布式的一致性問題。

TCC(Try-Confirm-Cancel)

TCC和2PC兩階段提交類似,2PC通常是跨庫的DB層面,T本質上是一個應用層面的2PC。
優勢在於,可以自己定義數據庫操作的精度,從而降低鎖沖突、提高吞吐量。
Try、Confirm、Cancel的縮寫,又稱補償事務,要求每個分支事務實現這三個操作。
Try,對業務系統做檢測及資源預留。和二階段中提交協議,提交請求階段類似,系統會將需要確認的資源預留、鎖定,確保確認操作一定能執行成功
Confirm,確認執行業務操作。和二階段提交協議中,提交執行階段的操作類似,指系統將最終執行操作
Cancel,取消執行業務操作。比較像二階段提交協議中的回滾操作,指系統將撤消之前預留的資源,也就是撤消已執行的預留操作對系統產生的影響


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM