我眼中的ZooKeeper
ZooKeeper 是一個開放源碼的分佈式協調服務,它是集群的管理者,監視著集群中各個節點的狀態根據節點提交的反饋進行下一步合理操作。最終,將簡單易用的接口和性能高效、功能穩定的系統提供給用戶。
分佈式應用程序可以基於 Zookeeper 實現諸如數據發佈/訂閱、負載均衡、命名服務、分佈式協調/通知、集群管理、Master 選舉、分佈式鎖和分佈式隊列等功能。
Zookeeper 保證了分佈式一致性特性(5個): 順序一致性、原子性、單一視圖、可靠性、實時性(最終一致性)
ZooKeeper靈魂27連問+23個常備知識點
(1)ZooKeeper靈魂27連問
- ZooKeeper 提供了什麼?
- Zookeeper 文件系統?
- ZAB 協議?
- 四種類型的數據節點 Znode
- Zookeeper Watcher 機制 -- 數據變更通知
- 客戶端註冊 Watcher 實現
- 服務端處理 Watcher 實現
- 客戶端回調 Watcher
- ACL 權限控制機制
- Chroot 特性
- 服務器角色
- 會話管理
- Zookeeper 下 Server 工作狀態
- 數據同步
- zookeeper 是如何保證事務的順序一致性的?
- 分佈式集群中為什麼會有 Master?
- zk 節點宕機如何處理?
- zookeeper 負載均衡和 nginx 負載均衡區別
- Zookeeper 有哪幾種幾種部署模式?
- 集群最少要幾臺機器,集群規則是怎樣的?
- 集群支持動態添加機器嗎?
- Zookeeper 對節點的 watch監聽通知是永久的嗎?為什麼不是永久的?
- Zookeeper 的 java 客戶端都有哪些?
- chubby 是什麼,和 zookeeper 比你怎麼看?
- 說幾個 zookeeper 常用的命令。
- ZAB 和 Paxos 算法的聯繫與區別?
- Zookeeper 的典型應用場景?
... ....
1. ZooKeeper 提供了什麼?
- 文件系統
- 通知機制
2. Zookeeper 文件系統?
Zookeeper 提供一個多層級的節點命名空間(節點稱為 znode)。與文件系統不同的是,這些節點都可以設置關聯的數據,而文件系統中只有文件節點可以存放數據而目錄節點不行。
Zookeeper 為了保證高吞吐和低延遲,在內存中維護了這個樹狀的目錄結構,這種特性使得 Zookeeper 不能用於存放大量的數據,每個節點的存放數據上限為1M。
3. ZAB 協議?
ZAB 協議是為分佈式協調服務 Zookeeper 專門設計的一種支持崩潰恢復的原子廣播協議。
ZAB 協議包括兩種基本的模式:崩潰恢復和消息廣播。
當整個 zookeeper 集群剛剛啟動或者 Leader 服務器宕機、重啟或者網絡故障導致不存在過半的服務器與 Leader 服務器保持正常通信時,所有進程(服務器)進入崩潰恢復模式,首先選舉產生新的 Leader 服務器,然後集群中 Follower 服務器開始與新的 Leader 服務器進行數據同步,當集群中超過半數機器與該 Leader服務器完成數據同步之後,退出恢復模式進入消息廣播模式,Leader 服務器開始接收客戶端的事務請求生成事物提案來進行事務請求處理。
4. 四種類型的數據節點 Znode
- PERSISTENT-持久節點
除非手動刪除,否則節點一直存在於 Zookeeper 上
- EPHEMERAL-臨時節點
臨時節點的生命週期與客戶端會話綁定,一旦客戶端會話失效(客戶端與zookeeper 連接斷開不一定會話失效),那麼這個客戶端創建的所有臨時節點都會被移除。
- PERSISTENT_SEQUENTIAL-持久順序節點
基本特性同持久節點,只是增加了順序屬性,節點名後邊會追加一個由父節點維護的自增整型數字。
- EPHEMERAL_SEQUENTIAL-臨時順序節點
基本特性同臨時節點,增加了順序屬性,節點名後邊會追加一個由父節點維護的自增整型數字。
5. Zookeeper Watcher 機制 -- 數據變更通知
Zookeeper 允許客戶端向服務端的某個 Znode 註冊一個 Watcher 監聽,當服務端的一些指定事件觸發了這個 Watcher,服務端會向指定客戶端發送一個事件通知來實現分佈式的通知功能,然後客戶端根據 Watcher 通知狀態和事件類型做出業務上的改變。
工作機制:
- 客戶端註冊 watcher
- 服務端處理 watcher
- 客戶端回調 watcher
Watcher 特性總結:
- 一次性
無論是服務端還是客戶端,一旦一個 Watcher 被觸發,Zookeeper 都會將其從相應的存儲中移除。這樣的設計有效的減輕了服務端的壓力,不然對於更新非常頻繁的節點,服務端會不斷的向客戶端發送事件通知,無論對於網絡還是服務端的壓力都非常大。
- 客戶端串行執行
客戶端 Watcher 回調的過程是一個串行同步的過程。
- 輕量
- Watcher 通知非常簡單,只會告訴客戶端發生了事件,而不會說明事件的具體內容。
- 客戶端向服務端註冊 Watcher 的時候,並不會把客戶端真實的 Watcher 對象實體傳遞到服務端,僅僅是在客戶端請求中使用 boolean 類型屬性進行了標記。
- watcher event 異步發送 watcher 的通知事件從 server 發送到 client 是異步的,這就存在一個問題,不同的客戶端和服務器之間通過 socket 進行通信,由於網絡延遲或其他因素導致客戶端在不通的時刻監聽到事件,由於 Zookeeper 本身提供了 ordering guarantee,即客戶端監聽事件後,才會感知它所監視 znode發生了變化。所以我們使用 Zookeeper 不能期望能夠監控到節點每次的變化。Zookeeper 只能保證最終的一致性,而無法保證強一致性。
- 註冊 watcher getData、exists、getChildren
- 觸發 watcher create、delete、setData
- 當一個客戶端連接到一個新的服務器上時,watch 將會被以任意會話事件觸發。當與一個服務器失去連接的時候,是無法接收到 watch 的。而當 client 重新連接時,如果需要的話,所有先前註冊過的 watch,都會被重新註冊。通常這是完全透明的。只有在一個特殊情況下,watch 可能會丟失:對於一個未創建的 znode的 exist watch,如果在客戶端斷開連接期間被創建了,並且隨後在客戶端連接上之前又刪除了,這種情況下,這個 watch 事件可能會被丟失。
6. 客戶端註冊 Watcher 實現
- 調用 getData()/getChildren()/exist()三個 API,傳入 Watcher 對象
- 標記請求 request,封裝 Watcher 到 WatchRegistration
- 封裝成 Packet 對象,發服務端發送 request
- 收到服務端響應後,將 Watcher 註冊到 ZKWatcherManager 中進行管理
- 請求返回,完成註冊。
... ...
篇幅原因,這裡已將Zookeeper 27連問整理成如下所示的Word文檔,有需要的話可以下載整個文檔查看更方便
注意:下面的23個Zookeeper常備知識點為方便大家學習,也已整理成PDF文檔,有需要下載這些文檔的朋友可以 私信我 “文檔” 免費領取!!
(2)23個Zookeeper常備知識點
- ZooKeeper 是什麼?
- ZooKeeper 提供了什麼?
- Zookeeper 文件系統
- 四種類型的 znode
- Zookeeper 通知機制
- Zookeeper 做了什麼?
- zk 的命名服務(文件系統)
- zk 的配置管理(文件系統、通知機制)
- Zookeeper 集群管理(文件系統、通知機制)
- Zookeeper 分佈式鎖(文件系統、通知機制)
- 獲取分佈式鎖的流程
- Zookeeper 隊列管理(文件系統、通知機制)
- Zookeeper 數據複製
- Zookeeper 工作原理
- zookeeper 是如何保證事務的順序一致性的?
- Zookeeper 下 Server 工作狀態
- zookeeper 是如何選取主 leader 的?
- 分佈式通知和協調
- 機器中為什麼會有 leader?
- zk 節點宕機如何處理?
- Zookeeper 同步流程
- zookeeper 負載均衡和 nginx 負載均衡區別
- zookeeper watch 機制
《ZooKeeper-分佈式過程協同技術詳解》
- 第一部分 Zookerper的概念和基礎
- 第二部分 使用Zookerper進行開發
- 第三部分 Zookerper的管理
為了更好地讓大家學習Zookerper和更多知識,上面說的這本《ZooKeeper-分佈式過程協同技術詳解》以及下面這本《Java核心知識整理(283頁PDF)》都可以免費分享,文末看看免費下載方式吧~
《Java核心知識整理(283頁PDF)之Zookerper》
總結一下吧
馬上就要迎來全面復工,不知道準備跳槽面試的你能否經得住面試官這ZooKeeper靈魂27連問呢?
文中提及的ZooKeeper靈魂27連問+23個常備知識點+《ZooKeeper-分佈式過程協同技術詳解》+《Java核心知識整理(283頁PDF)之Zookerper》應該可以助你一臂之力,如若有需要,那就來私信我 “文檔” 免費下載吧!!
再次提醒一下,轉發+私信 關鍵詞 “文檔” 即可免費下載!
閱讀更多 追逐仰望星空 的文章