zookeeper設計上易於編碼,數據模型構建在我們熟悉的樹形結構目錄風格的文件系統中。
zookeeper運行在java中,同時支持java和C 語言。正確的實現協調服務是公認的難干的差事。 他們及其容易出錯,比如資源競爭和死鎖.
zookeeper命名空間由數據寄存器組成,zookeeper中,我們稱他為,znodes, 這跟文件和目錄非常類似..
不像一個典型的文件系統,其設計時就是為了存儲數據.而zookeeper 數據是保存在內存中的,這也就意味着zookeeper能實現一個高吞吐量和低延遲.(因為內存操作效率高)
zookeeper是有副本的, 就像分布式的處理協調服務一樣,zookeeper 本身就打算在服務器集群中使用副本機制,我們稱之為全體.

組成zookeeper 服務的所有機器節點互相之間都必須感知到對方. 他們維護着當前機器狀態的內存快照,有事務日志和持久化存儲的快照.
客戶端連接到其中一台zookeeper服務器,客戶端和zookeeper服務器保持一個tcp連接,通過tcp連接發送請求獲得響應,
獲取事件監聽,發送心跳等等. 如果TCP連接被中斷了,客戶端會連接到另外一台zookeeper服務器.
zookeeper是有序的, zookeeper給每一次更新操作都賦予一個編號,他這個編號反應了對zookeeper的事務性修改順序.
隨后的操作能夠使用這一順序去實現更高級別的抽象,比如同步原語.

節點和臨時節點
不像標准的文件系統,zookeeper 命名空間中的每個節點能夠有數據關聯,也有子節點.
就好比是文件系統中一個文件對象即可以是一個文件也可以是一個文件夾.(zookeeper被設計用來存儲協調數據:
狀態信息,配置信息,位置信息等等, 因此數據存儲在每個節點中通常非常小,從幾個字節到幾千字節之間),
我們使用znode這個術語來使得我們討論zookeeper數據節點相關內容時語義更加清晰明確.
znode管理着包含這一個狀態結構數據,它包含數據修改的版本號,ACL修改及時間戳, 允許緩存校驗和協調更新.
znode數據每修改一次,版本號加一. 舉個實際的例子,每次客戶端收到數據的同時,也收到當前數據的版本號.
zookeeper 也有會話級別的節點的語義支持,這些znode節點隨着會話的創建而激活,會話的結束的時候節點被刪除.
條件更新和監聽
zookeeper支持監聽, 客戶端能夠設置監聽znode節點. 當znode節點變更時可能觸發或者移除監聽.當監聽事件被觸發了,
客戶端將會收到數據通知包,告訴客戶端節點數據被修改了. 同時如果當前客戶端和zookeeper節點的連接被斷開了.
zookeeper的保證
zookeeper 簡單而性能優異. 由於他簡單快速的目標,他成為構建許多更加復雜服務的基礎,比如同步服務,他提供了一系列的保證.
1 順序一致性: 來自客戶端的更新操作將會按照順序被作用.
2 原子性操作: 更新要么全部成功,要么全部失敗,沒有部分的結果.
3 統一的系統鏡像: 無論客戶端鏈接的是哪台服務器,都能獲得同樣的服務視圖,也就是說他是無狀態的.
4 可靠性保證: 一旦寫入操作被執行(作用到服務器),這個狀態將會被持久化,直到其他客戶端的修改生效.
5 時間線特性:客戶端訪問服務器系統鏡像能在一個特定時間訪問內保證當前系統是實時更新的
簡單的操作API
zookeeper的設計原則之一就是提供簡單的編程接口. 因此,他僅僅提供了以下幾個操作.

使用情況
zookeeper的編程接口 設計的非常簡單,但是用這些能實現一些其他更高級別的操作,比如同步原語,對成員進行分組和選舉等等.
性能
zookeeper 被設計的號稱高性能框架,但是事實情況如何呢?
來自雅虎的zookeeper開發團隊的研究證明了這點.
(可以查看下zookeeper 吞吐量隨着讀寫比例變化的圖表,即上圖)
在讀占主要比例的應用中,性能尤佳,因為寫操作涉及到服務器之間狀態的同步.尤其是在協調服務這個典型案例中表現的尤其突出.
zookeeper 吞吐量和讀寫比例的變化關系用的是zookeeper3.2版本,運行在 雙核 2Ghz 及SATA 15k RPM 處理器配置的服務器中.
其中一個負責zookeeper 日志設備. 快照信息寫入操作系統驅動中.
寫入請求是1Kb寫入, 讀請求也是1kb的寫入(讀寫單元都是1Kb).
servers 標示着 整個zookeeper的集群大小, 即組成zookeeper服務的服務器數.
可靠性
為了展示下,我們系統隨着時間的推移及錯誤出現,我們運行了一個一個由7個機器組成的zookeeper服務中,我們使用和此前一樣飽和度的基准測試,
這個圖中有幾個比較關鍵的觀測點.首先,如果從節點失敗並快速恢復了,即使從節點失敗了,zookeeper仍然能夠承受住一個比較高的吞吐量.
但是,更為重要的一點事,leader節點的選舉算法 能讓系統快速恢復,防止吞吐量在短時間內迅速降低.觀察發現, zookeeper能在200毫秒內選舉出新的leader節點,
zookeeper 項目
zookeeper 已經在許多企業級應用中獲得成功,雅虎內部使用zookeeper 進行協調和失敗恢復服務,及消息中間人服務
他管理成千上萬個消息主題,可以實現副本和數據傳輸的功能.
zookeeper在雅虎內部還用於數據抓取服務,即網絡爬蟲,同時致力於失敗恢復.