Zookeeper?無聊的知識又增加了?
hello大家好,這幾天會分享一些關于ZooKeeper相關知識點大家,因為比較多,所以會分幾個部分。1、說說 Zookeeper 是什么?直譯:從名字上直譯就是動物管理員,動物指的是 Hadoop 一類的分布式軟件,管理員三個字體現(xiàn)了 ZooKeeper 的特點:維護、協(xié)調、管理、監(jiān)控。簡述:有些軟件你想做成集群或者分布式,你可以用 ZooKeeper 幫你來輔助實現(xiàn)。特點:
最終一致性:客戶端看到的數(shù)據(jù)最終是一致的。
可靠性:服務器保存了消息,那么它就一直都存在。
實時性:ZooKeeper 不能保證兩個客戶端同時得到剛更新的數(shù)據(jù)。
獨立性(等待無關):不同客戶端直接互不影響。
原子性:更新要不成功要不失敗,沒有第三個狀態(tài)。
2、zookeeper的工作原理?
Zookeeper的核心是原子廣播,這個機制保證了各個Server之間的同步。實現(xiàn)這個機制的協(xié)議叫做Zab協(xié)議。Zab協(xié)議有兩種模式,它們 分別是恢復模式(選主)和廣播模式(同步)

epoch:可以理解為皇帝的年號,當新的皇帝leader產(chǎn)生后,將有一個新的epoch年號。
每個Server在工作過程中有三種狀態(tài):
LOOKING:當前Server不知道leader是誰,正在搜尋。
LEADING:當前Server即為選舉出來的leader。
FOLLOWING:leader已經(jīng)選舉出來,當前Server與之同步
3、描述一下 Zookeeper 的通知機制是什么?Zookeeper 允許客戶端向服務端的某個 znode 注冊一個 Watcher 監(jiān)聽,當服務端的一些指定事件觸發(fā)了這個 Watcher ,服務端會向指定客戶端發(fā)送一個事件通知來實現(xiàn)分布式的通知功能,然后客戶端根據(jù) Watcher 通知狀態(tài)和事件類型做出業(yè)務上的改變大致分為三個步驟:

client?端會對某個?znode?建立一個?watcher?事件,當該?znode?發(fā)生變化時,這些?client?會收到?zk?的通知,然后?client?可以根據(jù)?znode?變化來做出業(yè)務上的改變等。
4、Zookeeper 對節(jié)點的 watch 監(jiān)聽通知是永久的嗎?不是,一次性的。無論是服務端還是客戶端,一旦一個 Watcher 被觸發(fā), Zookeeper 都會將其從相應的存儲中移除。
這樣的設計有效的減輕了服務端的壓力,不然對于更新非常頻繁的節(jié)點,服務端會不斷的向客戶端發(fā)送事件通知,無論對于網(wǎng)絡還是服務端的壓力都非常大。
5、Zookeeper 集群中有哪些角色?

注意:在一個集群中,最少需要 3 臺。或者保證 2N + 1 臺,即奇數(shù)。為什么保證奇數(shù)?主要是為了選舉算法。6、Zookeeper 集群中Server有哪些工作狀態(tài)?

7、Zookeeper 集群中是怎樣選舉leader的?當Leader崩潰了,或者失去了大多數(shù)的Follower,這時候 Zookeeper 就進入恢復模式,恢復模式需要重新選舉出一個新的Leader,讓所有的Server都恢復到一個狀態(tài)LOOKING 。Zookeeper 有兩種選舉算法:基于 basic paxos 實現(xiàn)和基于 fast paxos 實現(xiàn)。默認為 fast paxos。8、Zookeeper 是如何保證事務的順序一致性的呢?Zookeeper 采用了遞增的事務 id 來識別,所有的 proposal (提議)都在被提出的時候加上了zxid 。zxid 實際上是一個 64 位數(shù)字
高 32 位是 epoch 用來標識 Leader 是否發(fā)生了改變,如果有新的 Leader 產(chǎn)生出來, epoch 會自增。低 32 位用來遞增計數(shù)。當新產(chǎn)生的 proposal 的時候,會依據(jù)數(shù)據(jù)庫的兩階段過程,首先會向其他的 Server 發(fā)出事務執(zhí)行請求,如果超過半數(shù)的機器都能執(zhí)行并且能夠成功,那么就會開始執(zhí)行。
9、ZooKeeper 集群中個服務器之間是怎樣通信的?Leader 服務器會和每一個 Follower/Observer 服務器都建立 TCP 連接,同時為每個Follower/Observer 都創(chuàng)建一個叫做 LearnerHandler 的實體。
LearnerHandler 主要負責 Leader 和 Follower/Observer 之間的網(wǎng)絡通訊,包括數(shù)據(jù)同步,請求轉發(fā)和 proposal 提議的投票等。
Leader 服務器保存了所有 Follower/Observer 的 LearnerHandler 。
10、Zookeeper的系統(tǒng)架構了解嗎?

ZooKeeper 的架構圖中我們需要了解和掌握的主要有如下圖:

11、Zookeeper為什么要這么設計?ZooKeeper設計的目的是提供高性能、高可用、順序一致性的分布式協(xié)調服務、保證數(shù)據(jù)最終一致性。
