一個分布式系統最多只能同時滿足一致性(Consistency)、可用性(Availability)和磁區容錯性(Partition tolerance)這三項中的兩項
- 資料一致性(consistency):如果系統對一個寫操作回傳成功,那么之后的讀請求都必須讀到這個新資料;如果回傳失敗,那么所有讀操作都不能讀到這個資料,對呼叫者而言資料具有強一致性 又叫原子性 線性一致性
- 服務可用性(availability):所有讀寫請求在一定時間內得到回應,可終止、不會一直等待
- 磁區容錯性(partition-tolerance):在網路磁區的情況下,被分隔的節點仍能正常對外服務
一致性
一致性可以分為強一致性與弱一致性,
? 強一致性既復制是同步的 強一致性:系統中的某個資料被成功更新后,后續任何對改資料的讀取的操作都將得到更新后的值
? 若一致性,既復制是異步的 弱一致性:系統中的某個資料被成功更新后,后續任何對改資料的讀取的操作可能得到更新后的值,也可能是更改前的值
? 最終一致性:是弱一致性的特殊形式,存盤系統保證在沒有更新的條件下,最終所有的訪問都是最后更新的值
二階段提交------2PC
2PC(Two-phase commit protocol),中文叫二階段提交, 二階段提交是一種強一致性設計,2PC 引入一個事務協調者的角色來協調管理各參與者(也可稱之為各本地資源)的提交和回滾,二階段分別指的是準備(投票)和提交兩個階段,
參與角色
- 協調者:事務的發起者
- 參與者:事務的執行者
參與角色
- 協調者:事務的發起者
- 參與者:事務的執行者
第一階段(voting phase投票階段)():
- 協調者向所有參與者發送事務內容,詢問是否可以提交事務,并等待答復
- 各參與者執行事務操作,將 undo 和 redo 資訊記入事務日志中(但不提交事務)
- 如參與者執行成功,給協調者反饋同意,否則反饋中止
第二階段(commit phase提交執行階段):
當協調者節點從所有參與者節點獲得的相應訊息都為同意時:
- 協調者節點向所有參與者節點發出正式提交(
commit)的請求, - 參與者節點正式完成操作,并釋放在整個事務期間內占用的資源,
- 參與者節點向協調者節點發送ack完成訊息,
- 協調者節點收到所有參與者節點反饋的ack完成訊息后,完成事務,
假如在第一階段有一個參與者回傳失敗,那么協調者就會向所有參與者發送回滾事務的請求,即分布式事務執行失敗,
2PC 是一個同步阻塞協議,像第一階段協調者會等待所有參與者回應才會進行下一步操作,當然第一階段的協調者有超時機制,假設因為網路原因沒有收到某參與者的回應或某參與者掛了,那么超時后就會判斷事務失敗,向所有參與者發送回滾命令,
3PC
3PC 的出現是為了解決 2PC 的一些問題,相比于 2PC 它在參與者中也引入了超時機制,并且新增了一個階段使得參與者可以利用這一個階段統一各自的狀態,
3PC 包含了三個階段,分別是準備階段、預提交階段和提交階段,對應的英文就是:CanCommit、PreCommit 和 DoCommit,
在第一階段和第二階段中插入了一個準備階段,保證了在最后提交階段之前個參與節點的狀態是一致的
看起來是把 2PC 的提交階段變成了預提交階段和提交階段
(eg: 班長是協調者, 讓全班每個人發資訊問周末是否有時間聚餐,每個同學都給班長回復有時間,這是 班長在執行第二步, 通知全班同學在某個時間和某個地點吃飯, 同學們收到后 回復收到)
首先準備階段的變更成不會直接執行事務,而是會先去詢問此時的參與者是否有條件接這個事務,因此不會一來就干活直接鎖資源,使得在某些資源不可用的情況下所有參與者都阻塞著,
而預提交階段的引入起到了一個統一狀態的作用,它像一道柵欄,表明在預提交階段前所有參與者其實還未都回應,在預處理階段表明所有參與者都已經回應了,
3PC 就是通過引入預提交階段來使得參與者之間的狀態得到統一,也就是留了一個階段讓大家同步一下,
事務補償TCC
2PC 和 3PC 都是資料庫層面的,而 TCC 是業務層面的分布式事務,就像我前面說的分布式事務不僅僅包括資料庫的操作,還包括發送短信等,這時候 TCC 就派上用場了!
TCC 指的是Try - Confirm - Cancel,
Try 指的是預留,即資源的預留和鎖定, 注意是預留,
Confirm 指的是確認操作,這一步其實就是真正的執行了,
Cancel 指的是撤銷操作,可以理解為把預留階段的動作撤銷了,
其實從思想上看和 2PC 差不多,都是先試探性的執行,如果都可以那就真正的執行,如果不行就回滾,
比如說一個事務要執行A、B、C三個操作,那么先對三個操作執行預留動作,如果都預留成功了那么就執行確認操作,如果有一個預留失敗那就都執行撤銷動作,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/426521.html
標籤:其他
上一篇:銷售額過億的淘寶賣家是怎么運營的
