1. 程式人生 > >Zookeeper - 簡述分布式一致性協議(2pc、3pc、paxos、zab)

Zookeeper - 簡述分布式一致性協議(2pc、3pc、paxos、zab)

傳遞 val 其他 中斷 可選 2pc 不一致 操作 nco

分布式一致性協議

  • 二階段提交協議(2pc)
  • 三階段提交協議(3pc)
  • paxos
  • zab

在分布式系統中,每個機器都可以確定自己進行的事務操作是否成功,但是無法直接了解其他機器的操作結果。因此,當一個分布式事務操作需要保持ACID 特性時,就需要一個“協調者”節點調度其他“參與者”節點來進行分布式事務操作。

二階段提交(2pc)

提交事務請求 -> 執行事務提交;缺點:同步阻塞(參與者之間阻塞)、單點問題,腦裂(導致數據不一致問題);主要用於關系型數據庫中,解決了分布式事務的原子性問題;

1. 提交事務請求

  1. 協調者向參與者發送事務,並詢問是否可以執行事務提交操作,等待參與者響應;
  2. 參與者執行事務,將操作寫入本地事務日誌,向協調者發送反饋;

2. 執行事務提交

參與者反饋,全部ACK

  1. 協調者向參與者發送Commit;
  2. 參與者執行事務提交,釋放事務資源,反饋ACK,;
  3. 協調者收到反饋完成事務

參與者反饋,存在NO;協調者等待超時

  1. 協調者向參與者發送RollBack;
  2. 參與者利用undo,進行事務回滾;
  3. 參與者事務回滾之後,向協調者發送ACK 反饋;
  4. 協調者接收到ACK,完成事務中斷;

三階段提交(3pc)

cancommit -> precommit -> docommit;優缺點:降低了參與者同步阻塞範圍,但是又引入了數據不一致性問題(若出現網絡分區)、單點問題依然存在;

1. CanCommit

  1. 協調者向參與者發送cancommit 請求(包含事務內容),等待參與者反饋;
  2. 參與者接收到cancommit 請求之後,反饋ACK或者NO;

2. PreCommit

參與者反饋,全部ACK

  1. 協調者向參與者發送precommit 請求,等待反饋;
  2. 參與者執行事務,將操作寫入本地事務日誌,向協調者發送反饋;

參與者反饋,存在NO;協調者等待超時

  1. 協調者向參與者發送abort 請求;
  2. 參與者無論是接收到abort 請求還是等待超時都會中斷事務;

3. DoCommit

參與者反饋,全部ACK

  1. 協調者向參與者發送docommit 請求,等待反饋;
  2. 參與者執行事務提交,釋放事務資源,反饋ACK,;
  3. 協調者接收反饋,完成事務提交;

參與者反饋,存在NO;協調者等待超時

  1. 協調者向參與者發送abort 請求;
  2. 參與者進行事務回滾;
  3. 參與者反饋ACK;
  4. 協調者接收到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 獲取提案(學習策略)

  1. 一旦提案被批準(過半),則發送給所有learner;
  2. 提案批準,則發送給一個learner,該learner再發送給其他learner;
  3. 提案批準,則發送給一個learner集合,該learner集合再發送給其他learner;

優化

問題:proposer1 與 proposer2 兩者陷入死循環;

解決:選出主proposer,只要主proposer 和 過半acceptor 能保持正常,那麽但凡主proposer 能提出一個編號更高的提案,這個提案最終將會批準;

應用

chubby:分布式鎖、GFS 中 master 選舉

zab 協議

上一篇:Zookeeper - 簡述ZAB 協議和zookeeper

Zookeeper - 簡述分布式一致性協議(2pc、3pc、paxos、zab)