Zookeeper簡(jiǎn)介

image.png

Zookeeper系列文章

1.Zookeeper簡(jiǎn)介
2.Zookeeper集群安裝
3.原生API操作Zookeeper
4.zkClient框架操作Zookeeper
5.Curator框架操作Zookeeper

1. 什么是 Zookeeper?

  • Zookeeper是一個(gè)高效的分布式協(xié)調(diào)服務(wù),它暴露了一些公用服務(wù),比如命名/配置管理/同步控制/群組服務(wù)等。我們可以使用ZK來實(shí)現(xiàn)比如達(dá)成共識(shí)/集群管理/leader選舉等

  • Zookeeper 是一個(gè)高可用的分布式管理與協(xié)調(diào)框架,基于 ZAB 算法(原子消息廣播協(xié)議)的實(shí)現(xiàn)。該框架能夠很好地保證分布式環(huán)境中數(shù)據(jù)的一一致性。也正是基于這樣的特性,使得 Zookeeper 成為了解決分布式一致性問題的利器。

    zookeeper五個(gè)特性

    • 順序一致性:從一個(gè)客戶端發(fā)起的事務(wù)請(qǐng)求,最終將會(huì)嚴(yán)格地按照其發(fā)起的順序被應(yīng)用到 zookeeper 中去。

    • 原子性:所有事務(wù)請(qǐng)求的處理結(jié)果在整個(gè)集群中所有機(jī)器上的應(yīng)用情況是一致的,也就是說,要么整個(gè)集群所有的機(jī)器都成功應(yīng)用了某一事務(wù),要么都沒有應(yīng)用,一定不會(huì)出現(xiàn)部分機(jī)器應(yīng)用了該事務(wù),而另一部分沒有應(yīng)用的情況。

    • 單一視圖:無論客戶端連接的是哪一個(gè) zookeeper 服務(wù)器,其看到的服務(wù)器端數(shù)據(jù)模型都是一致的。

    • 可靠性:一旦服務(wù)器成功地應(yīng)用了一個(gè)事務(wù),并完成對(duì)客戶端的響應(yīng),那么該事務(wù)所引起的服務(wù)器端狀態(tài)將會(huì)被一致保留下來。除非有另外一個(gè)事務(wù)對(duì)其更改。

    • 實(shí)時(shí)性:通常所說的實(shí)時(shí)性就是指一旦事務(wù)被成功應(yīng)用,那么客戶端就能立刻從服務(wù)器上獲取變更后的新數(shù)據(jù),zookeeper 僅僅能保證在一段時(shí)間內(nèi),客戶端最終一定能從服務(wù)幕端讀敢最新的數(shù)據(jù)狀態(tài)。

2. Zookeeper設(shè)計(jì)目標(biāo)

  • 目標(biāo) 1: 簡(jiǎn)單的數(shù)據(jù)結(jié)構(gòu)。zookeeper 就是以簡(jiǎn)單的樹形結(jié)構(gòu)來進(jìn)行相互協(xié)調(diào)的(也叫樹形名字空間)。

  • 目標(biāo) 2: 可以構(gòu)建集群。一般 zookeeper 集群通常由一組機(jī)器構(gòu)成,一般 3~5 臺(tái)機(jī)器就可以組成一個(gè) zookeeper 集群了。只要集群中超過半數(shù)以上的機(jī)器能夠正常工作,那么整個(gè)集群就能夠正常對(duì)外提供服務(wù)。

  • 目標(biāo) 3: 順序訪問。對(duì)于來自每一個(gè)客戶端的每一個(gè)請(qǐng)求,zookeeper 都會(huì)分配一個(gè)全局唯一的遞增編號(hào),這個(gè)編號(hào)反應(yīng)了所有事務(wù)操作的先后順序,應(yīng)用程序可以使用 zookeeper 的這個(gè)特性來實(shí)現(xiàn)更高層次的同步。

  • 目標(biāo) 4: 高性能。由于 zookeeper 將全量數(shù)據(jù)存儲(chǔ)在內(nèi)存中,并直接服務(wù)與所有的非事務(wù)請(qǐng)求,因此尤其是在讀操作為主的場(chǎng)景下性能非常突出。在 JMater 壓力測(cè)試下(100%讀請(qǐng)求場(chǎng)景下),其結(jié)果大約在 12* ~13 W 的 QPS.

3. Zookeeper的結(jié)構(gòu)

  • Zookeeper會(huì)維護(hù)一個(gè)具有層次關(guān)系的數(shù)據(jù)結(jié)構(gòu),它非常類似于一個(gè)標(biāo)準(zhǔn)的文件系統(tǒng).


    image.png

4. Zookeeper的數(shù)據(jù)模型

  • 1、每個(gè)子目錄項(xiàng)如 NameService 都被稱作為 znode,這個(gè) znode 是被它所在的路 徑唯一標(biāo)識(shí),如Server1這個(gè)znode的標(biāo)識(shí)為/NameService/Server1

  • 2、znode 可以有子節(jié)點(diǎn)目錄,并且每個(gè) znode 可以存儲(chǔ)數(shù)據(jù),注意 EPHEMERAL類型的目錄節(jié)點(diǎn)不能有子節(jié)點(diǎn)目錄

  • 3、Znode 是有版本的,每個(gè) znode 中存儲(chǔ)的數(shù)據(jù)可以有多個(gè)版本,也就是一個(gè)訪問路徑中可以存儲(chǔ)多份數(shù)據(jù)

  • 4、znode 可以是臨時(shí)節(jié)點(diǎn),一旦創(chuàng)建這個(gè) znode。的客戶端與服務(wù)器失去聯(lián)系,這個(gè) znode 也將自動(dòng)刪除,Zookeeper 的客戶端和服務(wù)器通信采用長(zhǎng)連接方式,每個(gè)客戶端和服務(wù)器通過心跳來保持連接,這個(gè)連接狀態(tài)稱為 session,如果 znode 是臨時(shí)節(jié)點(diǎn),這個(gè) session 失效,znode 也就刪除了.(利用zookeeper實(shí)現(xiàn)分布式鎖使用的就是此特性)

  • 5、znode 的目錄名可以自動(dòng)編號(hào),如 App1 已經(jīng)存在,再創(chuàng)建的話,將會(huì)自動(dòng)命名為 App2

  • 6、znode 可以被監(jiān)控,包括這個(gè)目錄節(jié)點(diǎn)中存儲(chǔ)的數(shù)據(jù)的修改,子節(jié)點(diǎn)目錄的變化一旦變化可以通知設(shè)置監(jiān)控的客戶端,這個(gè)是 Zookeeper 的核心特性,Zookeeper 的很多功能都是基于這個(gè)特性實(shí)現(xiàn)的,后面在典型的應(yīng)用場(chǎng)景中會(huì)有實(shí)例介紹

5. Zookeeper集群組成

  • ZK server 根據(jù)其身份特性分為三種:leader, Follower, Observer,其中 Follower 和 Observer 又統(tǒng)稱 Learner(學(xué)習(xí)者)
    • Leader:負(fù)責(zé)客戶端的 writer 類型請(qǐng)求
    • Follower:負(fù)責(zé)客戶端的 reader 類型請(qǐng)求,參與 leader 選舉等。
    • Observer:特殊的“Follower“,其可以接受客戶端 reader 請(qǐng)求,但不參與選舉。(擴(kuò)容系統(tǒng)支撐能力,提高了讀取速度。因?yàn)樗唤邮苋魏瓮降膶懭胝?qǐng)求,只負(fù)責(zé)與 leader 同步數(shù)據(jù))

