1. 程式人生 > >從Paxos到ZooKeeper(二)初識ZooKeeper

從Paxos到ZooKeeper(二)初識ZooKeeper

ZooKeeper是什麼

ZooKeeper是一個典型的分散式資料一致性解決方案


ZooKeeper特性

(一)順序一致性
從一個客戶端發起的請求會嚴格按照發起請求的順序應用到Zookeeper中
(二)原子性
所有事務請求處理的結果在叢集中各個機器上的應用情況是一樣的
(三)單一檢視
無論客戶端連線到哪個Zookeeper伺服器,其看到的資料模型是一致的
(四)可靠性
一旦事務處理完成,該事物引起的伺服器端狀態變更將保留下來
(五)一致性
Zookeeper僅僅能保證在一段時間內,客戶端能獲取到伺服器端的最新資料


ZooKeeper設計目標

(一)簡單的資料模型
ZooKeeper使得分散式程式通過一個共享的、樹形結構的名字空間進行相互協調
(二)構建叢集
在這裡插入圖片描述


(三)順序訪問
對於來自客戶端的請求,Zookeeper都會分配一個全域性唯一遞增編號,這個編號反應了所有事務操作的先後順序
(四)高效能
由於Zookpper的資料全量儲存於記憶體中,並且直接服務於客戶端的所有非事務請求,因此適合以讀操作為主的場景


基本概念

叢集角色

Leader:為客戶端提供讀和寫服務
Follower:提供讀服務,參與Leader選舉
Observer:提供讀服務,不參與Leader選舉,不參與寫操作的 “過半寫成功” 策略,在不影響寫效能的情況下提升了讀效能

會話:Session

Zookeeper中,一個客戶端連線是指客戶端和伺服器之間的一個TCP長連線,從第一次建立連線開始,客戶端的生命週期就開始了,通過這個連線,客戶端可以通過心跳檢測與伺服器保持有效會話,也可以向Zookeeper伺服器傳送請求並接受響應,同時可以通過連線接收來自伺服器的Watch事件通知
Session的sessionTimeout值設定一個客戶端的超時時間,因各種原因(網路故障等)導致客戶端連線斷開,只要在sessionTimeout規定時間內能夠連線上叢集中任意一臺伺服器,那麼之前的會話仍然有效

資料節點

(一)叢集的機器
我們稱之為機器節點
(二)資料節點——ZNode
永續性節點:一旦被建立,除非主動進行ZNode移除操作,否則ZNode節點將一直儲存在Zookeepr
臨時節點:跟客戶端會話繫結,一旦客戶端會話失效,那麼客戶端建立的所有臨時節點都會被移除

版本

對於每個ZNode,Zookeeper會為其維護一個Stat的資料結構,Stat中記錄了ZNode節點的三個版本號:version(當前ZNode版本)、cversion(當前ZNode子節點版本)、aversion(當前ZNode的ACL版本)

Watcher

ZooKeeper允許使用者在指定節點註冊一些Watcher,在一些特定的事件觸發的時候,ZooKeeper會通知到感興趣的客戶端上,該特性是ZooKeeper實現分散式協調服務的重要特性

ACL

ZooKeeper採用ACL策略進行許可權控制,定義了以下5種許可權
在這裡插入圖片描述
create和delete許可權是針對子節點的許可權控制