ZooKeeper的基本概念
ZooKeeper是幹啥的?
ZooKeeper是一個開源的分布式協調服務,他為分布式應用提供了高效且可靠的分布式協調服務,提供了諸如統一命名空間服務,配置服務和分布式鎖等分布式基礎服務。
ZooKeeper基本概念
集群角色
和Paxos算法中的集群角色類型,ZooKeeper中包含Leader、Follower和Observer三個角色;
通過一次選舉過程,被選舉的機器節點被稱為Leader,Leader機器為客戶端提供讀和寫服務;
Follower和Observer是集群中的其他機器節點,唯一的區別就是:Observer不參與Leader的選舉過程,也不參與寫操作的過半寫成功策略。
一個典型的ZooKeeper集群如下:
會話
會話就是一個客戶端與服務器之間的一個TCP長連接。客戶端和服務器的一切交互都是通過這個長連接進行的;
會話會在客戶端與服務器斷開鏈接後,如果經過了設點的sessionTimeout時間內沒有重新鏈接後失效。
節點
節點在ZeeKeeper中包含兩層含義:
- 集群中的一臺機器,我們成為機器節點;
- ZooKeeper數據模型中的數據單元,我們成為數據節點(ZNode)。
ZooKeeper的數據模型是內存中的一個ZNode數,由斜杠(/)進行分割的路徑,就是一個ZNode,每個ZNode上除了保存自己的數據內容,還保存一系列屬性信息;
ZooKeeper中的數據節點分為兩種:持久節點和臨時節點。
所謂的持久節點是指一旦這個ZNode創建成功,除非主動進行ZNode的移除操作,節點會一直保存在ZooKeeper上;而臨時節點的生命周期是跟客戶端的會話相關聯的,一旦客戶端會話失效,這個會話上的所有臨時節點都會被自動移除。
版本
ZooKeeper為每一個ZNode節點維護一個叫做Stat的數據結構,在Stat中維護了節點相關的三個版本:
- 當前ZNode的版本 version
- 當前ZNode子節點的版本 cversion
- 當前ZNode的ACL(Access Control Lists)版本 aversion
監聽器Watcher
ZooKeeper允許用戶在指定節點上註冊一些Watcher,並且在一些特定事件觸發的時候,ZooKeeper會通過事件通知到感興趣的客戶端上。
ACL(Access Control Lists)
ZooKeeper中定義了5中控制權限:
- CREATE:創建子節點的權限
- READ:獲取節點數據和子節點列表的權限
- WRITE:跟新節點數據的權限
- DELETE:刪除子節點的權限
- 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的基本概念