6. Zookeeper應(yīng)用場(chǎng)景

  • 配置管理:配置的管理在分布式應(yīng)用環(huán)境中很常見,比如我們?cè)谄匠5膽?yīng)用系統(tǒng)中,經(jīng)常會(huì)碰到這樣的需求:如機(jī)器的配置列表、運(yùn)行時(shí)的開關(guān)配置、數(shù)據(jù)庫(kù)配置信息等。這些全局配置信息通常具備以下 3 個(gè)特性:

    • 1 數(shù)據(jù)量比較小。
    • 2 數(shù)據(jù)內(nèi)容在運(yùn)行時(shí)動(dòng)態(tài)發(fā)生變化。
    • 3 集群中各個(gè)節(jié)點(diǎn)共享信息,配置一致。
  • 集群管理:Zookeeper 不僅能夠幫你維護(hù)當(dāng)前的集群中機(jī)器的服務(wù)狀態(tài),而且能夠幫你選出一個(gè)“總管”,讓這個(gè)總管來管理集群,這就是 Zookeeper 的另一個(gè)功能 Leader,并實(shí)現(xiàn)集群容錯(cuò)功能。

    • 1 希望知道當(dāng)前集群中究竟有多少機(jī)器工作。
    • 2 對(duì)集群中每天集群的運(yùn)行時(shí)狀態(tài)進(jìn)行數(shù)據(jù)收集。
    • 3 對(duì)集群中每臺(tái)集群進(jìn)行上下線操作。
  • 發(fā)布與訂閱:Zookeeper 是一個(gè)典型的發(fā)布/訂閱模式的分布式數(shù)控管理與協(xié)調(diào)框架,開發(fā)人員可以使用它來進(jìn)行分布式數(shù)據(jù)的發(fā)布與訂閱。

  • 數(shù)據(jù)庫(kù)切換:比如我們初始化 zookeeper 的時(shí)候讀取其節(jié)點(diǎn)上的數(shù)據(jù)庫(kù)配置文件,當(dāng)配置一旦發(fā)生變更時(shí),zookeeper 就能幫助我們把變更的通知發(fā)送到各個(gè)客戶端,每個(gè)了服務(wù)在接收到這個(gè)變更通知后,就可以從新進(jìn)行最新數(shù)據(jù)的獲取。

  • 分布式日志收集:我們可以做一個(gè)日志系統(tǒng)收集集群中所有的日志信息,進(jìn)行統(tǒng)一管理。

下篇文章在這里 Zookeeper集群安裝

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • zookeeper單機(jī)模式搭建Zookeeper集群及偽集群模式搭建 簡(jiǎn)介 ZooKeeper 是一個(gè)開源的分布式...
    普度眾生的面癱青年閱讀 2,954評(píng)論 0 10
  • 序言 ??Apache ZooKeeper是由集群(節(jié)點(diǎn)組)使用的一種服務(wù),用于在自身之間協(xié)調(diào),并通過穩(wěn)健的同步技...
    抄無止境閱讀 1,071評(píng)論 0 1
  • 1.分布式應(yīng)用程序 分布式應(yīng)用程序并發(fā)的在網(wǎng)絡(luò)中上運(yùn)行,通過協(xié)調(diào)不同節(jié)點(diǎn)上進(jìn)程以快速有效的方式完成特定任務(wù)。 分布...
    金字塔下的小蝸牛閱讀 501評(píng)論 0 0
  • 一、Zookeeper簡(jiǎn)介 Zookeeper是一個(gè)開源的分布式協(xié)調(diào)服務(wù),Zookeeper的設(shè)計(jì)目標(biāo)是將那些復(fù)雜...
    落地生涯閱讀 2,878評(píng)論 0 0
  • 分布式應(yīng)用程序的分布式協(xié)調(diào)服務(wù) ZooKeeper是一個(gè)分布式、開源的分布式應(yīng)用程序協(xié)調(diào)服務(wù)。它公開了一組簡(jiǎn)單的原...
    第八共同體閱讀 791評(píng)論 0 0

友情鏈接更多精彩內(nèi)容