更多內(nèi)容請(qǐng)查看zookeeper官網(wǎng)
Zookper: 一種分布式應(yīng)用的協(xié)作服務(wù)
Zookper是一種分布式的,開(kāi)源的,應(yīng)用于分布式應(yīng)用的協(xié)作服務(wù)。它提供了一些簡(jiǎn)單的操作,使得分布式應(yīng)用可以基于這些接口實(shí)現(xiàn)諸如同步、配置維護(hù)和分集群或者命名的服務(wù)。Zookper很容易編程接入,它使用了一個(gè)和文件樹(shù)結(jié)構(gòu)相似的數(shù)據(jù)模型。可以使用Java或者C來(lái)進(jìn)行編程接入。
眾所周知,分布式的系統(tǒng)協(xié)作服務(wù)很難有讓人滿意的產(chǎn)品。這些協(xié)作服務(wù)產(chǎn)品很容易陷入一些諸如競(jìng)爭(zhēng)選擇條件或者死鎖的陷阱中。Zookper的目的就是將分布式服務(wù)不再需要由于協(xié)作沖突而另外實(shí)現(xiàn)協(xié)作服務(wù)。
設(shè)計(jì)目標(biāo) Zookeeper是簡(jiǎn)易的
Zookeeper通過(guò)一種和文件系統(tǒng)很像的層級(jí)命名空間來(lái)讓分布式進(jìn)程互相協(xié)同工作。這些命名空間由一系列數(shù)據(jù)寄存器組成,我們也叫這些數(shù)據(jù)寄存器為znodes。這些znodes就有點(diǎn)像是文件系統(tǒng)中的文件和文件夾。和文件系統(tǒng)不一樣的是,文件系統(tǒng)的文件是存儲(chǔ)在存儲(chǔ)區(qū)上的,而zookeeper的數(shù)據(jù)是存儲(chǔ)在內(nèi)存上的。同時(shí),這就意味著zookeeper有著高吞吐和低延遲。
Zookeeper實(shí)現(xiàn)了高性能,高可靠性,和有序的訪問(wèn)。高性能保證了zookeeper能應(yīng)用在大型的分布式系統(tǒng)上。高可靠性保證它不會(huì)由于單一節(jié)點(diǎn)的故障而造成任何問(wèn)題。有序的訪問(wèn)能保證客戶端可以實(shí)現(xiàn)較為復(fù)雜的同步操作。
Zookeeper是可重用的
ZooKeeper Service
組成Zookeeper的各個(gè)服務(wù)器必須要能相互通信。他們?cè)趦?nèi)存中保存了服務(wù)器狀態(tài),也保存了操作的日志,并且持久化快照。只要大多數(shù)的服務(wù)器是可用的,那么Zookeeper就是可用的。
客戶端連接到一個(gè)Zookeeper服務(wù)器,并且維持TCP連接。并且發(fā)送請(qǐng)求,獲取回復(fù),獲取事件,并且發(fā)送連接信號(hào)。如果這個(gè)TCP連接斷掉了,那么客戶端可以連接另外一個(gè)服務(wù)器。
Zookeeper是有序的
Zookeeper使用數(shù)字來(lái)對(duì)每一個(gè)更新進(jìn)行標(biāo)記。這樣能保證Zookeeper交互的有序。后續(xù)的操作可以根據(jù)這個(gè)順序?qū)崿F(xiàn)諸如同步操作這樣更高更抽象的服務(wù)。
Zookeeper是高效的
Zookeeper的高效更表現(xiàn)在以讀為主的系統(tǒng)上。Zookeeper可以在千臺(tái)服務(wù)器組成的讀寫(xiě)比例大約為10:1的分布系統(tǒng)上表現(xiàn)優(yōu)異。
數(shù)據(jù)結(jié)構(gòu)和分等級(jí)的命名空間
Zookeeper的命名空間的結(jié)構(gòu)和文件系統(tǒng)很像。一個(gè)名字和文件一樣使用/的路徑表現(xiàn),zookeeper的每個(gè)節(jié)點(diǎn)都是被路徑唯一標(biāo)識(shí)
ZooKeeper's Hierarchical Namespace
實(shí)現(xiàn)
下圖顯示了ZooKeeper服務(wù)的高級(jí)組件服務(wù)。除了請(qǐng)求處理器,Zookeeper服務(wù)器組的每個(gè)服務(wù)器復(fù)制他們自己的每個(gè)組件。
ZooKeeper Components
replicated database是一個(gè)存儲(chǔ)在內(nèi)存中的包含整個(gè)數(shù)據(jù)樹(shù)的結(jié)構(gòu)。所有的更新操作都做日志到硬盤(pán)上了。并且寫(xiě)操作在作用在數(shù)據(jù)庫(kù)的時(shí)候會(huì)序列化存儲(chǔ)到硬盤(pán)上。
每個(gè)ZooKeeper服務(wù)器都連接了許多個(gè)客戶端。客戶端連接到一個(gè)服務(wù)器來(lái)提交請(qǐng)求。