zookeeper:算法
ZooKeeper是一種爲分佈式應用所設計的高可用、高性能且一致的開源協調服務,基於ZAB協議,實現一種主備模式和架構來保持集羣數據的一致性。服務器
zookeeper使得分佈式應用能夠經過一個共享的樹形結構命名空間實現協調。zookeeper將全部的數據存儲在內存中,zookeeper集羣中任何一臺機器均可以響應客戶端的讀操做,但只有一臺機器響應客戶端的寫操做,所以更適合以讀操做爲主的應用場景。架構
zookeeper中有三種角色:leader、follower、observer分佈式
zookeeper節點分爲臨時節點、持久節點、順序節點,每個節點都有stat結構,重要的功能就是watcher功能,開源客戶端:zkclient、curator性能
ZAB協議:設計
ZAB是爲zookeeper設計的原子廣播協議,借鑑Paxos算法,是一種分佈式一致性算法,保證zookeeper集羣中數據最終一致性。日誌
zab協議只容許leader處理來自客戶端的事務請求。當leader收到請求後,將事務請求轉化成事務proposal,因爲leader爲每個follower建立一個隊列,並把該事務放入響應隊列中,保證事務的順序性。以後在隊列中順序地向follower廣播該提案。follower接收到提案後,以事務的形式寫入本地日誌中,並向leader發送ack。當超過半數的follower向leader發送恢復,leader會向其餘節點發送commit消息,同時leader提交該事務。server
zab協議有故障恢復和消息廣播組成隊列
當系統啓動或leader服務器出現故障時候,進入故障恢復模式。將會開始新的選舉,選舉產生的leader與過半的follower進行數據同步。同步結束後,將進入消息廣播模式。若是檢測到有leader在廣播消息,會自動進入恢復模式。當完成與leader同步以後,進入消息廣播模式。事務