ZooKeeper 是一種分布式協(xié)調(diào)服務(wù),用于管理大型主機(jī)。在分布式環(huán)境中協(xié)調(diào)和管理服務(wù)是一個(gè)復(fù)雜的過程。ZooKeeper 通過其簡(jiǎn)單的架構(gòu)和 API 解決了這個(gè)問題。ZooKeeper 允許開發(fā)人員專注于核心應(yīng)用程序邏輯,而不必?fù)?dān)心應(yīng)用程序的分布式特性。
ZooKeeper 框架最初是在“Yahoo!"上構(gòu)建的,用于以簡(jiǎn)單而穩(wěn)健的方式訪問他們的應(yīng)用程序。 后來,Apache ZooKeeper 成為 Hadoop,HBase 和其他分布式框架使用的有組織服務(wù)的標(biāo)準(zhǔn)。 例如,Apache HBase 使用 ZooKeeper 跟蹤分布式數(shù)據(jù)的狀態(tài)。
在進(jìn)一步深入之前,我們了解關(guān)于分布式應(yīng)用的一兩件事情是很重要的。因此,讓我們開始分布式應(yīng)用的概述的快速討論。
分布式應(yīng)用可以在給定時(shí)間(同時(shí))在網(wǎng)絡(luò)中的多個(gè)系統(tǒng)上運(yùn)行,通過協(xié)調(diào)它們以快速有效的方式完成特定任務(wù)。通常來說,對(duì)于復(fù)雜而耗時(shí)的任務(wù),非分布式應(yīng)用(運(yùn)行在單個(gè)系統(tǒng)中)需要幾個(gè)小時(shí)才能完成,而分布式應(yīng)用通過使用所有系統(tǒng)涉及的計(jì)算能力可以在幾分鐘內(nèi)完成。
通過將分布式應(yīng)用配置為在更多系統(tǒng)上運(yùn)行,可以進(jìn)一步減少完成任務(wù)的時(shí)間。分布式應(yīng)用正在運(yùn)行的一組系統(tǒng)稱為集群,而在集群中運(yùn)行的每臺(tái)機(jī)器被稱為節(jié)點(diǎn)。
分布式應(yīng)用有兩部分, Server(服務(wù)器) 和 Client(客戶端) 應(yīng)用程序。服務(wù)器應(yīng)用程序?qū)嶋H上是分布式的,并具有通用接口,以便客戶端可以連接到集群中的任何服務(wù)器并獲得相同的結(jié)果。 客戶端應(yīng)用程序是與分布式應(yīng)用進(jìn)行交互的工具。
可靠性 - 單個(gè)或幾個(gè)系統(tǒng)的故障不會(huì)使整個(gè)系統(tǒng)出現(xiàn)故障。
可擴(kuò)展性 - 可以在需要時(shí)增加性能,通過添加更多機(jī)器,在應(yīng)用程序配置中進(jìn)行微小的更改,而不會(huì)有停機(jī)時(shí)間。
透明性 - 隱藏系統(tǒng)的復(fù)雜性,并將其顯示為單個(gè)實(shí)體/應(yīng)用程序。
競(jìng)爭(zhēng)條件 - 兩個(gè)或多個(gè)機(jī)器嘗試執(zhí)行特定任務(wù),實(shí)際上只需在任意給定時(shí)間由單個(gè)機(jī)器完成。例如,共享資源只能在任意給定時(shí)間由單個(gè)機(jī)器修改。
死鎖 - 兩個(gè)或多個(gè)操作等待彼此無限期完成。
不一致 - 數(shù)據(jù)的部分失敗。
Apache ZooKeeper是由集群(節(jié)點(diǎn)組)使用的一種服務(wù),用于在自身之間協(xié)調(diào),并通過穩(wěn)健的同步技術(shù)維護(hù)共享數(shù)據(jù)。ZooKeeper本身是一個(gè)分布式應(yīng)用程序,為寫入分布式應(yīng)用程序提供服務(wù)。
ZooKeeper提供的常見服務(wù)如下 :
命名服務(wù) - 按名稱標(biāo)識(shí)集群中的節(jié)點(diǎn)。它類似于DNS,但僅對(duì)于節(jié)點(diǎn)。
配置管理 - 加入節(jié)點(diǎn)的最近的和最新的系統(tǒng)配置信息。
集群管理 - 實(shí)時(shí)地在集群和節(jié)點(diǎn)狀態(tài)中加入/離開節(jié)點(diǎn)。
選舉算法 - 選舉一個(gè)節(jié)點(diǎn)作為協(xié)調(diào)目的的leader。
鎖定和同步服務(wù) - 在修改數(shù)據(jù)的同時(shí)鎖定數(shù)據(jù)。此機(jī)制可幫助你在連接其他分布式應(yīng)用程序(如Apache HBase)時(shí)進(jìn)行自動(dòng)故障恢復(fù)。
高度可靠的數(shù)據(jù)注冊(cè)表 - 即使在一個(gè)或幾個(gè)節(jié)點(diǎn)關(guān)閉時(shí)也可以獲得數(shù)據(jù)。
分布式應(yīng)用程序提供了很多好處,但它們也拋出了一些復(fù)雜和難以解決的挑戰(zhàn)。ZooKeeper框架提供了一個(gè)完整的機(jī)制來克服所有的挑戰(zhàn)。競(jìng)爭(zhēng)條件和死鎖使用故障安全同步方法進(jìn)行處理。另一個(gè)主要缺點(diǎn)是數(shù)據(jù)的不一致性,ZooKeeper使用原子性解析。
以下是使用ZooKeeper的好處:
簡(jiǎn)單的分布式協(xié)調(diào)過程
同步 - 服務(wù)器進(jìn)程之間的相互排斥和協(xié)作。此過程有助于Apache HBase進(jìn)行配置管理。
有序的消息
序列化 - 根據(jù)特定規(guī)則對(duì)數(shù)據(jù)進(jìn)行編碼。確保應(yīng)用程序運(yùn)行一致。這種方法可以在MapReduce中用來協(xié)調(diào)隊(duì)列以執(zhí)行運(yùn)行的線程。
可靠性
原子性 - 數(shù)據(jù)轉(zhuǎn)移完全成功或完全失敗,但沒有事務(wù)是部分的。
更多建議: