ZooKeeper 是分布式協調服務,名稱寓意「管理分布式系統這座動物園的管理員」。核心設計目標:簡單(類文件系統命名空間)、一致性(複製狀態機)、有序(全局事務 ID)、高性能(讀多寫少場景)。
類 Unix 文件系統,每個節點稱為 znode,路徑唯一(如 /app/config)。znode 存儲數據(通常 <1MB)並維護版本號、ACL、統計信息。支持臨時節點(客戶端斷開自動刪除)與順序節點(自動追加單調遞增序號)。
採用 Leader-Follower 架構:
- 所有寫請求轉發給 Leader,Leader 持久化事務日誌並廣播 Proposal。
- Follower 收到後持久化並 ACK。
- Leader 收到過半 ACK 後提交,並發送 Commit。
- 讀請求直接在本地服務,極快。
保證:順序一致性、原子性、單一系統映像。
客戶端通過 TCP 長連接建立會話,心跳維持。可在節點註冊 Watch(一次性觸發器),節點數據變更、子節點變更、節點刪除時觸發通知,實現分布式通知/協調。
Yahoo 測試顯示:讀吞吐量是寫的 10 倍;7 節點集群單節點故障恢復 <200ms,吞吐量幾乎無損耗。寫性能受限於過半數持久化,適合「讀多寫少」場景。