能不能整明白分布式系統,關鍵在於你對Zookeeper理解有多深

追逐仰望星空 發佈 2020-05-12T20:11:01+00:00

01 前言Zookeeper是一個開源的分布式協調服務,目前由Apache進行維護。Zookeeper可以用於實現分布式系統中常見的發布/訂閱、負載均衡、命令服務、分布式協調/通知、集群管理、Master選舉、分布式鎖和分布式隊列等功能。

01 前言

Zookeeper是一個開源的分布式協調服務,目前由Apache進行維護。Zookeeper可以用於實現分布式系統中常見的發布/訂閱、負載均衡、命令服務、分布式協調/通知、集群管理、Master選舉、分布式鎖和分布式隊列等功能。它具有以下特性:

  • 順序一致性 :從一個客戶端發起的事務請求,最終都會嚴格按照其發起順序被應用到Zookeeper中;
  • 原子性 :所有事務請求的處理結果在整個集群中所有機器上都是一致的;不存在部分機器應用了該事務,而另一部分沒有應用的情況;
  • 單一視圖 :所有客戶端看到的服務端數據模型都是一致的;
  • 可靠性 :一旦服務端成功應用了一個事務,則其引起的改變會一直保留,直到被另外一個事務所更改;
  • 實時性 :一旦一個事務被成功應用後,Zookeeper可以保證客戶端立即可以讀取到這個事務變更後的最新狀態的數據。

很多中間件,比如Kafka、Hadoop、HBase,都用到了 Zookeeper,因此它在分布式系統里有著無可替代的地位,而且Zookeeper有如下四大設計目標(簡單的數據模型、構建集群、順序訪問、高性能高可用):

  • 目標一:簡單的數據模型

Zookeeper通過樹形結構來存儲數據,它由一系列被稱為ZNode的數據節點組成,類似於常見的文件系統。不過和常見的文件系統不同,Zookeeper將數據全量存儲在內存中,以此來實現高吞吐,減少訪問延遲。

  • 目標二:構建集群

可以由一組Zookeeper服務構成Zookeeper集群,集群中每台機器都會單獨在內存中維護自身的狀態,並且每台機器之間都保持著通訊,只要集群中有半數機器能夠正常工作,那麼整個集群就可以正常提供服務。

  • 順序訪問

對於來自客戶端的每個更新請求,Zookeeper都會分配一個全局唯一的遞增ID,這個ID反映了所有事務請求的先後順序。

  • 目標四:高性能高可用

ZooKeeper將數據存全量儲在內存中以保持高性能,並通過服務集群來實現高可用,由於Zookeeper的所有更新和刪除都是基於事務的,所以其在讀多寫少的應用場景中有著很高的性能表現。

說了這麼多,其實就是一句話:能不能整明白分布式系統,ZooKeeper真的是太太重要了!

這幾天在學習的時候整理了一些ZooKeeper的學習資料和筆記,個人認為還是不錯,想著資源共享學習,今天就拿出來看看,相信對你而言還是有些學習價值的。

  • 《ZK開發手冊》
  • 《ZooKeeper-分布式過程協同技術詳解》
  • 《ZK面試:27連問》

注意:以下介紹《ZooKeeper-分布式過程協同技術詳解》《ZK開發手冊》《ZK面試:27連問》因為篇幅的限制,基本上是指對內容做一個大概的介紹以及目錄和一些內容的截圖展示,不過都是有整理原文件的,感興趣的朋友麻煩轉發一下下啦,然後私信 @追逐仰望星空 關鍵詞 「ZK」 即可回復免費下載的方式啦!

02 《ZooKeeper-分布式過程協同技術詳解》

本書適用於分布式系統的開發人員,以及使用ZooKeeper進行生產經營的應用程式運維人員。我們假設讀者具備Java語言的知識,並且本書為讀者提供了關於分布式系統中概念的大量背景知識,以便你更好地使用ZooKeeper。

第一部分闡述了Apache ZooKeeper這類系統的設計目的和動機,並介紹分布式系統的一些必要背景知識。

  • 第1章介紹了ZooKeeper可以做什麼,以及其設計如何支撐這些任務。
  • 第2章介紹了基本概念和基本組成模塊,並通過命令行工具的具體操作介紹ZooKeeper可以做什麼。

第二部分闡述程式設計師所需要掌握的ZooKeeper庫調用方法和編程技巧,雖然對系統運維人員來說也有一定價值,但也可以不選擇閱讀。這一部分主要以Java語言的API為主,因為Java是非常流行的開發語言,如果你之前使用其他開發語言,可以通過這一部分內容來學習基本的技術和方法調用,之後通過其他語言來實現。另外,我們也為C語言的應用開發人員提供了一章內容的開發方法

  • 第3章介紹Java語言的API。
  • 第4章解釋如何跟蹤和處理ZooKeeper中的狀態變更情況。
  • 第5章介紹如何在系統或網絡故障時恢復應用。
  • 第6章介紹為了避免故障要注意的一些繁雜卻很重要的場景。
  • 第7章介紹C語言版的API,該章也可以作為非Java語言實現的ZooKeeper API的基礎,對非Java語言的開發人員非常有幫助。
  • 第8章介紹一款更高層級的封裝的ZooKeeper接口。

第三部分主要適用於ZooKeeper的系統運維人員,尤其在第9章章中即便對開發人員也很有價值。

  • 第9章介紹ZooKeeper的作者們在設計時所採用的方案,這些知識對運維管理非常有幫助。
  • 第10章介紹如何對ZooKeeper進行配置。

03 《ZK開發手冊》

這本ZK開發手冊總共有19章,前兩章是一些簡介介紹,這裡就不做過多的解釋的了,重點在於後面的17章,一起來看看吧。


第3,4,5,6,7章分別是:基礎、組件活動周期、事件監聽及處理、ZK用戶介面標記語言

第8,9,10,11,12,13,14,15,16章分別是數據綁定、在ZUML中使用XHTML組件集、宏組件、高級特性、性能提示、其他設備和輸出格式、國際化、資料庫連接、整合Hibernate

最後三章:17,18,19章分別是整合Spring、Portal整合、ZK之外


04 《ZK面試:27連問》

  1. ZooKeeper 提供了什麼?
  2. Zookeeper 文件系統?
  3. ZAB 協議?
  4. 四種類型的數據節點 Znode
  5. Zookeeper Watcher 機制 -- 數據變更通知
  6. 客戶端註冊 Watcher 實現
  7. 服務端處理 Watcher 實現
  8. 客戶端回調 Watcher
  9. ACL 權限控制機制
  10. Chroot 特性
  11. 伺服器角色
  12. 會話管理
  13. Zookeeper 下 Server 工作狀態
  14. 數據同步
  15. zookeeper 是如何保證事務的順序一致性的?
  16. 分布式集群中為什麼會有 Master?
  17. zk 節點宕機如何處理?
  18. zookeeper 負載均衡和 nginx 負載均衡區別
  19. Zookeeper 有哪幾種幾種部署模式?
  20. 集群最少要幾台機器,集群規則是怎樣的?
  21. 集群支持動態添加機器嗎?
  22. Zookeeper 對節點的 watch監聽通知是永久的嗎?為什麼不是永久的?
  23. Zookeeper 的 java 客戶端都有哪些?
  24. chubby 是什麼,和 zookeeper 比你怎麼看?
  25. 說幾個 zookeeper 常用的命令。
  26. ZAB 和 Paxos 算法的聯繫與區別?
  27. Zookeeper 的典型應用場景?

能不能整明白分布式系統,關鍵在於你對Zookeeper理解有多深,咱們今天分享的ZK知識就這麼多,如果你沒有這些筆記與資料去學習,小編這裡可以免費分享給你,轉發+轉發+私信我關鍵詞 「ZK」 即可回覆你下載原文件《ZooKeeper-分布式過程協同技術詳解》《ZK開發手冊》《ZK面試:27連問》的方式!!

注意啦,再強調一次,轉發+私信我「ZK」,是「ZK」!!

關鍵字: