Zookeeper是一個爲分佈式應用服務的分佈式協作服務:
應用程序可以使用它的服務來同步,維護配置,分組和命名
設計目標:
- 簡潔:分佈式程序可以通過namespace協作,zookeeper的數據是存在內存中的,所以可以實現高吞吐和低冗餘
- 重複:zookeeper在一組主機(ensemble)上被複制
這些server彼此知道,Clients連在Server上,並維持一個TCP連接:發送請求、接受迴應、查看事件、發送心跳。如果一個server掉線,它的Clients會連接到別的Servers - 有序:每個zookeeper stamp更新一個代表所有交易順序的數字
- 快速:zookeeper在讀取:寫入速率 = 10:1時最快
樹狀結構:
每個節點是一個znode,由路徑標識
Znode維護了數據變更的版本號,ACL變化,時間戳
Znode裏的數據自動讀寫,讀時會獲取到所有的數據,寫時會替換所有的數據
臨時節點隨session創建和銷燬
update和watch:
客戶端可以watch znodes,當znode改變時watch會被觸發和移除
APIs:
- create:在樹中創建一個節點
- delete:刪除一個節點
- exists:測試一個節點在某地是否存在
- get data:從一個node獲取數據
- set data:給node寫數據
- get children:獲取一個節點的子節點
- sync:等待數據propagate
Replicated Database是一個在內存中幷包括整棵樹的數據庫,更新會寫入disk,寫入也會在存入內存數據庫之前序列化到disk
性能調優:
多讀少寫!