Zookeeper 概述

2021-01-22 14:27 更新

ZooKeeper 是一種分布式協(xié)調(diào)服務(wù),用于管理大型主機。在分布式環(huán)境中協(xié)調(diào)和管理服務(wù)是一個復雜的過程。ZooKeeper 通過其簡單的架構(gòu)和 API 解決了這個問題。ZooKeeper 允許開發(fā)人員專注于核心應(yīng)用程序邏輯,而不必擔心應(yīng)用程序的分布式特性。

ZooKeeper 框架最初是在“Yahoo!"上構(gòu)建的,用于以簡單而穩(wěn)健的方式訪問他們的應(yīng)用程序。 后來,Apache ZooKeeper 成為 Hadoop,HBase 和其他分布式框架使用的有組織服務(wù)的標準。 例如,Apache HBase 使用 ZooKeeper 跟蹤分布式數(shù)據(jù)的狀態(tài)。

在進一步深入之前,我們了解關(guān)于分布式應(yīng)用的一兩件事情是很重要的。因此,讓我們開始分布式應(yīng)用的概述的快速討論。

分布式應(yīng)用

分布式應(yīng)用可以在給定時間(同時)在網(wǎng)絡(luò)中的多個系統(tǒng)上運行,通過協(xié)調(diào)它們以快速有效的方式完成特定任務(wù)。通常來說,對于復雜而耗時的任務(wù),非分布式應(yīng)用(運行在單個系統(tǒng)中)需要幾個小時才能完成,而分布式應(yīng)用通過使用所有系統(tǒng)涉及的計算能力可以在幾分鐘內(nèi)完成。

通過將分布式應(yīng)用配置為在更多系統(tǒng)上運行,可以進一步減少完成任務(wù)的時間。分布式應(yīng)用正在運行的一組系統(tǒng)稱為集群,而在集群中運行的每臺機器被稱為節(jié)點

分布式應(yīng)用有兩部分, Server(服務(wù)器)  Client(客戶端) 應(yīng)用程序。服務(wù)器應(yīng)用程序?qū)嶋H上是分布式的,并具有通用接口,以便客戶端可以連接到集群中的任何服務(wù)器并獲得相同的結(jié)果。 客戶端應(yīng)用程序是與分布式應(yīng)用進行交互的工具。

Zookeeper 概述

ZooKeeper 是一個分布式協(xié)調(diào)服務(wù)的開源框架。主要用來解決分布式集群中應(yīng)用系統(tǒng)的一致性的問題,例如怎樣避免同時操作同一數(shù)據(jù)造成臟讀的問題。ZooKeeper 本質(zhì)上是一個分布式的小文件存儲系統(tǒng)。提供基于類似于文件系統(tǒng)的目錄樹方式的數(shù)據(jù)存儲,并且可以對樹種 的節(jié)點進行有效管理。從而來維護和監(jiān)控你存儲的數(shù)據(jù)的狀態(tài)變化。將通過監(jiān)控這些數(shù)據(jù)狀態(tài)的變化,從而可以達到基于數(shù)據(jù)的集群管理。諸如:統(tǒng)一命名服務(wù)(dubbo)、分布式配置管理(solr的配置集中管理)、分布式消息隊列(sub/pub)、分布式鎖、分布式協(xié)調(diào)等功能。

Zookeeper 架構(gòu)圖

   14022952-05a16aaeded6dc06

  • Leader: ZooKeeper 集群工作的核心 事務(wù)請求(寫操作)的唯一調(diào)度和處理者,保證集群事務(wù)處理的順序性;集群內(nèi)部各個服務(wù)的調(diào)度者。 對于 create,setData,delete 等有寫操作的請求,則需要統(tǒng)一轉(zhuǎn)發(fā)給 leader 處理,leader 需要決定編號、執(zhí)行操作,這個過程稱為一個事務(wù)。
  • Follower: 處理客戶端非事務(wù)(讀操作)請求 轉(zhuǎn)發(fā)事務(wù)請求給 Leader 參與集群 leader 選舉投票2n-1臺可以做集群投票 此外,針對訪問量比較大的 zookeeper 集群,還可以新增觀察者角色
  • Observer: 觀察者角色,觀察ZooKeeper集群的最新狀態(tài)變化并將這些狀態(tài)同步過來,其對于非事務(wù)請求可以進行獨立處理,對于事務(wù)請求,則會轉(zhuǎn)發(fā)給Leader服務(wù)器處理 不會參與任何形式的投票只提供服務(wù),通常用于在不影響集群事務(wù)處理能力的前提下提升集群的非事務(wù)處理能力 扯淡:說白了就是增加并發(fā)的請求

