更多內容請查看zookeeper官網
Zookper: 一種分布式應用的協作服務
Zookper是一種分布式的,開源的,應用於分布式應用的協作服務。它提供了一些簡單的操作,使得分布式應用可以基於這些介面實現諸如同步、配置維護和分叢集或者命名的服務。Zookper很容易編程接入,它使用了一個和檔案樹結構相似的資料模型。可以使用Java或者C來進行編程接入。
眾所周知,分布式的系統協作服務很難有讓人滿意的產品。這些協作服務供應項目很容易陷入一些諸如競爭選擇條件或者死結的陷阱中。Zookper的目的就是將分布式服務不再需要由於協作衝突而另外實現協作服務。
設計目標 Zookeeper是簡易的
Zookeeper通過一種和檔案系統很像的層級命名空間來讓分布式進程互相協同工作。這些命名空間由一系列資料寄存器組成,我們也叫這些資料寄存器為znodes。這些znodes就有點像是檔案系統中的檔案和檔案夾。和檔案系統不一樣的是,檔案系統的檔案是儲存在儲存區上的,而zookeeper的資料是儲存在記憶體上的。同時,這就意味著zookeeper有著高吞吐和低延遲。
Zookeeper實現了高效能,高可靠性,和有序的訪問。高效能保證了zookeeper能應用在大型的分布式系統上。高可靠性保證它不會由於單一節點的故障而造成任何問題。有序的訪問能保證用戶端可以實現較為複雜的同步操作。
Zookeeper是可重用的
ZooKeeper Service
組成Zookeeper的各個伺服器必須要能相互連信。他們在記憶體中儲存了伺服器狀態,也儲存了操作的日誌,並且持久化快照。只要大多數的伺服器是可用的,那麼Zookeeper就是可用的。
用戶端串連到一個Zookeeper伺服器,並且維持TCP串連。並且發送請求,擷取回複,擷取事件,並且發送串連訊號。如果這個TCP串連斷掉了,那麼用戶端可以串連另外一個伺服器。
Zookeeper是有序的
Zookeeper使用數字來對每一個更新進行標記。這樣能保證Zookeeper互動的有序。後續的操作可以根據這個順序實現諸如同步操作這樣更高更抽象的服務。
Zookeeper是高效的
Zookeeper的高效更表現在以讀為主的系統上。Zookeeper可以在千台伺服器組成的讀寫比例大約為10:1的分布系統上表現優異。
資料結構和分等級的命名空間
Zookeeper的命名空間的結構和檔案系統很像。一個名字和檔案一樣使用/的路徑表現,zookeeper的每個節點都是被路徑唯一標識
ZooKeeper's Hierarchical Namespace
實現
顯示了ZooKeeper服務的進階元件服務。除了要求處理常式,Zookeeper伺服器組的每個伺服器複製他們自己的每個組件。
ZooKeeper Components
replicated database是一個儲存在記憶體中的包含整個資料樹的結構。所有的更新操作都做日誌到硬碟上了。並且寫操作在作用在資料庫的時候會序列化儲存到硬碟上。
每個ZooKeeper伺服器都串連了許多個用戶端。用戶端串連到一個伺服器來提交請求。