ZooKeeper的設計原理講到這基本就結束了,有興趣的朋友能夠下源代碼看看,ZooKeeper的源代碼寫的很好,很輕量級,是入門分佈式系統的絕佳材料。分佈式
最後再簡單總結一下吧:性能
(1)ZooKeeper是什麼?設計
ZooKeeper是輕量級的分佈式一致性存儲集羣系統,在集羣間的各個機器上維護一致性的數據存儲,某些機器宕機不會影響總體集羣的正常服務。server
(2)它是如何工做的blog
集羣有1個leader和多個follower組成,至於Observer筆者就不單獨說了。集羣啓動的時候每臺機器都是初始化狀態,這是啓動選舉過程,選舉出一個leader,選舉以後剩餘的機器就是follower,而後follower向leader發送註冊信息,並從leader獲取leader的存儲數據,保持和leader數據一致性。而後集羣就能夠正常服務了。get
對於讀請求,都是從本地返回數據給客戶端,所不一樣的是寫請求。it
若是寫請求REQUEST發送給leader,則leader會維護一個臨時狀態,並將寫請求做爲PROPOSAL包發給全部的follower,而後follower寫WAL日子並回復ACK包給leader,leader收集到半數以上的ACK則認爲集羣已經記錄下這個寫請求,這時候leader發送COMMIT包給follower們,follower收到COMMIT以後讓寫請求的數據在本地生效。這樣leader和follower都保存同一份寫請求數據並生效。入門
若是寫請求REQUEST發送給follower,則follower會轉發給leader,而後leader一樣開始上述過程。集羣
ZooKeeper的總流程大體就是這樣了,其實還有一款分佈式存儲系統叫Etcd,速度更快性能更好,有興趣的朋友能夠看筆者的電子書連接:原理
https://www.ituring.com.cn/book/2427