Zookeeper 基本知識 Rush!

除了技術和能力的成長,在成長記系列中,更重要的是思想和觀念的提升,這個就需要大家自己不斷的體悟,大道至簡而歸一,本質上只有一條大道,你只能自己 “悟”, 悟到的纔是自己的,自己纔會真正踐行。大家記住,人生處處是道場,任何時候,和任何人,任何事都可以學習,學到東西,這個心態和思想希望你們可以貫徹下去,就會發現人生是另一番天地。

JDK 源碼成長記之後,將要推出大家期待已久的 Zookeeper 成長記。主要脈絡分爲 3 章,第一章目的是讓你掌握或者回顧 Zookeeper 的架構原理和使用,也有一些金句甜點,給大家分享一些好的思想和觀念,第二章主要目的是讓你掌握 Zookeeper 的核心源碼原理,第三章和之前一樣會偏重項目經驗和生產經驗,分享一些 Zookeeper 生產經驗,到時候大家也可以投稿問題給我,我來總結後,給你們分享。

希望你通過這次 Zookeeper 成長記,你可以熟練使用 Zookeeper,可以看懂和理解各個開源技術源碼中 Zookeeper 的使用,解決 Zookeeper 各種生產問題等等。

下面你就來和我一起開始 Zookeeper 成長記第一章的學習吧!

Zookeeper 能幹嘛?

不知道在你印象中的 Zookeeper 是不是這樣的?Zookeeper 主要可以用來做分佈式鎖、配置中心、中間件元數據管理、主從選舉、分佈式系統的協調和通知等等。如下圖所示:

Zookeeper 各個功能使用的本質

Zookeeper 雖然有這麼多的作用,但是技術本質是爲了解決一類問題應運而生的。所以這裏你要學會一個思想,那就是透過現象看本質

Zookeeper 看似作用一大堆,你可能或多或少接觸過,但是不要僅僅停留在使用和它的功能表象,要仔細想想本質,Zookeeper 主要提供了其實就兩類功能,一是對數據的存儲,二是對數據的監聽。

你可能說了**很多中間件都有這種功能了呀,但是不同的實現就會具備不同的特性。**Zookeeper 的實現讓他具有很多獨特的特性,特性主要如下:

在理解到這個前提下,你再來看 Zookeeper 的作用就會有另一番理解。比如你可以看下下面的 Zookeeper 的應用

1)Zookeeper 作爲分佈式鎖的應用

(本質也是數據的存儲功能、對數據的監聽的共同體現,鎖的數據集中存儲在 zk 了而已,其實可以是 redis,mysql,甚至是一個普通文件都是有一樣的,只不過 zk 的底層實現分佈式鎖的原理是監聽回調通知機制而已)

2)Zookeeper 作爲配置中心、註冊中心的應用

(本質也是數據的存儲功能、對數據的監聽的共同體現,只是存的數據是配置而已。由於 Zookeeper 對數據的一致性和對數據的監聽,可以把配置數據放在 zk,發生變化可以主動回調通知監聽者)

3)Zookeeper 作爲中間件元數據管理、主從選舉、分佈式系統的協調和通知的應用

(本質也是數據的存儲功能、對數據的監聽的共同體現,只是存的數據是中間的元數據而已。可以是 Kafka 的 broker,partition,topic 的基本元數據,也可以是 hdfs、canal、hbase 的元數據,數據發生變更通過監聽回調來維護,從而監聽變化進行 HA 選舉)

分佈式系統中需要集中存儲元數據,監聽數據變化做一些事情(可以是選舉,服務註冊發現,配置管理,元數據管理),就可以考慮用 Zookeeper。

而這些功能常常應用於開源、自研的分佈式系統或者很多分佈式的業務系統中。

初窺 Zookeeper 的架構原理

你在瞭解 Zookeeper 常見功能之後,肯定想知道它是怎麼實現這些功能的,它的底層原理是什麼。在之後的成長記中我會一步一步和你研究明白這些。而且可以讓你學到的不只是知識,還會有更多的觀念、思想。

Zookeeper 主要分爲客戶端和服務端兩大部分,主要涉及的原理可以概括如下:

Zookeeper 客戶端

1)一般是原生的 Java 客戶端或者 Curator 框架封裝的客戶端。

2) Curator 核心源碼原理

3) 客戶端的核心機制和原理(通信、session 維護等)

Zookeeper 的服務端

1)服務端的架構基本就是 Leader-Follower 的主從模式。

2)服務端有很多機制和原理:比如內存數據模型、節點角色劃分、基於 ZAB 協議選舉機制,通信機制是 NIO+BIO + 自定義 TCP 協議(Jute),Watcher 監聽機制,主從同步原理、崩潰恢復原理、保證數據一致性的機制、持久化機制等等。

3)Zookeeper 服務端集羣部署和運維

這其實上面這些就是 Zookeeper 核心的架構原理。這也是第一章的重點。會用一步一圖,簡單的方式讓你掌握或者回顧 Zookeeper 的服務端的架構原理和使用,而且也有一些金句甜點,給大家分享一些好的思想和觀念。至於客戶端的研究會放到第二章源碼原理篇中。敬請期待。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/pFG2Zl7WH62QBEBu-lUoEg