ZooKeeper 使用案例
- 使用 ZooKeeper 的應用程式和組織包括(按字母順序)[1]。
- 如果您的使用案例想要列在這裡。請不要猶豫,提交拉取要求或寫電子郵件至 dev@zookeeper.apache.org,然後您的使用案例將會被納入。
- 如果此文件侵犯了您的智慧財產權或您和您公司的隱私,請寫電子郵件至 dev@zookeeper.apache.org,我們將及時處理。
免費軟體專案
- 使用 ZooKeeper 來實作節點協調,在叢集支援中。這允許管理整個叢集或任何特定節點 - 從透過 JMX 連線的任何其他節點。在 ZooKeeper 協調之上開發的叢集廣域指令架構允許在某些節點上失敗的指令重試等。我們還使用相同的架構支援自動優雅的輪詢重新啟動整個節點叢集 [1]。
- Akka 是 JVM 上下一代事件驅動、可擴充且容錯架構的平台。或者:Akka 是在 JVM 上建構高度並行、分散且容錯事件驅動應用程式的工具組和執行階段 [1]。
- Eclipse ECF 專案提供使用 Zookeeper 實作其抽象發現服務。ECF 本身用於許多專案,提供基於 OSGi 的通訊基本功能 [1]。
- Eclipse Gyrex 專案提供一個平台,用於建構您自己的基於 Java OSGi 的雲端。
- ZooKeeper 用作核心雲端元件,用於節點成員資格和管理、工作人員之間執行工作協調、鎖定服務和簡單佇列服務,以及更多 [1]。
- 服務部署和編排架構,以前稱為 Ensemble [1]。
- Katta 在網格環境中提供分散式 Lucene 索引。
- Zookeeper 用於網格中的節點、主控和索引管理 [1]。
- KeptCollections 是 Java Collections 架構中資料結構的插入替換函式庫。
- KeptCollections 使用 Apache ZooKeeper 作為後端儲存,因此使其資料結構分散且可擴充 [1]。
- Neo4j 是圖形資料庫。它是基於磁碟、符合 ACID 的交易儲存引擎,用於大型圖形和快速圖形遍歷,使用外部索引(例如 Lucene/Solr)進行全球搜尋。
- 我們在 Neo4j 高可用性元件中使用 ZooKeeper,用於寫入主控選舉、讀取從屬協調和其他酷炫功能。ZooKeeper 是個很棒且專注的專案 - 我們喜歡![1]。
- Spring Cloud Zookeeper 透過自動設定和連結至 Spring Environment 及其他 Spring 程式設計模型慣用語,為 Spring Boot 應用程式提供 Apache Zookeeper 整合。透過幾個簡單的註解,您可以在應用程式中快速啟用和設定常見模式,並使用 Zookeeper 建立大型分散式系統。所提供的模式包括服務發現和分散式設定 [38]。
- Spring Statemachine 是應用程式開發人員在 Spring 應用程式中使用狀態機概念的架構。
- Spring Statemachine 可以提供此功能:基於 Zookeeper 的分散式狀態機 [31,32]。
- Spring XD 是用於資料擷取、即時分析、批次處理和資料匯出的統一、分散且可延伸系統。此專案的目標是簡化大數據應用程式的開發。
- ZooKeeper - 提供 XD 叢集的所有執行時間資訊。追蹤正在執行的容器,其中部署了容器模組和工作、串流定義、部署清單等 [30,31]。
- Talend ESB 是多功能且靈活的企業服務匯流排。
- 它使用 ZooKeeper 作為 REST 和 SOAP 網路服務的端點儲存庫。透過使用 ZooKeeper,Talend ESB 能夠以極輕量的方式提供故障轉移和負載平衡功能 [1]。
- Redis Failover 是一個基於 ZooKeeper 的自動主從故障轉移解決方案,適用於 Ruby [1]。
Apache 專案
- Accumulo 是分散式鍵/值儲存,提供具表現力的儲存格層級存取標籤。
- Apache ZooKeeper 在 Accumulo 架構中扮演核心角色。它的法定人數一致性模型支援整體 Accumulo 架構,沒有單一故障點。除此之外,Accumulo 利用 ZooKeeper 來儲存和傳遞使用者和資料表的組態資訊,以及程序和儲存格的運作狀態 [2]。
- Atlas 是一組可擴充且可延伸的核心基礎治理服務,讓企業能夠在 Hadoop 中有效率地滿足其合規性需求,並允許與整個企業資料生態系統整合。
- Atlas 使用 Zookeeper 進行協調,以提供 HBase、Kafka 的備援和高可用性 [31,35]。
- 可擴充、容錯且低延遲的儲存服務,針對即時工作負載進行最佳化。
- BookKeeper 需要一個元資料儲存服務來儲存與帳本和可用 Bookies 相關的資訊。BookKeeper 目前使用 ZooKeeper 來執行這項任務和其他任務 [3]。
- Apache CXF 是開源服務架構。CXF 協助您使用前端程式設計 API(例如 JAX-WS 和 JAX-RS)來建置和開發服務。這些服務可以使用各種通訊協定,例如 SOAP、XML/HTTP、RESTful HTTP 或 CORBA,並透過各種傳輸方式(例如 HTTP、JMS 或 JBI)運作。
- Apache CXF 中的 Distributed OSGi 實作使用 ZooKeeper 來執行其發現功能 [4]。
- Hadoop、NoSQL 和雲端儲存的無架構 SQL 查詢引擎
- ZooKeeper 維護暫時性叢集成員資格資訊。Drillbits 使用 ZooKeeper 來尋找叢集中的其他 Drillbits,而客戶端使用 ZooKeeper 來尋找 Drillbits 以提交查詢 [28]。
- Apache Druid 是高性能的即時分析資料庫。
- Apache Druid 使用 Apache ZooKeeper (ZK) 來管理目前的叢集狀態。在 ZK 上發生的作業為 [27]
- 協調器領導者選舉
- 歷史和即時資料的區段「發布」通訊協定
- 協調器和歷史資料之間的區段載入/刪除通訊協定
- 霸主領導者選舉
- 霸主和中階管理員任務管理
- Apache Dubbo 是一個高性能、基於 Java 的開源 RPC 架構。
- Zookeeper 用於 Dubbo 中的服務註冊發現和配置管理 [6]。
- Apache Flink 是針對無界和有界資料串流進行狀態運算的框架和分散式處理引擎。Flink 設計為可在所有常見叢集環境中執行,以記憶體內速度和任何規模執行運算。
- 若要啟用 JobManager 高可用性,您必須將高可用性模式設定為 zookeeper,設定 ZooKeeper 法定人數,並建立一個包含所有 JobManager 主機及其網路 UI 埠的 master 檔案。Flink 利用 ZooKeeper 進行所有正在執行的 JobManager 實例之間的分散式協調。ZooKeeper 是 Flink 的一項獨立服務,透過領導者選舉和輕量級一致狀態儲存提供高度可靠的分散式協調 [23]。
- Flume 是一項分散式、可靠且可用的服務,可有效收集、彙總和移動大量日誌資料。它有一個基於串流資料流程的簡單且彈性架構。它強健且具有容錯能力,具備可調整的可靠性機制和許多故障轉移和復原機制。它使用一個簡單的可延伸資料模型,允許線上分析應用程式。
- Flume 支援透過 Zookeeper 進行代理程式設定。這是一項實驗性功能 [5]。
- Apache Fluo 是一個分散式處理系統,讓使用者可以對大型資料集進行增量更新。
- Apache Fluo 建構於 Apache Accumulo 之上,而 Apache Accumulo 使用 Apache Zookeeper 進行共識 [31,37]。
- 批次和串流的大資料品質解決方案。
- Griffin 使用 Zookeeper 進行協調,以提供 Kafka 的備援和高可用性 [31,36]。
- Apache Hadoop 軟體程式庫是一個框架,允許使用簡單的程式設計模型跨電腦叢集分散式處理大型資料集。它設計為可從單一伺服器擴充到數千台機器,每台機器都提供本機運算和儲存。該程式庫本身設計為在應用程式層面偵測和處理故障,而不是依賴硬體提供高可用性,因此在可能發生故障的電腦叢集之上提供高度可用的服務。
- 自動 HDFS 故障轉移的實作依賴 ZooKeeper 進行下列事項
- 故障偵測 - 叢集中的每個 NameNode 機器都在 ZooKeeper 中維護一個持續性工作階段。如果機器發生故障,ZooKeeper 工作階段將會過期,通知其他 NameNode 應觸發故障轉移。
- 主動 NameNode 選舉 - ZooKeeper 提供一個簡單的機制,可獨家選出一個節點作為主動節點。如果目前主動的 NameNode 發生故障,另一個節點可能會在 ZooKeeper 中取得一個特別的獨佔鎖定,表示它應成為下一個主動節點。
- ZKFailoverController (ZKFC) 是一個新元件,是一個 ZooKeeper 伺服器端,也會監控和管理 NameNode 的狀態。執行 NameNode 的每部機器也會執行 ZKFC,而 ZKFC 負責
- 健康監控 - ZKFC 會定期使用健康檢查命令 ping 其本機 NameNode。只要 NameNode 以健康狀態及時回應,ZKFC 便會將節點視為健康。如果節點已崩潰、凍結或進入其他不健康的狀態,健康監控器會將其標記為不健康。
- ZooKeeper 會話管理 - 當本機 NameNode 健康時,ZKFC 會在 ZooKeeper 中保持一個開啟的會話。如果本機 NameNode 處於活動狀態,它也會持有特殊「鎖定」znode。此鎖定使用 ZooKeeper 對「臨時」節點的支持;如果會話過期,鎖定節點將自動刪除。
- 基於 ZooKeeper 的選舉 - 如果本機 NameNode 健康,且 ZKFC 看見目前沒有其他節點持有鎖定 znode,它本身會嘗試取得鎖定。如果成功,則表示它「贏得選舉」,並負責執行故障轉移,使其本機 NameNode 處於活動狀態。故障轉移程序類似於上述手動故障轉移:首先,如果需要,會將先前的活動圍住,然後本機 NameNode 轉移到活動狀態 [7]。
- HBase 是 Hadoop 資料庫。它是一個開源、分散式、面向欄的儲存模型。
- HBase 使用 ZooKeeper 進行主控選舉、伺服器租約管理、開機和伺服器之間的協調。分散式 Apache HBase 安裝依賴於執行中的 ZooKeeper 集群。所有參與節點和客戶端都必須能夠存取執行中的 ZooKeeper 組合 [8]。
- 如您所見,ZooKeeper 是 HBase 的基本部分。所有需要協調的操作,例如區域指派、主控故障轉移、複製和快照,都建立在 ZooKeeper 上 [20]。
- 一個針對分割和複製分散式資源的叢集管理架構。
- 我們需要一個分散式儲存來維護叢集的狀態,以及一個通知系統來通知叢集狀態的任何變更。Helix 使用 Apache ZooKeeper 來達成此功能 [21]。Zookeeper 提供
- 一種表示持續狀態的方法,該狀態會保留到刪除為止
- 一種表示暫時/臨時狀態的方法,該狀態會在建立狀態的程序終止時消失
- 當 PERSISTENT 和 EPHEMERAL 狀態發生變更時,會發出通知機制
- Apache Hive 資料倉庫軟體可使用 SQL 讀取、寫入和管理儲存在分散式儲存裝置中的大型資料集。結構可以投射到已儲存在儲存裝置中的資料。提供命令列工具和 JDBC 驅動程式,讓使用者連線到 Hive。
- Hive 一直使用 ZooKeeper 作為分散式鎖定管理員,以支援 HiveServer2 中的並行運算 [25,26]。
- Ignite 是以記憶體為中心的分布式資料庫、快取和處理平台,適用於交易、分析和串流工作負載,提供 PB 等級的記憶體內速度
- Apache Ignite 偵測機制搭配 ZooKeeper 實作,可將 Ignite 集群擴充至數百甚至數千個節點,同時維持線性可擴充性和效能 [31,34]。
- Apache James Mailbox 是提供彈性 Mailbox 儲存的函式庫,可透過郵件通訊協定 (IMAP4、POP3、SMTP 等) 和其他通訊協定存取。
- 使用 Zookeeper 和 Curator Framework 來產生分散式唯一 ID [31]。
- Kafka 是分散式發佈/訂閱訊息系統
- Apache Kafka 仰賴 ZooKeeper 執行下列事項
- 控制器選舉控制器是 Kafka 生態系中最重要的仲介實體之一,它也負責維護所有分區的領導者與追隨者關係。如果某個節點因故關閉,控制器有責任告知所有複本擔任分區領導者,以履行即將發生故障節點上分區領導者的職責。因此,每當節點關閉時,就可以選出新的控制器,並確保在任何特定時間點只有一個控制器,且所有追隨者節點都已同意。
- 主題設定所有主題的設定,包括現有主題清單、每個主題的分區數、所有複本的位置、所有主題的設定覆寫清單,以及哪個節點是優先領導者等。
- 存取控制清單所有主題的存取控制清單或 ACL 也維護在 Zookeeper 內。
- 叢集成員資格 Zookeeper 也會維護一份清單,列出所有在任何特定時刻運作中且屬於該叢集的代理 [9]。
- Apache Kylin 是一個開放原始碼的分布式分析引擎,旨在在 Hadoop/Spark 上提供 SQL 介面和多維度分析 (OLAP),支援極大型的資料集,最初由 eBay Inc. 貢獻。
- Apache Kylin 利用 Zookeeper 來進行工作協調 [31,33]。
- Apache Mesos 會將 CPU、記憶體、儲存空間和其他運算資源從機器(實體或虛擬)中抽象出來,讓容錯且有彈性的分布式系統能夠輕鬆建置並有效執行。
- Mesos 有一個高可用性模式,會使用多個 Mesos 主控:一個活動主控(稱為領導者或領導主控)和幾個備份主控,以防它發生故障。主控會選出領導者,Apache ZooKeeper 會同時協調選舉並處理主控、代理和排程器驅動程式的領導者偵測 [10]。
- Oozie 是一個工作流程排程器系統,用於管理 Apache Hadoop 工作。
- Oozie 伺服器使用它來協調存取資料庫並彼此通訊。為了擁有完整的 HA,至少應該有 3 個 ZooKeeper 伺服器 [29]。
- Apache Pulsar 是一個開放原始碼的分布式 pub-sub 訊息系統,最初由 Yahoo 建立,現在是 Apache 軟體基金會的一部分。
- Pulsar 使用 Apache Zookeeper 來進行元資料儲存、叢集設定和協調。在 Pulsar 執行個體中
- 設定儲存空間會為租戶、命名空間和其他需要全球一致性的實體儲存設定。
- 每個叢集都有自己的本地 ZooKeeper 組合,用於儲存叢集特定的設定和協調,例如擁有權元資料、代理負載報告、BookKeeper 帳本元資料等 [24]。
- Solr 是建立在 Apache Lucene 上的熱門、極速、開放原始碼的企業搜尋平台。
- 在企業搜尋引擎 Apache Solr 的「雲端」版本(v4.x 以上)中,ZooKeeper 用於設定、領導者選舉等 [12,13]。
- Apache Spark 是用於大規模資料處理的統一分析引擎。
- 利用 ZooKeeper 來提供領導者選舉和一些狀態儲存,您可以在連接到同一個 ZooKeeper 執行個體的叢集中啟動多個主控。其中一個將被選為「領導者」,而其他主控將保持待命模式。如果目前的領導者發生故障,將會選出另一個主控,復原舊主控的狀態,然後繼續排程 [14]。
- Apache Storm 是免費且開放原始碼的分布式即時運算系統。Apache Storm 讓可靠地處理無界資料串流變得容易,它對即時處理所做的,就如同 Hadoop 對批次處理所做的。Apache Storm 很簡單,可以用任何程式語言,而且使用起來很有趣!
- Storm 使用 Zookeeper 來協調叢集 [22]。
公司
- AGETO 研發團隊在各種內部和外部諮詢專案中使用 ZooKeeper [1]。
- ZooKeeper 用於內部應用程式開發,搭配 Solr 和 Hadoop 與 Hbase [1]。
- Box 使用 ZooKeeper 進行服務發現、服務協調、Solr 和 Hadoop 支援等 [1]。
- 我們進行研究搜尋,並使用進階搜尋技術提供高品質內容存取,Zookeeper 用於管理伺服器狀態、控制索引部署和許多其他任務 [1]。
- Facebook 使用 Zeus ([17,18]) 進行組態管理,這是 ZooKeeper 的一個分支版本,具備許多可擴充性和效能增強功能,以便在 Facebook 規模下運作。它在跨多個區域分散的伺服器之間執行共識協定以確保復原力。如果領導者發生故障,追隨者會轉換為新的領導者。
- Idium Portal 是由挪威公司 Idium AS 提供的託管式網路出版系統。
- ZooKeeper 用於叢集訊息傳遞、服務開機和服務協調 [1]。
- 在 VMware 工作站、Amazon EC2、Zen 上使用 2 節點叢集的 ZooKeeper
- 使用 zkpython
- 尋求擴充至 100 節點叢集 [1]。
- 我們為雲端運算時代進行虛擬化網路。我們使用 ZooKeeper 進行分散式控制平面的各個方面 [1]。
- Pinterest 使用 ZooKeeper 進行服務發現和動態組態。與許多大型網站一樣,Pinterest 的基礎架構包含與後端服務通訊的伺服器,這些服務由多個個別伺服器組成,用於管理負載和容錯。理想情況下,我們希望組態僅反映活動主機,因此客戶端不必經常處理不良主機。ZooKeeper 提供了一個眾所周知的模式來解決這個問題 [19]。
- 電子郵件和應用程式團隊使用 ZooKeeper 來協調分散式電子郵件客戶端的分片和責任變更,該客戶端會擷取和索引資料以進行搜尋。ZooKeeper 也提供連線的分布式鎖定,以防止叢集壓垮伺服器 [1]。
- 在 SPM(也包含 ZooKeeper 監控元件!)中使用 ZooKeeper,搜尋分析和 Logsene [1]。
- 使用 ZooKeeper 進行領導者選舉、組態管理、鎖定和群組成員 [1]。
- ZooKeeper 在 Twitter 中用作儲存重要元資料的真實來源。它作為協調核心提供分散式協調服務,例如領導者選舉和分散式鎖定。ZooKeeper 實際運作的一些具體範例包括 [15,16]
- ZooKeeper 用於儲存服務註冊,Twitter 的命名服務用於服務發現。
- Manhattan(Twitter 內部鍵值資料庫)、Nighthawk(分片式 Redis)和 Blobstore(內部相片和影片儲存)將其叢集拓撲資訊儲存在 ZooKeeper 中。
- EventBus(Twitter 的發布訂閱訊息系統)將重要元資料儲存在 ZooKeeper 中,並使用 ZooKeeper 進行領導者選舉。
- Mesos(Twitter 的運算平台)使用 ZooKeeper 進行領導者選舉。
- 內部用作分片服務、資料/索引更新的分散式同步、組態管理和故障轉移支援的一部分 [1]。
- Wealthfront 使用 ZooKeeper 進行服務發現、領導者選舉和在其眾多後端服務之間的分散式鎖定。ZK 是 Wealthfront 持續 部署基礎架構 的重要部分 [1]。
- ZooKeeper 用於 Yahoo! 內部的無數服務,用於執行領導者選舉、組態管理、分片、鎖定、群組成員資格等 [1]。
- ZooKeeper 在 Zynga 中用於各種服務,包括組態管理、領導者選舉、分片等 [1]。
參考文獻
- [1] https://cwiki.apache.org/confluence/display/ZOOKEEPER/PoweredBy
- [2] https://www.youtube.com/watch?v=Ew53T6h9oRw
- [3] https://bookkeeper.apache.org/docs/4.7.3/getting-started/concepts/#ledgers
- [4] http://cxf.apache.org/dosgi-discovery-demo-page.html
- [5] https://flume.apache.org/FlumeUserGuide.html
- [6] https://dubbo.dev.org.tw/en-us/blog/dubbo-zk.html
- [7] https://hadoop.dev.org.tw/docs/r2.7.1/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithQJM.html
- [8] https://hbase.apache.org/book.html#zookeeper
- [9] https://www.cloudkarafka.com/blog/2018-07-04-cloudkarafka_what_is_zookeeper.html
- [10] http://mesos.apache.org/documentation/latest/high-availability/
- [11] http://incubator.apache.org/projects/s4.html
- [12] https://lucene.apache.org/solr/guide/6_6/using-zookeeper-to-manage-configuration-files.html#UsingZooKeepertoManageConfigurationFiles-StartupBootstrap
- [13] https://lucene.apache.org/solr/guide/6_6/setting-up-an-external-zookeeper-ensemble.html
- [14] https://spark.dev.org.tw/docs/latest/spark-standalone.html#standby-masters-with-zookeeper
- [15] https://blog.twitter.com/engineering/en_us/topics/infrastructure/2018/zookeeper-at-twitter.html
- [16] https://blog.twitter.com/engineering/en_us/topics/infrastructure/2018/dynamic-configuration-at-twitter.html
- [17] TANG, C., KOOBURAT, T., VENKATACHALAM, P.,CHANDER, A., WEN, Z., NARAYANAN, A., DOWELL,P., AND KARL, R. Facebook 的整體組態管理。在第 25 屆作業系統原理研討會(SOSP’15)論文集(美國加州蒙特瑞,2015 年 10 月)中。
- [18] https://www.youtube.com/watch?v=SeZV373gUZc
- [19] https://medium.com/@Pinterest_Engineering/zookeeper-resilience-at-pinterest-adfd8acf2a6b
- [20] https://blog.cloudera.com/what-are-hbase-znodes/
- [21] https://helix.apache.org/Architecture.html
- [22] http://storm.apache.org/releases/current/Setting-up-a-Storm-cluster.html
- [23] https://ci.apache.org/projects/flink/flink-docs-release-1.9/ops/jobmanager_high_availability.html
- [24] https://pulsar.apache.org/docs/en/concepts-architecture-overview/#metadata-store
- [25] https://cwiki.apache.org/confluence/display/Hive/Locking
- [26] ZooKeeperHiveLockManager 實作在 hive 程式碼庫中
- [27] https://druid.apache.org/docs/latest/dependencies/zookeeper.html
- [28] https://mapr.com/blog/apache-drill-architecture-ultimate-guide/
- [29] https://oozie.apache.org/docs/4.1.0/AG_Install.html
- [30] https://spring-docs.dev.org.tw/spring-xd/docs/current/reference/html/
- [31] https://cwiki.apache.org/confluence/display/CURATOR/Powered+By
- [32] https://projects.spring.io/spring-statemachine/
- [33] https://www.tigeranalytics.com/blog/apache-kylin-architecture/
- [34] https://apacheignite.readme.io/docs/cluster-discovery
- [35] http://atlas.apache.org/HighAvailability.html
- [36] http://griffin.apache.org/docs/usecases.html
- [37] https://fluo.apache.org/
- [38] https://spring.dev.org.tw/projects/spring-cloud-zookeeper