天天看點

分布式協調服務zookeeper基礎

目錄

  • 1.簡介
  • 2.資料結構
  • 3.原理及協定
  • 4.功能
  • 5.應用

1.簡介

    Zookeeper是一個分布式協調服務;它是為使用者的分布式應用程式提供協調服務。它本身就一個叢集(叢集數量為奇數,至少為三台),叢集的角色:Leader 和  follower  (Observer)。隻要叢集中有半數以上節點存活,叢集就能提供服務。

2.資料結構

    階層化的目錄結構,命名符合正常檔案系統規範,每個節點在zookeeper中叫做znode,并且其有一個唯一的路徑辨別,節點Znode可以包含資料和子節點,用戶端應用可以在節點上設定螢幕。

    Znode有兩種類型:短暫(ephemeral)(斷開連接配接自己删除),持久(persistent)(斷開連接配接不删除)。Znode有四種形式的目錄節點(預設是persistent )PERSISTENT、PERSISTENT_SEQUENTIAL(持久序列/test0000000019)、EPHEMERAL、EPHEMERAL_SEQUENTIAL。

    建立znode時設定順序辨別,znode名稱後會附加一個值,順序号是一個單調遞增的計數器,由父節點維護。在分布式系統中,順序号可以被用于為所有的事件進行全局排序,這樣用戶端可以通過順序号推斷事件的順序。

3.原理及協定

    Zookeeper雖然在配置檔案中并沒有指定master和slave,但是zookeeper工作時,是有一個節點為leader,其他則為follower。Leader是通過内部的選舉機制臨時産生的。

    選舉機制是zab協定,ZooKeeper為高可用的一緻性協調架構,自然的ZooKeeper也有着一緻性算法的實作,ZooKeeper使用的是ZAB協定作為資料一緻性的算法,ZAB(ZooKeeper Atomic Broadcast )全稱為:原子消息廣播協定;ZAB可以說是在Paxos算法基礎上進行了擴充改造而來的,ZAB協定設計了支援崩潰恢複,ZooKeeper使用單一主程序Leader用于處理用戶端所有事務請求,采用ZAB協定将伺服器數狀态以事務形式廣播到所有Follower上;由于事務間可能存在着依賴關系,ZAB協定保證Leader廣播的變更序列被順序的處理,:一個狀态被處理那麼它所依賴的狀态也已經提前被處理;ZAB協定支援的崩潰恢複可以保證在Leader程序崩潰的時候可以重新選出Leader并且保證資料的完整性;

  在ZooKeeper中所有的事務請求都由一個主伺服器也就是Leader來處理,其他伺服器為Follower,Leader将用戶端的事務請求轉換為事務Proposal,并且将Proposal分發給叢集中其他所有的Follower,然後Leader等待Follwer回報,當有過半數(>=N/2+1)的Follower回報資訊後,Leader将再次向叢集内Follower廣播Commit資訊,Commit為将之前的Proposal送出。

4.功能

    Zookeeper所提供的服務涵蓋:主從協調、伺服器節點動态上下線、統一配置管理、分布式共享鎖、統一名稱服務……

    雖然說可以提供各種服務,但是zookeeper在底層其實隻提供了兩個功能:

        管理(存儲,讀取)使用者程式送出的資料;

        并為使用者程式提供資料節點監聽服務;

5.應用

    實作分布式應用的(主節點HA)及用戶端動态更新主節點狀态

    分布式共享鎖的簡單實作

    配置檔案管理-solrcloud

    統一命名服務-dubbo

繼續閱讀