ZooKeeper當中的主從與主備:

  • 主從:主節(jié)點少,從節(jié)點多,主節(jié)點分配任務(wù),從節(jié)點具體執(zhí)行任務(wù)
  • 主備:主節(jié)點與備份節(jié)點,主要用于解決我們主機節(jié)點掛掉以后,如何選出來一個新的主節(jié)點的問題,保證我們的主節(jié)點不會宕機
  • 很多時候,主從與主備沒有太明顯的分界線,很多時候都是一起出現(xiàn)

Zookeeper的特性

  1. 全局數(shù)據(jù)的一致:每個 server 保存一份相同的數(shù)據(jù)副本,client 無論鏈接到哪個 server,展示的數(shù)據(jù)都是一致的
  2. 可靠性:如果消息被其中一臺服務(wù)器接受,那么將被所有的服務(wù)器接受
  3. 順序性:包括全局有序和偏序兩種:全局有序是指如果在一臺服務(wù)器上消息 a 在消息 b 前發(fā)布,則在所有 server 上消息 a 在消息 b 前被發(fā)布,偏序是指如果一個消息 b 在消息 a 后被同一個發(fā)送者發(fā)布,a 必須將排在 b 前面
  4. 數(shù)據(jù)更新原子性:一次數(shù)據(jù)更新要么成功,要么失敗,不存在中間狀態(tài)
  5. 實時性:ZooKeeper 保證客戶端將在一個時間間隔范圍內(nèi)獲得服務(wù)器的更新信息,或者服務(wù)器失效的信息

分布式應(yīng)用的優(yōu)點

  • 可靠性 - 單個或幾個系統(tǒng)的故障不會使整個系統(tǒng)出現(xiàn)故障。

  • 可擴展性 - 可以在需要時增加性能,通過添加更多機器,在應(yīng)用程序配置中進行微小的更改,而不會有停機時間。

  • 透明性 - 隱藏系統(tǒng)的復雜性,并將其顯示為單個實體/應(yīng)用程序。

分布式應(yīng)用的挑戰(zhàn)

  • 競爭條件 - 兩個或多個機器嘗試執(zhí)行特定任務(wù),實際上只需在任意給定時間由單個機器完成。例如,共享資源只能在任意給定時間由單個機器修改。

  • 死鎖 - 兩個或多個操作等待彼此無限期完成。

  • 不一致 - 數(shù)據(jù)的部分失敗。

什么是Apache ZooKeeper?

Apache ZooKeeper是由集群(節(jié)點組)使用的一種服務(wù),用于在自身之間協(xié)調(diào),并通過穩(wěn)健的同步技術(shù)維護共享數(shù)據(jù)。ZooKeeper本身是一個分布式應(yīng)用程序,為寫入分布式應(yīng)用程序提供服務(wù)。

ZooKeeper提供的常見服務(wù)如下 :

  • 命名服務(wù) - 按名稱標識集群中的節(jié)點。它類似于DNS,但僅對于節(jié)點。

  • 配置管理 - 加入節(jié)點的最近的和最新的系統(tǒng)配置信息。

  • 集群管理 - 實時地在集群和節(jié)點狀態(tài)中加入/離開節(jié)點。

  • 選舉算法 - 選舉一個節(jié)點作為協(xié)調(diào)目的的leader。

  • 鎖定和同步服務(wù) - 在修改數(shù)據(jù)的同時鎖定數(shù)據(jù)。此機制可幫助你在連接其他分布式應(yīng)用程序(如Apache HBase)時進行自動故障恢復。

  • 高度可靠的數(shù)據(jù)注冊表 - 即使在一個或幾個節(jié)點關(guān)閉時也可以獲得數(shù)據(jù)。

分布式應(yīng)用程序提供了很多好處,但它們也拋出了一些復雜和難以解決的挑戰(zhàn)。ZooKeeper框架提供了一個完整的機制來克服所有的挑戰(zhàn)。競爭條件和死鎖使用故障安全同步方法進行處理。另一個主要缺點是數(shù)據(jù)的不一致性,ZooKeeper使用原子性解析。

ZooKeeper的好處

以下是使用ZooKeeper的好處:

  • 簡單的分布式協(xié)調(diào)過程

  • 同步 - 服務(wù)器進程之間的相互排斥和協(xié)作。此過程有助于Apache HBase進行配置管理。

  • 有序的消息

  • 序列化 - 根據(jù)特定規(guī)則對數(shù)據(jù)進行編碼。確保應(yīng)用程序運行一致。這種方法可以在MapReduce中用來協(xié)調(diào)隊列以執(zhí)行運行的線程。

  • 可靠性

  • 原子性 - 數(shù)據(jù)轉(zhuǎn)移完全成功或完全失敗,但沒有事務(wù)是部分的。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號