Zookeeper在分佈式架構中的應用

Zookeeper 是一個高性能、高可靠的分佈式協調系統,是 Google Chubby 的一個開源實現。 Zookeeper 可以爲分佈式應用提供一致性服務,提供的功能包括: 配置維護、域名服務、分佈式同步、組服務等。它 以Fast Paxos算法爲基礎的,Paxos 算法存在活鎖的問題,即當有多個proposer交錯提交時,有可能互相排斥致使沒有一個proposer能提交成功,而Fast Paxos做了一些優化,經過選舉產生一個leader (領導者),只有leader才能提交proposer。 不少工做中用過的組件如Dubbo、kafka、Solr、Hadoop、HBase等都須要依賴Zookeeper。
近日瞭解到 Kafka 正在醞釀重大更新,可能會提供自管理的元數據仲裁機制以消除對 Zookeeper 的依賴,社區呼籲也至關強烈。那麼通常而言 Zookeeper 在分佈式系統中扮演什麼角色?目前 Zookeeper 都應用在哪些分佈式架構中?本文從 Zookeeper 能夠聊起,盤點那些離不開 Zookeeper 的分佈式技術架構!
一. Zookeeper 概述


Zookeeper 是一個高性能、高可靠的分佈式協調系統,是 Google Chubby 的一個開源實現。Zookeeper 可以爲分佈式應用提供一致性服務,提供的功能包括:配置維護、域名服務、分佈式同步、組服務等。
算法

Zookeeper 使用 Zab 協議傳遞 leader 的狀態改變,保證 leader 與 follower 的一致性。Zab 全稱 Zookeeper Atomic Broadcast protocol,是 Paxos 共識算法的經典實現。數據庫

Zookeeper 應用很是普遍,應用場景主要包括session

  • 數據發佈訂閱(配置中心)
  • 命名服務(保存全局惟一ID)
  • 分佈式協調服務(Watcher、異步通知)
  • 心跳檢測(臨時節點)
  • 任務進度上報(臨時節點)
  • Master選舉(臨時節點、Watcher)
  • 分佈式鎖(臨時節點、Watcher)
前面介紹說 Zookeeper 是一個高性能、高可靠的系統,之因此是高性能主要由於 Zookeeper 保存在內存中,此外 Zookeeper 一般是集羣模式,不存在單點故障即保證了其可靠性。二. Kafka 與 Zookeeper


Zookeeper 在 Kafka 架構中扮演着重要角色。Kafka 使用 Zookeeper 進行元數據管理,保存 broker 註冊的信息,包括 Topic、Partition 信息等,選舉 Partition Leader,低版本 Kafka Consumer 的 offset 信息也保存在 Zookeeper 中。
咱們從 Kafka 架構中來看 Kafka 與 Zookeeper 的關係 ,以下 來源:雲棲社區如圖中所示,Kafka Producer 端直接鏈接 broker.list 列表。而Broker 端則使用 Zookeeper 註冊 broker 信息,監控 Partition leader 存活性;Comsumer 端則使用 Zookeeper 註冊 comsumer 信息,同時用來發現 broker 列表,並和 Partition leader 創建 socket 鏈接獲取消息。
三. Hadoop  與 Zookeeper


Zookeeper 是做爲 Hadoop 子項目發展起來的,最初的設計目標就是爲 Hadoop 生態組件之間提供一致性協調服務的,所以在 Hadoop 體系(這裏主要指 HDFS 與 YARN)中使用普遍。
在 Hadoop 中,Zookeeper 主要用來實現 HA(High Availability),包括 HDFS NameNode 和 YARN ResourceManager 的 HA。這裏就 YARN ResourceManager 的 HA 架構舉例,以下 來源:Hadoop官網 如上圖所示,更多的實現細節這裏很少贅述了,HDFS 利用 Zookeeper 實現 NameNode  HA 的原理同上。四. HBase 與 Zookeeper


HBase 是大數據領域使用最普遍的 NoSQL 數據庫,Zookeeper 在 HBase 架構中一樣扮演着重要角色。咱們首先來看一張 HBase 的架構圖:
來源:MAPR官網 如上所示,HBase 主要包括 HMaster、RegionServer、Zookeeper 三種角色。咱們能夠很清楚的看到,HBase 使用 Zookeeper 做爲分佈式協調服務,來維護集羣中服務的狀態,全部的 RegionServer 和 Active HMaster 都要與 Zookeeper 保持會話(session)。Zookeeper 維護着哪些 servers 是健康可用的,而且在 server 故障時作出通知。五. Solr 與 Zookeeper


Zookeeper 在 Solr 的架構中也有很是重要的應用。生產環境中咱們一般使用 SolrCloud 模式, Solr 集羣依賴 Zookeeper  管理相關配置信息和集羣的運行狀態,並使用 Zookeeper 進行主節點選舉

說起 Solr 就不得不說說 Elasticsearch,Elasticsearch 同 Solr 同樣也是很是流行的搜索引擎,可是 Elasticsearch 卻不依賴 Zookeeper 作分佈式協調,而是自帶集羣分佈式協調系統(Zen Discovery 或 Zen2),這也是 Elasticsearch 與 Solr 之間的重要區別之一。架構


相關文章
相關標籤/搜索