深入講解,分布式中間件Zookeeper

image

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é)點變動時收到通知

基于這樣的機制,將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ù)的強一致性,用戶任何時候都可以相信集群中每個節(jié)點的數(shù)據(jù)都是相同的。一個用戶創(chuàng)建一個節(jié)點作為鎖,另一個用戶檢測該節(jié)點,如果存在,代表別的用戶已經(jīng)鎖住,如果不存在,則可以創(chuàng)建一個節(jié)點,代表擁有一個鎖。
  • 集群管理:每個加入集群的機器都創(chuàng)建一個節(jié)點,寫入自己的狀態(tài)。監(jiān)控父節(jié)點的用戶會受到通知,進(jìn)行相應(yīng)的處理。離開時刪除節(jié)點,監(jiān)控父節(jié)點的用戶同樣會收到通知。如圖:
image
  • 配置管理:在分布式應(yīng)用環(huán)境中很常見,例如同一個應(yīng)用系統(tǒng)需要多臺節(jié)點運行,但是它們運行的應(yīng)用系統(tǒng)的某些配置項是相同的,如果要修改這些相同的配置項,那么就必須同時修改每臺運行這個應(yīng)用系統(tǒng)的 PC Server,這樣非常麻煩而且容易出錯。像這樣的配置信息完全可以交給 Zookeeper 來管理,將配置信息保存在 Zookeeper 的某個目錄節(jié)點中,然后將所有需要修改的應(yīng)用機器監(jiān)控配置信息的狀態(tài),一旦配置信息發(fā)生變化,每臺應(yīng)用機器就會收到 Zookeeper 的通知,然后從 Zookeeper 獲取新的配置信息應(yīng)用到系統(tǒng)中。如圖:
image
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容