zookeeper watch笔记
?
ZK其核心原理滿足CP,?實(shí)現(xiàn)的是最終一致性, 它只保證順序一致性.
zookeeper 基于 zxid 以及阻塞隊(duì)列的方式來實(shí)現(xiàn)請(qǐng)求的順序一致性。如果一個(gè)client連接到一個(gè)最新的 follower 上,那么它 read 讀取到了最新的數(shù)據(jù),然后 client 由于網(wǎng)絡(luò)原因重新連接到 zookeeper 節(jié)點(diǎn),而這個(gè)時(shí)候連接到一個(gè)還沒有完成數(shù)據(jù)同步的 follower 節(jié)點(diǎn),那么這一次讀到的數(shù)據(jù)不久是舊的數(shù)據(jù)嗎?
實(shí)際上 zookeeper 處理了這種情況,client 會(huì)記錄自己已經(jīng)讀取到的最大的 zxid,如果 client 重連到 server 發(fā)現(xiàn) client 的 zxid 比自己大連接會(huì)失敗
?
?
ZK 選舉機(jī)制
?
?
?
ZK選舉投票核心邏輯
?
FastLeaderElection通信使用的是ServerSocket, 沒有使用NIO/Netty.因?yàn)榧和ㄐ诺墓?jié)點(diǎn)畢竟有限.
Watch機(jī)制
?
ZooKeeper 的 Watcher 機(jī)制,總的來說可以分為三個(gè)過程:客戶端注冊(cè) Watcher、服務(wù)器處理 Watcher 和客戶端回調(diào) Watcher 客戶端注冊(cè) watcher 有 3 種方式,getData、exists、getChildren;
getData()和exists()返回節(jié)點(diǎn)的內(nèi)容,getChildren()返回子節(jié)點(diǎn)列表
?
實(shí)現(xiàn)原理
ZooKeeper 允許客戶端向服務(wù)端注冊(cè)一個(gè) Watcher 監(jiān)聽,當(dāng)服務(wù)端的一些指定事件觸發(fā)了這個(gè) Watcher,那么就會(huì)向指定客戶端發(fā)送一個(gè)事件通知來實(shí)現(xiàn)分布式的通知功能。
ZooKeeper 的 Watcher 機(jī)制主要包括客戶端線程、客戶端 WatchManager 和 ZooKeeper 服務(wù)器三部分。在具體工作流程上,簡(jiǎn)單地講,客戶端在向 ZooKeeper 服務(wù)器注冊(cè) Watcher 的同時(shí),會(huì)將 Watcher 對(duì)象存儲(chǔ)在客戶端的 WatchManager 中。當(dāng) ZooKeeper 服務(wù)器端觸發(fā) Watcher 事件后,會(huì)向客戶端發(fā)送通知,客戶端線程從 WatchManager 中取出對(duì)應(yīng)的 Watcher 對(duì)象來執(zhí)行回調(diào)邏輯。如清單 9 所示,WatchManager 創(chuàng)建了一個(gè) HashMap,這個(gè) HashMap 被用來存放 Watcher 對(duì)象。
?
?注: 以上圖片來自于咕泡mic老師課程.
?
轉(zhuǎn)載于:https://www.cnblogs.com/snow-man/p/11213404.html
總結(jié)
以上是生活随笔為你收集整理的zookeeper watch笔记的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 测试MongoDB的自动分片
- 下一篇: 花旗银行信用卡额度多少?怎么提额?