zookeeper 都有哪些使用場景?
複製代碼
面試官心理分析node
假設如今聊的話題是分佈式系統,面試官跟你聊完了 dubbo 相關的一些問題以後,已經確認你對分佈式服務框架/RPC框架基本都有一些認知了。面試
那麼接下來他可能開始要跟你聊分佈式相關的其它問題了,好比分佈式鎖。sql
分佈式鎖這個東西很經常使用,不管作 Java 系統開發或者分佈式系統,均可能會有一些場景會用到。而最經常使用的分佈式鎖就是基於 zookeeper 來實現的。bash
說實話,問這個問題,通常就是看看你是否瞭解 zookeeper,由於 zookeeper 是分佈式系統中很常見的一個基礎系統。架構
而且面試官問的話,常問的就是 zookeeper 的使用場景是什麼?看你知道不知道一些基本的使用場景。固然其實 zookeeper 挖深了天然是能夠問的很深很深的。併發
面試題剖析框架
大體來講,zookeeper 的使用場景以下,我就舉下面幾個簡單的例子,你們能說這幾個就OK了:分佈式
分佈式協調高併發
分佈式鎖oop
元數據/配置信息管理
HA高可用性
分佈式協調
這個實際上是 zookeeper 很經典的一個用法,簡單來講,就比如你 A 系統發送個請求到 mq,而後 B 系統消息消費以後處理了。
那 A 系統如何知道 B 系統的處理結果?
答案是:用 zookeeper 就能夠實現分佈式系統之間的協調工做。A 系統發送請求以後能夠在 zookeeper 上對某個節點的值註冊個監聽器,一旦 B 系統處理完了就修改 zookeeper 那個節點的值,A 系統立馬就能夠收到通知,完美解決。
下圖用一個用戶提交訂單請求展現了整個過程:
分佈式鎖
這是zk的第二個使用場景。舉個栗子,對某一個數據連續發出兩個修改操做,兩臺機器同時收到了請求,可是隻能一臺機器先執行完另一個機器再執行。
那麼此時就能夠使用 zookeeper 分佈式鎖,一個機器接收到了請求以後先獲取 zookeeper 上的一把分佈式鎖,就能夠去建立一個 znode,接着執行操做;
而後另一個機器也嘗試去建立那個 znode,結果發現本身建立不了,由於被別人建立了,那隻能等着,等第一個機器執行完了本身再執行。
整個過程,以下圖所示:
元數據/配置信息管理
第三個場景,zookeeper 能夠用做不少系統的配置信息的管理,好比 kafka、storm 等等不少分佈式系統都會選用 zookeeper 來作一些元數據、配置信息的管理,包括 dubbo 註冊中心不也支持 zookeeper 麼?
下圖展現瞭如何用zookeeper管理dubbo註冊中心。
HA高可用性
第四個應用場景即高可用(HA),這個應該是很常見的。
好比 hadoop、hdfs、yarn 等不少大數據系統,都選擇基於 zookeeper 來開發 HA 高可用機制。
具體來講就是一個重要進程通常會作主備兩個,主進程掛了立馬經過 zookeeper 感知到切換到備用進程。
一樣仍是經過一張圖來看看
BATJ面試資料、高可用、高併發、高性能及分佈式、Jvm性能調優、Spring源碼,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多個知識點的架構資料)和Java進階學習路線圖。
q羣:478052716 便可!