閱讀本文可以帶著下面問題:
1.zookeeper客戶端有幾部分組成?
2.那個模組管理所有網路
io的模組?
3.watcher是否允許多個
client
對乙個或多個
znode
進行監控?
4.zookeeper例項被建立時,會隨之建立幾個執行緒,各自是什麼?
5.真正處理網路
io的是那個執行緒?
模組:
我們可以認為zk的client由三個主要模組組成:zookeeper, watchermanager, clientcnxn
zookeeper是zk client端的真正介面,使用者可以操作的最主要的類,當使用者建立乙個zookeeper例項以後,幾乎所有的操作都被這個例項包辦了,使用者不用關心怎麼連線到server,watcher什麼時候被觸發等等令人傷神的問題。
watchermanager,顧名思義,它是用來管理watcher的,watcher是zk的一大特色功能,允許多個client對乙個或多個znode進行監控,當znode有變化時能夠通知到監控這個znode的各個client。watchermanager就管理了zk client繫結的所有watcher。
clientcnxn是管理所有網路io的模組,所有和zk server互動的資訊和資料都經過這個模組,包括給zk server傳送request,從zk server接受response,以及從zk server接受watcher event。clientcnxn完全管理了網路,從外部看來網路操作是透明的。
執行緒:
每當我們建立乙個zookeeper例項的時候,會有兩個執行緒被建立:sendthread和eventthread。所以當我們使用zk client端的時候應該盡量只建立乙個zookeeper例項並反覆使用。大量的建立銷毀zookeeper例項不僅會反覆的建立和銷毀執行緒,而且會在server端建立大量的session。
sendthread是真正處理網路io的執行緒
ZooKeeper原始碼分析
業餘時間學習了一下zookeeper distributed process coordination這本書的內容,對zookeeper實現的細節很好奇,所以順便把zookeeper原始碼看了一遍。看完之後想寫點內容做個筆記,確發現不好開始。由於zookeeper乙個完整的邏輯的 可能在多個執行緒,...
Zookeeper 原始碼分析 啟動
本文主要介紹了zookeeper啟動的過程 執行zkserver.sh start命令可以啟動zookeeper。入口的main函式在類中quorumpeermain。main函式主要呼叫了runfromconfig函式,建立了 quorumpeer物件,並且呼叫了start函式,從而啟動了zook...
zookeeper領導者選舉原始碼分析
基於版本3.4.13 quorumcnxmanager主要負責和其他節點資料傳輸 sendqueue 選票傳送佇列,用於儲存待傳送的選票。recvqueue 選票接收佇列,用於儲存接收到的外部投票。workerreceiver 選票接收器。其會不斷地從quorumcnxmanager中獲取其他伺服器...