1. 程式人生 > >ZooKeeper學習(一)Zookeeper簡單介紹

ZooKeeper學習(一)Zookeeper簡單介紹

分散式系統:是若干獨立計算機的集合,這計算機對使用者來說就像單個相關係統。

       (1)提升效能和併發,操作被分發到不同的分片,相互獨立

  (2)提升系統的可用性,即使部分分片不能用,其他分片不會受到影響

        (3)提升系統的擴充套件性。

   

Zookeeper:一種用於分散式應用程式的高效能協調服務(維護配置資訊,命名,提供分散式同步和提供組服務。並且是開源的分散式的,為分散式應用提供協調服務的Apache專案

從設計模式分析:一個基於觀察者模式設計

的分散式服務管理框架,它負責儲存和管理相關資料(如註冊在其上面各個伺服器的狀態和資料的變化等),然後接受觀察者的註冊,一旦這些資料的狀態發生變化,Zookeeper就將負責通知已經在Zookeeper上註冊的那些觀察者做出相應的反應,從而實現叢集中類似Master/Slave管理模式

Zookeeper工作機制:

Zookeeper=檔案系統+通知機制

Zookeeper結構特點: 

  • Zookeeper:一個領導者(leader),多個跟隨者(follower)組成的叢集。
  • Leader負責進行投票的發起和決議,更新系統狀態
  • Follower用於接收客戶請求並向客戶端返回結果
    ,在選舉Leader過程中參與投票
  • 叢集中只要有半數以上節點存活,Zookeeper叢集就能正常服務。建議叢集數量為奇數
  • 全域性資料一致:每個server儲存一份相同的資料副本,client無論連線到哪個server,資料都是一致的。同步資料
  • 更新請求順序進行,來自同一個client的更新請求按其傳送順序依次執行
  • 資料更新原子性,一次資料更新要麼成功,要麼失敗。
  • 實時性,在一定時間範圍內,client能讀到最新資料。 

 Zookeeper資料模型:

    ZooKeeper資料模型的結構與Unix檔案系統很類似,整體上可以看作是一棵樹,每個節點稱做一個ZNode

。每一個ZNode預設能夠儲存1MB的資料,每個ZNode都可以通過其路徑唯一標識 路徑是絕對路徑

   

ZooKeeper樹中的節點特點

1.ZooKeeper中每一個節點Zonde通過路徑引用,該路徑必須是絕對的,必須由斜槓字元來開頭,並且必須是唯一的,同時路徑由Unicode字串組成,並且有一些限制。字串"/zookeeper"用以儲存管理資訊,比如關鍵配額資訊。另外,

  • 空字元(\ u0000)不能是路徑名的一部分。(這會導致C綁定出現問題。)

  • 無法使用以下字元,因為它們無法正常顯示或以令人困惑的方式呈現:\ u0001 - \ u001F和\ u007F - \ u009F。

  • 不允許使用以下字元:\ ud800 - uF8FF,\ uFFF0 - uFFFF。

2. ZooKeeper中每一個節點Zonde由三部分組成:stat:此為狀態資訊, 描述該Znode的版本(每次znode的資料更改時,版本號都會增加), 許可權(acl)等資訊;data:與該Znode關聯的資料;children:該Znode下的子節點。其用來管理協調資料,比如分散式應用中的配置檔案資訊、狀態資訊、彙集位置等等。這些資料的共同特性就是它們都是很小的資料,通常以KB為大小單位

3.每一個節點還存在監控(watch),watch監控節點狀態,當其發生改變時(Znode的增、刪、改)將會觸發watch所對應的操作。當watch被觸發時,ZooKeeper將會向客戶端傳送且僅傳送一條通知,因為watch只能被觸發一次,這樣可以減少網路流量。

4.儲存在名稱空間中每個znode的資料以原子方式讀取和寫入。讀取獲取與znode關聯的所有資料位元組,寫入替換所有資料。每個節點都有一個訪問控制列表(ACL),限制誰可以做什麼。

 5.Znode有兩種型別:短暫/持久

   短暫(ephemeral):客戶端和伺服器端斷開連線後,建立的節點自動刪除

   持久(persistent):客戶端和伺服器端斷開連線後,建立的節點不刪除

6. Znode上可以新增順序標識,形成順序節點,新增方式是在路徑結尾新增一個遞增的計數。這個計數對於此節點的父節點來說是唯一的,它的格式為"%10d"(10位數字,沒有數值的數位用0補充,例如"0000000001")。當計數值大於232-1時,計數器將溢位。

ZooKeeper的API:

操作 描述
create 船艦Zonde(父節點必須存在)
delete 刪除節點(節點沒有子節點)
exists 驗證節點是否存在,並候取它的元資料
getACL/setACL 獲取/設定節點許可權
getChildren 獲取節點所有子節點的列表
getData/setData 獲取/設定節點相關資料
sync 是客戶端的節點檢視與zookeeper同步
  • update操作是有限制的。delete或setData必須明確要更新的Znode的版本號,可以呼叫exists找到。如果版本號不匹配,更新將會失敗。
  • update操作是非阻塞式的。因此客戶端如果失去了一個更新(由於另一個程序在同時更新這個Znode),他可以在不阻塞其他程序執行的情況下,選擇重新嘗試或進行其他操作。
  • 檔案非常的小置使整體讀寫的,所以不需要開啟、關閉或是查詢的操作。