zookeeper的讀寫流程


zookeeper的讀寫流程

基本架構

節點數要求是奇數。

常用的接口是 get/set/create/getChildren.

讀寫流程

寫流程

客戶端連接到集群中某一個節點

客戶端發送寫請求

服務端連接節點,把該寫請求轉發給leader

leader處理寫請求,一半以上的從節點也寫成功,返回給客戶端成功。

讀流程

客戶端連接到集群中某一節點

讀請求,直接返回。

故障恢復 && leader選舉

當leader down掉時。

集群暫停服務,進行leader選舉,采用fast paxos協議

首先所有server,提交自己作為leader,log的ID(epoch+1),id作用交互數據

通過比較接收的日志事務Id和自身的事務ID。

等待一個周期,確定出最新的leader。

加載snapshot,執行log。

最終一致性

讀數據時,有可能會臟讀。比較推薦watch的方式,實現數據的及時生效。

各節點數據完全一致

各節點存儲了全量的數據。

存儲策略

持久化存儲是基於內存快照(snapshot)和事務日志(txlog)來存儲。

snapshot和txlog的存儲目錄定義在zoo.cfg中,txlog存儲磁盤和snapshot存儲磁盤分開,避免io爭奪。

txlog的刷盤閾值是1000。txlog是生成snapshot之后生成。

snapshot的保存數量和清理時間間隔配置在zoo.cfg中。

時間復雜度

zookeeper 使用concurrenthashmap進行存儲。鎖的粒度是segment,減少鎖競爭,segment里對應一個hashtable 的若干桶.

所以時間復雜度都是 O(1)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM