简述分布式一致性协议(2pc、3pc、paxos、zab)
分布式一致性協議
- 二階段提交協議(2pc)
- 三階段提交協議(3pc)
- paxos
- zab
在分布式系統中,每個機器都可以確定自己進行的事務操作是否成功,但是無法直接了解其他機器的操作結果。因此,當一個分布式事務操作需要保持ACID 特性時,就需要一個“協調者”節點調度其他“參與者”節點來進行分布式事務操作。
二階段提交(2pc)
提交事務請求 -> 執行事務提交;缺點:同步阻塞(參與者之間阻塞)、單點問題,腦裂(導致數據不一致問題);主要用于關系型數據庫中,解決了分布式事務的原子性問題;
1. 提交事務請求
2. 執行事務提交
參與者反饋,全部ACK
參與者反饋,存在NO;協調者等待超時
三階段提交(3pc)
cancommit -> precommit -> docommit;優缺點:降低了參與者同步阻塞范圍,但是又引入了數據不一致性問題(若出現網絡分區)、單點問題依然存在;
1. CanCommit
2. PreCommit
參與者反饋,全部ACK
參與者反饋,存在NO;協調者等待超時
3. DoCommit
參與者反饋,全部ACK
參與者反饋,存在NO;協調者等待超時
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 獲取提案(學習策略)
優化
問題:proposer1 與 proposer2 兩者陷入死循環;
解決:選出主proposer,只要主proposer 和 過半acceptor 能保持正常,那么但凡主proposer 能提出一個編號更高的提案,這個提案最終將會批準;
應用
chubby:分布式鎖、GFS 中 master 選舉
ZAB 協議
ZAB 協議
ZAB 協議是為分布式協調服務(Zookeeper)專門設計的一種支持故障恢復的原子廣播協議。
消息廣播:
故障恢復:
為保證以上兩點:
- Leader選舉:選擇ZXID 最大的節點作為Leader。
- 數據同步:leader 為每個follower 創建一個隊列,將沒有被各個follower 提交的事務 proposal填入各個隊列,并分發給follower。follower 事務同步以后,leader會將它加入到真正可用follower 列表中。
ZAB協議中兩種模式:
消息廣播和故障恢復。
當系統啟動或者leader 機器出現故障現象時,進入故障恢復模式并進行leader選舉。選舉產生的leader 會與過半的follower 進行數據同步。同步結束,退出故障恢復模式,進入消息廣播模式;任意一臺遵從ZAB協議的機器啟動后,如果檢測到leader 廣播,都會自動進入故障恢復模式與leader 進行數據同步,同步之后,進入消息廣播模式;非leader 接收到客戶端事務請求時,會轉發給leader 處理;
Leader 重新選舉條件:
Zookeeper
- zookeeper 為分布式應用提供了一個高效可靠的分布式協調服務;
- 實現依賴于ZAB 協議,實現了一種主備模式的架構來保持集群的數據一致性;
- zookeeper 可以幫助分布式應用以一個共享的樹形的命名空間實現協調;
- zookeeper 將數據全部存儲在內存中并且集群中任意一臺機器都可以響應客戶端讀操作,因此它更適合用以讀操作為主的場景;
- zookeeper 集群節點有三種角色:leader、follower、observer。
- leader:通過選舉產生的集群領導者;提供讀寫服務;
- follower:提供讀服務;參與leader 選舉和寫操作“過半寫成功”策略;
- observer:提供讀服務;不影響集群寫性能的前提下提升集群的讀性能;
- zookeeper 集群節點總數為奇數;
- zookeeper 數據節點類型:持久節點(只能采用刪除操作清除該節點)、臨時節點(其生命周期取決于session 是否失效)、順序節點(子節點順序表,節點名有數字后綴) ;
- zookeeper 每個節點都有 Stat 結構(數據節點的所有狀態信息)
- 最重要的功能:watcher;
- 開源客戶端:zkclient、curator;?
總結
以上是生活随笔為你收集整理的简述分布式一致性协议(2pc、3pc、paxos、zab)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring Cloud原理
- 下一篇: 分布式理论(七): 一致性协议之 ZAB