1. 程式人生 > >ZooKeeper的基本概念

ZooKeeper的基本概念

apache 自動 create 屬性 存在 擁有 基本概念 刪除 自己

ZooKeeper是幹啥的?

ZooKeeper是一個開源的分布式協調服務,他為分布式應用提供了高效且可靠的分布式協調服務,提供了諸如統一命名空間服務,配置服務和分布式鎖等分布式基礎服務。

ZooKeeper基本概念

集群角色

和Paxos算法中的集群角色類型,ZooKeeper中包含Leader、Follower和Observer三個角色;

通過一次選舉過程,被選舉的機器節點被稱為Leader,Leader機器為客戶端提供讀和寫服務;

Follower和Observer是集群中的其他機器節點,唯一的區別就是:Observer不參與Leader的選舉過程,也不參與寫操作的過半寫成功策略。

一個典型的ZooKeeper集群如下:

技術分享

會話

會話就是一個客戶端與服務器之間的一個TCP長連接。客戶端和服務器的一切交互都是通過這個長連接進行的;

會話會在客戶端與服務器斷開鏈接後,如果經過了設點的sessionTimeout時間內沒有重新鏈接後失效。

節點

節點在ZeeKeeper中包含兩層含義:

  1. 集群中的一臺機器,我們成為機器節點;
  2. ZooKeeper數據模型中的數據單元,我們成為數據節點(ZNode)。

ZooKeeper的數據模型是內存中的一個ZNode數,由斜杠(/)進行分割的路徑,就是一個ZNode,每個ZNode上除了保存自己的數據內容,還保存一系列屬性信息;

ZooKeeper中的數據節點分為兩種:持久節點和臨時節點。

所謂的持久節點是指一旦這個ZNode創建成功,除非主動進行ZNode的移除操作,節點會一直保存在ZooKeeper上;而臨時節點的生命周期是跟客戶端的會話相關聯的,一旦客戶端會話失效,這個會話上的所有臨時節點都會被自動移除。

版本

ZooKeeper為每一個ZNode節點維護一個叫做Stat的數據結構,在Stat中維護了節點相關的三個版本:

  1. 當前ZNode的版本 version
  2. 當前ZNode子節點的版本 cversion
  3. 當前ZNode的ACL(Access Control Lists)版本 aversion

監聽器Watcher

ZooKeeper允許用戶在指定節點上註冊一些Watcher,並且在一些特定事件觸發的時候,ZooKeeper會通過事件通知到感興趣的客戶端上。

ACL(Access Control Lists)

ZooKeeper中定義了5中控制權限:

  1. CREATE:創建子節點的權限
  2. READ:獲取節點數據和子節點列表的權限
  3. WRITE:跟新節點數據的權限
  4. DELETE:刪除子節點的權限
  5. ADMIN:設置節點ACL的權限。

其中CREATE和DELETE這兩種權限都是針對子節點的權限控制。

ZooKeeper的數據模型

上面有提到ZooKeeper的數據模型是一個ZNode節點樹,是一個類型與標準文件系統的層次結構,也是使用斜杠(/)進行分割,如下圖:

技術分享

在ZooKeeper中每一個節點都可以使用其路徑唯一標識,如節點p_1的標識為:/app1/p_1

每個ZNode節點都可以存儲自己的數據,還可以擁有自己的子節點目錄。

參考

http://zookeeper.apache.org/doc/trunk/zookeeperOver.html

《從Paxos到ZooKeeper分布式一致性原理與實踐》

https://www.ibm.com/developerworks/cn/opensource/os-cn-zookeeper/

http://www.cnblogs.com/sunddenly/p/4138580.html

ZooKeeper的基本概念