1. 程式人生 > >zookeeper分散式協調服務

zookeeper分散式協調服務

分散式協調技術

隨著發展我們在一臺機器上執行的程式任務越來越重,資源請求越來越大,根據不同的情況主要有如下的解決方案一個是負載技術,一個是分散式技術
負載技術:主要解決資源使用壓力
分散式技術:主要是把應用任務橫向切分,跑在不同的機器上通過rpc協作為外部提供整體服務。
在以上的技術中主要面臨的問題有:1,資料同步,2,分散式程序協作
zookeeper是其中一種可以為上述問題提供有效的解決方案的技術框架,所以我們下面先認識它。

ZooKeeper架構

這裡寫圖片描述
核心元件
Server:zk叢集服務端,數目一般選擇為奇數(3,5,7)
Leader:通過選舉演算法確定,zk中的選舉是精華,本人能力有限,怕說不清楚,所有不做討論,作用發起投票,下達決議,更新系統
Follower:接受客戶連線,讀寫請求,發給leader,參與投票,返回客戶端結果
Observer:同步leader
Client:使用者,發起連線,讀寫請求。

ZooKeeper資料結構

這裡寫圖片描述

層次化的目錄結構

每個節點在ZK中叫做znode
znode可以包含資料和子節點(臨時型別的節點不能有子節點)
znode中的資料可以有多個版本,可以通過版本查詢資料
znode包含臨時(ephemeral)和持久(persistent)兩種型別每種型別都支援順序節點
znode的型別在建立時確定後就不能修改

節點屬性

這裡寫圖片描述
cZxid: 是節點的建立時間所對應的Zxid格式時間戳。
mZxid:是節點的修改時間所對應的Zxid格式時間戳。
version:節點資料版本號
cversion:子節點版本號
aversion:節點所擁有的ACL版本號

ZooKeeper服務中操作

這裡寫圖片描述

Watch觸發器

這裡寫圖片描述
ZooKeeper可以為所有的讀操作設定watch,這些讀操作包括:exists()、getChildren()及getData()。watch事件是一次性的觸發器,當watch的物件狀態發生改變時,將會觸發此物件上watch所對應的事件。watch事件將被非同步地傳送給客戶端,並且ZooKeeper為watch機制提供了有序的一致性保證。理論上,客戶端接收watch事件的時間要快於其看到watch物件狀態變化的時間。

哪些框架使用到了ZooKeeper

HDFS HA
HBase
Kafka
Spark
dubbo
……

ZooKeeper應用舉例

至此你瞭解了zk,那麼我們能做什麼?
1,選舉
2,分散式鎖
3,分散式佇列
4,分散式事務
5,分散式隔離
6,資料同步
…..
選舉,分散式鎖可以應用在具有單點故障的問題中利用選舉確定唯一的active,利用分散式鎖防止“腦裂”
分散式佇列可應用在分散式共享資源消費中
分散式事務,可以應用在rpc協作中
由於剛開始寫部落格,技術有限很多想法不能表述,上面的實現如果你感興趣可以和我討論!!!