[筆記] 兩階段提交2PC概念
分佈式系統若執行分佈式transaction的處理方案之一,
核心思想可分為協調者與參與者, 協調者主要負責協調參與者transaction 狀態, 並決定是否commit
協者者的任務都必須是transaction task 才適用
Pros:
- 強一致性: 全成功或是全失敗
Cons:
- 阻塞問題: 協調者等待參與者時,會阻塞, 參與者等待協調者時也會阻塞
- 單點故障: 協調者崩壞, 參與者就會永久阻塞等待
- 性能低落: 多輪等待, 且會鎖定資源, 影響吞吐量
- 擴展性差: 參與者數量多時, 協調複雜度大, 任一參與者延遲就會影響整個transaciton完成時間
適用場景:
- 一致性需求極高場景 (金流)
- 併發低的系統
狀態說明
- Prepare: 表示參與者為執行完成狀態, 但尚未commit
- Non-Prepare: 表示參與者執行失敗狀態
成功流程
- 協調者調用參與者們 各開啟一個transaction執行任務
- 協調者阻塞等待參與者執行
- 參與者ack 協調者回傳執行狀態, Pepare表示成功, Non-Prepare表示失敗
- 協者者若接收所有參與者都是 prepare, 則傳遞commit給所有參與者表示可以commit變更
- 等待參與者commit/rollback 執行完成,
- 接收完成, 結束
- 若等待不到則嘗試傳遞retry, 若依然無法應則alerting 管理者介入處理
sequenceDiagram
participant P1 as 參與者1<br/>(Participant 1)
participant P2 as 參與者2<br/>(Participant 2)
participant P3 as 參與者3<br/>(Participant 3)
Note over TC,P3: 階段一:準備階段 (Prepare Phase)
TC->>P1: PREPARE
TC->>P2: PREPARE
TC->>P3: PREPARE
Note over P1: 檢查資源<br/>鎖定資源<br/>寫入預備日誌
Note over P2: 檢查資源<br/>鎖定資源<br/>寫入預備日誌
Note over P3: 檢查資源<br/>鎖定資源<br/>寫入預備日誌
P1-->>TC: YES (準備就緒)
P2-->>TC: YES (準備就緒)
P3-->>TC: YES (準備就緒)
Note over TC: 所有參與者都回應YES<br/>決定提交事務
Note over TC,P3: 階段二:提交階段 (Commit Phase)
TC->>P1: COMMIT
TC->>P2: COMMIT
TC->>P3: COMMIT
Note over P1: 執行實際提交<br/>釋放資源<br/>寫入提交日誌
Note over P2: 執行實際提交<br/>釋放資源<br/>寫入提交日誌
Note over P3: 執行實際提交<br/>釋放資源<br/>寫入提交日誌
P1-->>TC: ACK (提交完成)
P2-->>TC: ACK (提交完成)
P3-->>TC: ACK (提交完成)
Note over TC: 事務成功完成
失敗流程
- 協調者調用參與者們 各開啟一個transaction執行任務
- 協調者阻塞等待參與者執行
- 參與者ack 協調者回傳執行狀態, Pepare表示成功, Non-Prepare表示失敗
- 協者者若接收其中之一參與者為 non-prepare, 則傳遞rollback給所有參與者
- 等待參與者rollback 執行完成,
- 接收完成, 結束
- 若等待不到則嘗試傳遞retry, 若依然無法應則alerting 管理者介入處理
sequenceDiagram participant TC as 事務協調器<br/>(Transaction Coordinator) participant P1 as 參與者1<br/>(Participant 1) participant P2 as 參與者2<br/>(Participant 2) participant P3 as 參與者3<br/>(Participant 3) Note over TC,P3: 階段一:準備階段 (Prepare Phase) TC->>P1: PREPARE TC->>P2: PREPARE TC->>P3: PREPARE Note over P1: 檢查資源<br/>鎖定資源<br/>寫入預備日誌 Note over P2: 檢查資源失敗<br/>(資源不足/衝突) Note over P3: 檢查資源<br/>鎖定資源<br/>寫入預備日誌 P1-->>TC: YES (準備就緒) P2-->>TC: NO (無法準備) P3-->>TC: YES (準備就緒) Note over TC: 有參與者回應NO<br/>決定中止事務 Note over TC,P3: 階段二:中止階段 (Abort Phase) TC->>P1: ABORT TC->>P2: ABORT TC->>P3: ABORT Note over P1: 回滾所有變更<br/>釋放資源<br/>清除預備日誌 Note over P2: 回滾所有變更<br/>釋放資源 Note over P3: 回滾所有變更<br/>釋放資源<br/>清除預備日誌 P1-->>TC: ACK (中止完成) P2-->>TC: ACK (中止完成) P3-->>TC: ACK (中止完成) Note over TC: 事務已中止