Zookeeper理解

1 Zookeeper介紹

        Zookeeper是一個開源分佈式應用協調服務。服務器

簡單來講,zookeeper = 通知機制 + 文件系統網絡

 zookeeper 爲何是奇數    

        zookeeper有這樣一個特性:集羣中只要有過半的機器是正常工做的,那麼整個集羣對外就是可用的。也就是說若是有2個zookeeper,那麼只要有1個死了zookeeper就不能用了,由於1沒有過半,因此2個zookeeper的死亡容忍度爲0;同理,要是有3個zookeeper,一個死了,還剩下2個正常的,過半了,因此3個zookeeper的容忍度爲1。分佈式

   

1.1 主要角色ide

來自服務器端的性能

>> 領導者(leader),負責進行投票的發起和決議,更新系統狀態(數據同步),發送心跳。學習

>> 學習者(learner),包括跟隨者(follower)和觀察者(observer)。spa

   >> 跟隨者(follower,用於接受客戶端請求、向客戶端返回結果,在選主過程當中參與投票。日誌

     >> 觀察者(Observer,能夠接受客戶端請求,將寫請求轉發給leader,但observer不參加投票過程,只同步leader的狀態,observer的目的是爲了擴展系統,提升讀取速度。orm

1)leader失效後會在follower中從新選舉新的leaderserver

2)每一個follower都和leader有鏈接,接受leader的數據更新操做

3)客戶端能夠鏈接到每一個server,每一個server的數據徹底相同

4)每一個節點的服務Server,記錄事務日誌和快照到持久存儲

1.2 工做原理

        Zookeeper的核心是原子廣播,這個機制保證了各個Server之間的同步。實現這個機制的協議叫作Zab協議。

        Zab協議有兩種模式,它們分別是恢復模式(選主)和廣播模式(同步)。當服務啓動或者在領導者崩潰後,Zab就進入了恢復模式,恢復模式不接受客戶端請求,當領導者被選舉出來,且大多數Server完成了和leader的狀態同步之後,恢復模式就結束了。狀態同步保證了leader和Server具備相同的系統狀態。

1.2.1 Zookeeper節點數據操做流程

1)寫操做

發起提案 proposal

quorum 法定人數

1)在Client向Follwer 或 Observer 發出一個寫的請求;

2)Follwer 或 Observer 把請求發送給Leader;

3)Leader接收到之後向全部follower發起提案;

4)Follwer收到提案後執行寫操做,而後把操做結果發送給Leader;

5)當多數follower返回提案結果後,leader會commit該提議,通知其餘Follower 和 Observer 同步信息;

6)Follwer 或Observer把請求結果返回給Client。

2)讀操做

1)在Client向Follwer 或 Observer 發出一個讀的請求;

2)Follwer 或 Observer 把請求結果返回給Client;

1.3 數據模型

1)ZooKeeper本質上是一個分佈式的小文件存儲系統;

2)Zookeeper表現爲一個分層的文件系統目錄樹結構(不一樣於文件系統的是,節點能夠有本身的數據,而文件系統中的目錄節點只有子節點),每一個節點能夠存少許的數據。

3)每一個節點稱作一個ZNode。每一個ZNode均可以經過其路徑惟一標識。

4)圓形節點能夠含有子節點,多邊形節點不能含有子節點。一個節點對應一個應用,節點存儲的數據就是應用須要的信息,好比HA狀態active、standby。

1.4 主要特色

最終一致性:client不論鏈接到哪一個Server,展現給它都是同一個視圖,這是zookeeper最重要的特性;

可靠性:具備簡單、健壯、良好的性能,若是消息被某一臺服務器接受,那麼它將被全部的服務器接受;

實時性:Zookeeper保證客戶端將在一個時間間隔範圍內得到服務器的更新信息,或者服務器失效的信息。 但因爲網絡延時等緣由,Zookeeper不能保證兩個客戶端能同時獲得剛更新的數據,若是須要最新數據,應該在讀數據以前調用sync()接口;

等待無關(wait-free):慢的或者失效的client,不得干預快速的client的請求,使得每一個client都能有效的等待;

原子性:更新只能成功或者失敗,沒有中間狀態;

順序性:按照客戶端發送請求的順序更新數據;

1.5 應用場景

數據發佈與訂閱

    應用配置集中到節點上,應用啓動時主動獲取,並在節點上註冊一個watcher,每次配置更新都會通知到應用。

發佈訂閱模式

命名空間服務

    分佈式命名服務,建立一個節點後,節點的路徑就是全局惟一的,能夠做爲全局名稱使用。

分佈式通知/協調

    不一樣的系統都監聽同一個節點,一旦有了更新,另外一個系統可以收到通知。

分佈式鎖

    Zookeeper能保證數據的強一致性,用戶任什麼時候候均可以相信集羣中每一個節點的數據都是相同的。一個用戶建立一個節點做爲鎖,另外一個用戶檢測該節點,若是存在,表明別的用戶已經鎖住,若是不存在,則能夠建立一個節點,表明擁有一個鎖。

[][][]

集羣管理

    每一個加入集羣的機器都建立一個節點,寫入本身的狀態。監控父節點的用戶會收到通知,進行相應的處理。離開時刪除節點,監控父節點的用戶一樣會收到通知。


相關文章
相關標籤/搜索