zookeeper系列(一)

1 概述

zookeeper是分佈式服務框架,是hadoop Ecosystem中組件。 zookeeper主要應用包括:集羣管理、統一命名服務、分佈式配置管理、分佈式消息隊列、分佈式鎖、分佈式通知等。

2 zookeeper基本概念

2.1 數據模型

zookeeper中的數據模型跟linux系統下目錄結構相似,根目錄/,每一個節點爲zNode,每一個zNode根據唯一的路徑標識,如圖中標識所示;在每一個zNode上可以存儲少量數據(默認1M),正是由於這個特性,zookeeper可以作爲dubbo的名字服務、HBase的組管理服務等。每一個zNode可以存儲ACL(權限訪問)信息,各個zNode節點的ACL(access control list )權限相互隔離,互不影響。

2.2  zNode

zNode可以分爲兩類:
Regular zNode(常規型節點) :  zookeeper的client創建之後,在進行顯式刪除。
Ephemeral zNode(臨時型節點):創建之後,session失效或者client刪除,節點都會消失

2.3 session

client與zookeeper server 之間的一次會話,如果client與server之間通信足夠頻繁,client 不會每隔t/3(t爲zoo.cfg中配置的時間,默認爲3s)給server發送心跳檢測;若通信不頻繁,client發送心跳信息之後,client在2t/3時間之後沒有收到server端回覆,就認爲server宕機,會移動到zookeeper cluster中另一個server,這個過程對客戶端是透明的。

2.4 watcher

zookeeper對Node的增、刪、改、查都可以出發監聽
watch事件一次性觸發器,當watch的數據發生改變時,會通知watcher
watch事件異步發送到watcher

3 zookeeper體系結構

server端fast fail特性,非常健壯。無單點。超過半數的server掛掉纔會影響服務。
集羣角色:
Leader:爲客戶端提供寫服務和讀服務
Follower:讀服務,所有寫服務都要轉交給Leader,參與選舉
Observer:讀服務,不參與選舉,一般是爲了增強zk集羣的讀請求併發能力。   
zookeeper支持WAL(write-ahead-log)和snapshot,對於每一步操作,先會記錄到日記中,之後更新到內存,最後通知client結果;另外還會定期將內存中的目錄樹snapshot到硬盤。    

4 應用場景
    
4.1 分佈式配置管理

發佈與訂閱就是分佈式配置管理,就是將數據發佈到zk節點上,供訂閱者動態獲取數據,實現配置信息的集中管理和動態更新
例如全局的配置

4.2 分佈式命名服務

名字作爲分佈式系統中的資源,可以是機器的名字、提供服務的地址、完成某一功能的對象。
dubbo就是該應用的一個實現,zookeeper中記錄着提供者的url地址,具體實現爲:dubbo的服務提供者(provider)再啓動的時候會將自己的url寫到zookeeper的 /dubbo/${serviceName}/providers目錄下寫下自己的提供url,dubbo的服務消費者(consumer)啓動的時候會watcher 服務提供者/dubbo/${serviceName}/providers,並在zk的/dubbo/${serviceName}/consumers目錄寫下自己的消費url,所有向zookeeper寫下的節點都是臨時型的,這樣可以保證服務提供者和消費者可以自動感知。

4.3 分佈式通知/協調

zk的watcher註冊與異步通知機制,實現分佈式環境下不同系統之間的通知與協調,實現對數據變更的實時處理
不同系統都對zk上同一個znode進行註冊,監聽znode的變化,其中一個update,那麼其餘系統能夠收到通知

4.4 分佈式鎖
        
zk可以保證數據的強一致性,也就是說zk集羣中任意節點上相同znode的數據一定是相同的
共享鎖、排它鎖        
效率過低,實際項目中基本不用

4.5 集羣管理與選舉
        
監控系統向zookeeper的某一個節點watch變化,當新加進來一個節點或者某一個節點宕機之後,該節點變化會觸發watcher事件,這樣監控系統就可以動態感知集羣的狀態。
HBase集羣利用zookeeper集羣的選舉算法來產生HMaster。

4.6 分佈式隊列

基本上不用
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章