ZooKeeper 是一個典型的分佈式數據一致性解決方案,分佈式應用程序能夠基於 ZooKeeper 實現諸如數據發佈/訂閱、負載均衡、命名服務、分佈式協調/通知、集羣管理、Master 選舉、分佈式鎖和分佈式隊列等功能。node
服務生產者將本身提供的服務註冊到Zookeeper中心,服務的消費者在進行服務調用的時候先到Zookeeper中查找服務,獲取到服務生產者的詳細信息以後,再去調用服務生產者的內容與數據。linux
以下圖所示,在 Dubbo架構中 Zookeeper 就擔任了註冊中心這一角色。bash
相信你們也都知道事務是怎麼回事,事務的ACID四大特性等等,可是在zookeeper中的事務和咱們以前所認識的事務有點不太同樣。服務器
在Zookeeper中,事務是指可以改變 ZooKeeper 服務器狀態的操做,咱們也稱之爲事務操做或更新操做,通常包括數據節點建立與刪除、數據節點內容更新和客戶端會話建立與失效等操做。架構
對於每個事務請求,ZooKeeper 都會爲其分配一個全局惟一的事務ID,用 ZXID 來表示,一般是一個64位的數字。每個ZXID對應一次更新操做,從這些 ZXID 中能夠間接地識別出Zookeeper處理這些更新操做請求的全局順序。
負載均衡
[zk: localhost:2181(CONNECTED) 2] get /dubbo
null
cZxid = 0x2
ctime = Tue May 21 21:37:08 CST 2019
mZxid = 0x2
mtime = Tue May 21 21:37:08 CST 2019
pZxid = 0x3b
cversion = 3
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 1
[zk: localhost:2181(CONNECTED) 3] 複製代碼
關於數據節點的狀態信息說明(也就是對Stat 類中的各字段進行說明),能夠參考下圖(圖源:《從Paxos到Zookeeper 分佈式一致性原理與實踐》)。框架
進入安裝 ZooKeeper文件夾的 bin 目錄下執行下面的命令鏈接 ZooKeeper 服務(Linux環境下)(鏈接以前首選要肯定你的 ZooKeeper 服務已經啓動成功)。分佈式
./zkCli.sh -server 127.0.0.1:2181複製代碼
[zk: localhost:2181(CONNECTED) 0] create /node1 「node1」複製代碼
[zk: localhost:2181(CONNECTED) 1] create /node1/node1.1 123Created /node1/node1.1
複製代碼
[zk: localhost:2181(CONNECTED) 11] set /node1 "set node1"複製代碼
[zk: localhost:2181(CONNECTED) 7] get /node1
set node1
cZxid = 0x4d
ctime = Thu May 30 10:47:02 CST 2019
mZxid = 0x4f
mtime = Thu May 30 10:49:45 CST 2019
pZxid = 0x4e
cversion = 1
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 9
numChildren = 1 複製代碼
[zk: localhost:2181(CONNECTED) 3] ls /[dubbo, zookeeper, node1]
複製代碼
[zk: localhost:2181(CONNECTED) 5] ls /node1[node1.1]複製代碼
[zk: localhost:2181(CONNECTED) 4] get /node1 watch複製代碼
[zk: localhost:2181(CONNECTED) 1] stat /node1
cZxid = 0x4d
ctime = Thu May 30 10:47:02 CST 2019
mZxid = 0x4f
mtime = Thu May 30 10:49:45 CST 2019
pZxid = 0x4e
cversion = 1
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 9
numChildren = 1
複製代碼
ls2 命令返回的信息包括2部分:子節點列表 + 當前節點的stat信息。oop
[zk: localhost:2181(CONNECTED) 14] ls2 /node1
[node1.1]
cZxid = 0x4d
ctime = Thu May 30 10:47:02 CST 2019
mZxid = 0x4f
mtime = Thu May 30 10:49:45 CST 2019
pZxid = 0x4e
cversion = 1
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 9
numChildren = 1
複製代碼
[zk: localhost:2181(CONNECTED) 3] delete /node1/node1.1複製代碼
[zk: localhost:2181(CONNECTED) 5] rmr /node1複製代碼
1.Znode有兩種類型:ui
2.Znode有四種形式的目錄節點(默認是persistent )
3.建立znode時設置順序標識,znode名稱後會附加一個值,順序號是一個單調遞增的計數器,由父節點維護。
今天帶你們瞭解了zookeeper是什麼以及對zookeeper節點的一些操做,節點的特性跟Linux的文件系統其實真的十分類似,很好理解。本篇文章就是就是對zookeeper的一個入門介紹,下篇我會對zookeeper的一些高級機制進行講解。