聊一聊zookeeper分布式框架和主要功能

2021-10-09 19:24:44 字數 1855 閱讀 4352

目錄前言

基本概念

集群角色

資料節點

session會話

watcher***

客戶端工具

zookeeper是乙個高可用、高效能的開源的分布式框架,具***客戶端順序一致性,原子性,順序訪問等特點。通過zookeeper可以實現發布/訂閱,leader選舉,分布式鎖,分布式協調。元資料管理等功能。

zookeeper 在架構設計上包括:集群角色,資料節點,watcher***,acl許可權控制等(zookeeper官方**也有介紹

接下來我們分別講一下幾個比較重要的概念。

zookeeper 將集群節點分為三種角色:

leader角色:負責處理讀寫請求,同步資料follower節點;

follower角色:參與leader選舉,參與leader寫時的資料同步(過半節點寫入),。負責處理讀請求,而寫請求需要**給leader節點去處理;

observer角色:不參與leader選舉,不參與leader寫時的資料同步(過半節點寫入),只提供讀服務和同步leader節點資料。

zookeeper集群只有leader節點才可以處理寫請求,其他節點只能提供讀服務,因此,zookeeper集群的寫效能並不高,適合讀多寫少的場景。

這裡可思考一下,zookeeper集群是如何通過zab協議進行leader選舉的。

1.zookeeper資料結構是樹狀結構,每乙個資料就是乙個節點;

2.節點分為持久節點和臨時節點,持久節點會永久儲存,除非主動刪除,臨時節點只在session會話時間內有效,session會話結束了臨時節點會被刪掉。

3.節點又分為順序節點和正常節點,對於順序節點每次建立zookeeper服務都會在這個節點後面加上乙個嚴格遞增的數字。

4.只有leader節點才可以建立資料節點,如果客戶端請求follower節點建立資料節點,follower節點必須將建立請求**給leader節點。

這裡可以思考下,zookeeper集群是如何通過zab協議同部資料的。

客戶端和zookeeper服務建立連線之後,zookeeper服務會為客戶端建立乙個session會話儲存到記憶體,並為客戶端分配乙個sessionid,在sessiontimeout時間內這個會話都是有效的,客戶端通過傳送讀寫請求和心跳請求都會更新sessiontimeout的超時時間,如果客戶端和zookeeper服務端超過sessiontimeout時間都沒有進行網路通訊,zookeeper服務端和客戶端都會關閉當前連線,session會話就會失效。

這裡不知道大家有沒有疑問,客戶端和follower節點連線之後也會建立session會話,而臨時節點也只能有leader節點才能建立,那如果客戶端和follower節點連線斷開之後關閉session,leader節點又如何感知而刪除臨時節點的呢?

客戶端通過***,註冊一些感興趣的事件,當zookeeper服務端有事件變更,便會通知到客戶端。這裡需要重要的是,zookeeper觸發watch事件之後,便會將當前watcher刪除,如果需要重複監聽某乙個事件,我們在得到通知之後,再次註冊相同的watcher***。

zookeeper 提供了原生的zookeeper客戶端api,功能相對簡單,沒有提供失敗重試機制,自動註冊watcher***機制,使用起來很不方便。我們生產常用curator 框架作為zookeeper的客戶端工具,該工具提供leader選舉,分布式鎖,可重複註冊***,快取,計時器等功能,功能強大,大小公司皆宜,深受我這種比較懶的程式設計師喜愛。

(curator 官方位址介紹了如何使用這些功能:

聊一聊如何用C 輕鬆完成乙個TCC分布式事務

銀行跨行轉賬業務是乙個典型分布式事務場景,假設 a 需要跨行轉賬給 b,那麼就涉及兩個銀行的資料,無法通過乙個資料庫的本地事務保證轉賬的 acid 只能夠通過分布式事務來解決。在 聊一聊如何用c 輕鬆完成乙個saga分布式事務 中介紹了借助 dtm 用 saga 事務模式解決了上面的銀行跨行轉賬業務...

細聊分布式ID生成方法

幾乎所有的業務系統,都有生成乙個記錄標識的需求,例如 訊息標識 message id 訂單標識 order id 帖子標識 tiezi id 這個記錄標識往往就是資料庫中的唯一主鍵,資料庫上會建立聚集索引 cluster index 即在物理儲存上以這個字段排序。這個記錄標識上的查詢,往往又有分頁或...

架構 細聊分布式ID生成方法

幾乎所有的業務系統,都有 生成乙個記錄標識的需求 例如 1 訊息標識 message id 2 訂單標識 order id 3 帖子標識 tiezi id 這個記錄標識往往就是資料庫中的唯一主鍵 資料庫上會建立聚集索引 cluster index 即在物理儲存上以這個字段排序。這個記錄標識上的查詢,...