1毡惜、Zookeeper簡介
Zookeeper是一個高性能的分布式一致系統(tǒng),在分布式系統(tǒng)中有著廣泛的應(yīng)用斯撮∈疲基于它,可以實現(xiàn)分布式同步吮成、配置管理、命名空間管理等眾多功能辜梳,是分布式系統(tǒng)中常見的基礎(chǔ)系統(tǒng)粱甫。
Zookeeper主要用來解決分布式集群中應(yīng)用系統(tǒng)的一致性問題,它有著樹狀結(jié)構(gòu)的節(jié)點作瞄,每個節(jié)點均可存儲少量的數(shù)據(jù)茶宵。同時,用戶可以修改和訂閱節(jié)點中的內(nèi)容宗挥。分布式系統(tǒng)中的節(jié)點通過監(jiān)控這些數(shù)據(jù)狀態(tài)的變化乌庶,從而可以達(dá)到基于數(shù)據(jù)的集群管理种蝶。
從設(shè)計模式角度來看,Zookeeper是基于觀察者模式實現(xiàn)的瞒大◇φ鳎可以把它作為一個信息的中心。使用該服務(wù)的生產(chǎn)者和消費者都以Zookeeper中的數(shù)據(jù)為基準(zhǔn)透敌。即:
- 生產(chǎn)者可以改變Zookeeper的節(jié)點盯滚,或者節(jié)點上的數(shù)據(jù)
- 消費者通過訂閱Zookeeper節(jié)點,從而能夠在節(jié)點變動時收到通知
基于這樣的機(jī)制酗电,將Zookeeper作為信息中心魄藕,便可以實現(xiàn)分布式系統(tǒng)中節(jié)點狀態(tài)的最終一致性。
2撵术、特點
Zookeeper具有以下特點:
- 最終一致性:客戶端不論連接到哪個Zookeeper的哪一個節(jié)點背率,都會收到同一份狀態(tài)。這是zookeeper最重要的性能嫩与。
- 可靠性:Zookeeper集群具有簡單寝姿、健壯、良好的性能蕴纳,如果消息m被到一臺server接受会油,那么它將被所有的server接受。
- 實時性:Zookeeper保證client將在一個時間間隔范圍內(nèi)獲得server的更新信息古毛,或者server失效的信息翻翩。但由于網(wǎng)絡(luò)延時等原因,Zookeeper不能保證兩個client能同時得到剛更新的數(shù)據(jù)稻薇,如果需要最新數(shù)據(jù)嫂冻,應(yīng)該在讀數(shù)據(jù)之前調(diào)用sync()接口。
- 等待無關(guān)(wait-free):慢的或者失效的client不得干預(yù)快速的client的請求塞椎,使得每個client都能有效的等待。
- 原子性:更新只能成功或者失敗案狠,沒有中間狀態(tài)。
- 順序性:包括全局有序和偏序兩種:全局有序是指如果在一臺server上消息a在消息b前發(fā)布骂铁,則在所有Server上消息a都將在消息b前被發(fā)布;偏序是指如果一個消息b在消息a后被同一個發(fā)送者發(fā)布拉庵,a必將排在b前面灿椅。
3、zookeeper應(yīng)用場景
- 數(shù)據(jù)發(fā)布與訂閱:應(yīng)用配置集中到節(jié)點上操刀,應(yīng)用啟動時主動獲取,并在節(jié)點上注冊一個watcher婴洼,每次配置更新都會通知到應(yīng)用。
- 名空間服務(wù):分布式命名服務(wù)窃蹋,創(chuàng)建一個節(jié)點后卡啰,節(jié)點的路徑就是全局唯一的,可以作為全局名稱使用警没。
- 分布式通知/協(xié)調(diào):不同的系統(tǒng)都監(jiān)聽同一個節(jié)點匈辱,一旦有了更新,另一個系統(tǒng)能夠收到通知杀迹。
- 分布式鎖:Zookeeper能保證數(shù)據(jù)的強(qiáng)一致性亡脸,用戶任何時候都可以相信集群中每個節(jié)點的數(shù)據(jù)都是相同的。一個用戶創(chuàng)建一個節(jié)點作為鎖树酪,另一個用戶檢測該節(jié)點浅碾,如果存在,代表別的用戶已經(jīng)鎖住续语,如果不存在垂谢,則可以創(chuàng)建一個節(jié)點,代表擁有一個鎖疮茄。
- 集群管理:每個加入集群的機(jī)器都創(chuàng)建一個節(jié)點滥朱,寫入自己的狀態(tài)。監(jiān)控父節(jié)點的用戶會受到通知力试,進(jìn)行相應(yīng)的處理徙邻。離開時刪除節(jié)點,監(jiān)控父節(jié)點的用戶同樣會收到通知畸裳。如圖:
- 配置管理:在分布式應(yīng)用環(huán)境中很常見缰犁,例如同一個應(yīng)用系統(tǒng)需要多臺節(jié)點運行,但是它們運行的應(yīng)用系統(tǒng)的某些配置項是相同的怖糊,如果要修改這些相同的配置項帅容,那么就必須同時修改每臺運行這個應(yīng)用系統(tǒng)的 PC Server,這樣非常麻煩而且容易出錯伍伤。像這樣的配置信息完全可以交給 Zookeeper 來管理丰嘉,將配置信息保存在 Zookeeper 的某個目錄節(jié)點中,然后將所有需要修改的應(yīng)用機(jī)器監(jiān)控配置信息的狀態(tài)嚷缭,一旦配置信息發(fā)生變化,每臺應(yīng)用機(jī)器就會收到 Zookeeper 的通知,然后從 Zookeeper 獲取新的配置信息應(yīng)用到系統(tǒng)中阅爽。如圖: