ZooKeeper教學
ZooKeeper是一個分佈式協調服務來管理大量的主機。協調和管理在分佈式環境的一個服務是一個複雜的過程。ZooKeeper 簡單解決了其結構和API這個問題。ZooKeeper允許開發人員能夠專注於核心應用程序邏輯,而無需擔心應用程序的分佈式特性。
ZooKeeper框架始建於「雅虎」,一個簡單而強大的方法用於訪問應用程序。後來 Apache ZooKeeper 成爲用 Hadoop,HBase 的組織服務以及其他分佈式架構的標準。例如,Apache HBase 使用 ZooKeeper 跟蹤分佈式數據的狀態。
在進一步向前,我們知道有關分佈式應用程序的一兩件事情。所以,我們不如用分佈式應用程序來快速概覽開始討論。
分佈式應用程序
分佈式應用程序可以通過在它們之間協調以完成特定的任務,快速且有效的方式在多個系統中的網絡在給定時間(同時)運行。通常,複雜的和耗時的任務,這將需要幾個小時由非分佈式應用程序(在一個系統上運行)來完成,可以在幾分鐘內由分佈式應用程序通過使用所有所涉及的系統的計算能力來完成。
完成任務的時間可以通過配置分佈式應用到更多的系統上運行來進一步降低。一組在分佈式應用程序正在運行的系統被稱爲集羣,在羣集中運行的每臺機器被稱爲節點。
分佈式應用程序有兩部分,分別是:服務器和客戶端應用程序。服務器應用程序實際上是分佈式的,有一個共同的接口,這樣客戶端可以連接到集羣中的任何服務器,並得到同樣的結果。客戶端應用程序用一個分佈式應用程序交互工具。
分佈式應用程序的好處
可靠性 − 單個或幾個系統的故障不會使整個系統失效。
可擴展性 − 性能可以在無需停機的應用程序的微小配置變化來在需要時增加更多的機器。
透明性 − 隱藏了系統的複雜性並表現爲一個單一的實體/應用程序。
分佈式應用程序的挑戰
競爭條件 − 兩個或更多的機器試圖執行特定任務,這實際上需要將僅由一臺機器在任何給定的時間內完成。例如,共享資源只能由一臺機器在任何特定時間進行修改。
死鎖 − 兩個或更多的操作等待對方無限期完成。
不一致性 - 數據部分失敗。
Apache ZooKeeper 意味着什麼?
Apache ZooKeeper是由羣集(組節點)之間進行相互協調,並保持強大的同步技術共享數據的服務。ZooKeeper本身是一個分佈式應用寫入分佈式應用提供服務。
ZooKeeper 提供的通用服務如下-
命名服務 − 確定在一個集羣中的節點的名字。它類似於DNS,只不是過節點。
配置管理 − 系統最近加入節點和向上最新配置信息。
集羣管理 − 加入/節點的羣集和節點狀態實時離開。
節點領導者選舉 − 選舉一個節點作爲領導者協調的目的。
鎖定和同步服務 − 鎖定數據,同時修改它。這種機制可以幫助自動故障恢復,同時連接其它的分佈式應用程序。如Apache HBase。
高可靠的數據註冊表 − 一個或幾個節點的可用性的數據向下。
分佈式應用程序提供了很多好處,但他們也帶來了一些複雜的,難以破解的挑戰。ZooKeeper框架提供了完整的機制來克服所有挑戰。競爭條件和死鎖使用故障安全同步的方式進行處理。另一個主要缺點是不一致的數據,ZooKeeper 使用原子性解決。
ZooKeeper的優點
下面是使用 ZooKeeper 的好處 -
簡單的分佈式協調過程
同步 − 互斥和服務器進程之間的合作。這個過程有助於Apache HBase 的配置管理。
有序消息
序列化− 根據特定的規則進行編碼數據。確保應用程序不斷地運行。這種方法可以用來在MapReduce的協調隊列以執行正在運行的線程。
可靠性
原子性 − 數據傳輸成功或完全失敗,但沒有事務處理部分。