Zookeeper - 簡述分布式一致性協議(2pc、3pc、paxos、zab)
阿新 • • 發佈:2017-12-30
傳遞 val 其他 中斷 可選 2pc 不一致 操作 nco
分布式一致性協議
- 二階段提交協議(2pc)
- 三階段提交協議(3pc)
- paxos
- zab
在分布式系統中,每個機器都可以確定自己進行的事務操作是否成功,但是無法直接了解其他機器的操作結果。因此,當一個分布式事務操作需要保持ACID 特性時,就需要一個“協調者”節點調度其他“參與者”節點來進行分布式事務操作。
二階段提交(2pc)
提交事務請求 -> 執行事務提交;缺點:同步阻塞(參與者之間阻塞)、單點問題,腦裂(導致數據不一致問題);主要用於關系型數據庫中,解決了分布式事務的原子性問題;
1. 提交事務請求
- 協調者向參與者發送事務,並詢問是否可以執行事務提交操作,等待參與者響應;
- 參與者執行事務,將操作寫入本地事務日誌,向協調者發送反饋;
2. 執行事務提交
參與者反饋,全部ACK
- 協調者向參與者發送Commit;
- 參與者執行事務提交,釋放事務資源,反饋ACK,;
- 協調者收到反饋完成事務
參與者反饋,存在NO;協調者等待超時
- 協調者向參與者發送RollBack;
- 參與者利用undo,進行事務回滾;
- 參與者事務回滾之後,向協調者發送ACK 反饋;
- 協調者接收到ACK,完成事務中斷;
三階段提交(3pc)
cancommit -> precommit -> docommit;優缺點:降低了參與者同步阻塞範圍,但是又引入了數據不一致性問題(若出現網絡分區)、單點問題依然存在;
1. CanCommit
- 協調者向參與者發送cancommit 請求(包含事務內容),等待參與者反饋;
- 參與者接收到cancommit 請求之後,反饋ACK或者NO;
2. PreCommit
參與者反饋,全部ACK
- 協調者向參與者發送precommit 請求,等待反饋;
- 參與者執行事務,將操作寫入本地事務日誌,向協調者發送反饋;
參與者反饋,存在NO;協調者等待超時
- 協調者向參與者發送abort 請求;
- 參與者無論是接收到abort 請求還是等待超時都會中斷事務;
3. DoCommit
參與者反饋,全部ACK
- 協調者向參與者發送docommit 請求,等待反饋;
- 參與者執行事務提交,釋放事務資源,反饋ACK,;
- 協調者接收反饋,完成事務提交;
參與者反饋,存在NO;協調者等待超時
- 協調者向參與者發送abort 請求;
- 參與者進行事務回滾;
- 參與者反饋ACK;
- 協調者接收到ACK,完成事務中斷;
paxos 算法
- paxos 基於消息傳遞並具有高度容錯性;
- paxos 算法的核心是,分布式系統如何就某個狀態(提案)達成一致;
- paxos 算法假設不存在“拜占庭將軍問題”;
- paxos 算法中的角色:proposer、acceptor、learner;
- proposer:發送提案;
- acceptor:裁決提案;只能批準一個提案;過半批準原則;
- learner:學習提案;
1. prepare 階段(生成提案)
- proposer 提出編號為Mn 的提案,向acceptor 集合發送prepare 請求;
- acceptor 反饋;
- 保證不再接收編號小於Mn 的提案;
- 返回已經批準的,編號最大的提案的Value;
- 若Mn 小於已經批準的最大編號,則忽略Mn;(優化)
- proposer 收到過半響應,則發送accept 請求(Mn,Vn)給acceptor 集合;Vn 是接收回的最大編號提案的Value;若無Value 可選(acceptor 都未接收提案),Vn 可為任意值;
2. accept 階段(批準提案)
acceptor 接收到accept 請求之後,只要Mn 不小於已接受提案最大的編號,則批準提案;
learner 獲取提案(學習策略)
- 一旦提案被批準(過半),則發送給所有learner;
- 提案批準,則發送給一個learner,該learner再發送給其他learner;
- 提案批準,則發送給一個learner集合,該learner集合再發送給其他learner;
優化
問題:proposer1 與 proposer2 兩者陷入死循環;
解決:選出主proposer,只要主proposer 和 過半acceptor 能保持正常,那麽但凡主proposer 能提出一個編號更高的提案,這個提案最終將會批準;
應用
chubby:分布式鎖、GFS 中 master 選舉
zab 協議
上一篇:Zookeeper - 簡述ZAB 協議和zookeeper
Zookeeper - 簡述分布式一致性協議(2pc、3pc、paxos、zab)