https://www.cnblogs.com/felixzh/p/5869212.htmlhtml
https://www.w3cschool.cn/zookeeper/zookeeper_overview.htmlnode
1、zookeeper定義linux
zookeeper是一個針對大型分佈式系統的可靠協調系統。服務器
1.1 它的功能包括:配置維護,名字服務,分佈式同步、組服務等。數據結構
1.2 它的目標就是封裝好複雜易出錯的關鍵服務,將簡單易用的接口和性能高效、功能穩定的系統提供給用戶。分佈式
2、zookeeper的特色性能
一、 最終一致性:爲客戶端展現同一視圖。server
二、可靠性:若是一條消息被一臺服務器接受,那麼它將被全部服務器接受。htm
三、實時性:zookeeper不能保證兩個客戶端同事獲得剛剛更新的數據,若是須要更新數據,應該在讀數據以前調用sync()接口。blog
四、等待無關(wait-free):慢的或者失效的client不干預快速的client的請求。
五、原子性:更新操做要麼成功,要麼失敗,沒有中間狀態。
六、順序性:對於全部server,同一消息發佈順序一致。
3、zookeeper角色
4、leader選舉
一、leader選舉採用paxos協議
二、paxos核心思想是:當多數server寫成功,那麼數據則寫入成功。
若是有3個服務器,那麼有兩個寫入成功,則數據寫入成功。
若是有4個或者5個服務器,有3個寫成功,則數據寫成功。
三、server數量通常爲奇數,如三、五、7等。
若是有3個服務器,最多容許1個掛掉。
若是有4個服務器,最多一樣容許3個掛掉。
四、zookeeper 的寫入操做。
5、zookeeper數據模型。
一、zookeeper 提供一個層次化目錄結構,命名規範符合常規linux文件目錄命名規範。
二、每一個節點在zookeeper中叫作znode,而且有一個惟一的路徑標識。
三、znode有兩種數據結構,短暫的(ephemeral)和持久的(persistent),節點包含數據和子節點。
四、znode數據包含多個版本。
五、客戶端能夠在節點上設置監視器(watch)。
六、znode不支持部分讀寫,須要一次性所有執行完成。
七、znode類型在建立時肯定,並不能修改。
八、znode有四種類型目錄節點,persistent, persistent_sequential, ephemeal, ephemeal_sequential
6、zookeeper統一命名服務。
一、在分佈式環境下,常常須要對應用/服務統一命名,便於識別不通服務。
1.1 相似於ip和域名的關係。
1.2 經過名稱來獲取資源或者服務的地址信息。
2 按照層次組織服務/應用名稱。
2.1 它能夠將服務名稱以及地址名稱寫到zookeeper中,客戶端經過服務名稱獲取服務列表。、
7、zookeeper--配置管理。
一、 分佈式環境下,須要常常配置文件管理和同步。
1.1 y一個集羣中,全部的節點配置和信息是一致的。
1.2 咱們對配置文件修改後,須要儘快同步到各個節點中。
2 配置管理能夠交給zookeeper實現。
2.1 可將配置文件寫入到一個znode中。
2.2 各個節點監聽這個znode。
2.3 一旦znode的配置文件被修改,zookeeper將通知到其它各個znode
8、zookeeper集羣管理。
一、分佈式環境中,咱們須要實時掌握每一個節點的狀態。
1.1 可根據節點狀態實時作出一些調整。
二、k可交由zookeeper實現。
2.1 可將zookeeper節點信息寫入到一個znode中。
2.2 監聽這個節點的實時變化。
9、 zookeeper分佈式通知與協調。
一、分佈式環境中,一個服務常常須要知道他的子服務狀態,
1.1 namenode需知道各個DataNode的狀態。
1.2 resource manager須要知道nodemanager狀態
二、zookeeper實現心跳監測機制,實時信息推送,至關於一個發佈/訂閱系統。
10、zookeeper分佈式鎖。
一、zookeeper是強一致性的
二、實現鎖的獨佔性。
三、控制鎖的時序。
11、分佈式隊列
分佈式隊列有兩種
一、當一個隊列所有都聚齊時,這個隊列才能夠用,不然這個隊列會一直等全部成員到達,這種成爲同步隊列。
1.1 當一個job由全部的task組成時,全部的任務完成後,job才運行。
1.2可爲job建立一個/job,而後在該目錄下,爲每一個完成task建立一個臨時的znode,當臨時節點的目錄數達到task總數時,則job表示完成。
二、隊列實現FIFO模式,實現生產者和消費者模型。