面試題
zookeeper 都有哪些使用場景骄蝇?
面試官心理分析
現(xiàn)在聊的 topic 是分布式系統(tǒng),面試官跟你聊完了 dubbo 相關的一些問題之后谷醉,已經(jīng)確認你對分布式服務框架/RPC框架基本都有一些認知了致稀。那么他可能開始要跟你聊分布式相關的其它問題了。
分布式鎖這個東西俱尼,很常用的抖单,你做 Java系統(tǒng)開發(fā),分布式系統(tǒng)遇八,可能會有一些場景會用到矛绘。最常用的分布式鎖就是基于 zookeeper 來實現(xiàn)的。
其實說實話押蚤,問這個問題蔑歌,一般就是看看你是否了解 zookeeper,因為 zk 是分布式系統(tǒng)中很常見的一個基礎系統(tǒng)揽碘。而且問的話常問的就是說 zk 的使用場景是什么次屠?看你知道不知道一些基本的使用場景。但是其實 zk 挖深了自然是可以問的很深很深的雳刺。
面試題剖析
大致來說劫灶,zk 的使用場景如下,我就舉幾個簡單的掖桦,大家能說幾個就好了:
- 分布式協(xié)調(diào)
- 分布式鎖
- 元數(shù)據(jù)/配置信息管理
- HA高可用性
分布式協(xié)調(diào)
這個其實是 zk 很經(jīng)典的一個用法本昏,簡單來說,就好比枪汪,你 A 系統(tǒng)發(fā)送個請求到 mq涌穆,然后 B 系統(tǒng)消息消費之后處理了。那 A 系統(tǒng)如何知道 B 系統(tǒng)的處理結(jié)果雀久?用 zk 就可以實現(xiàn)分布式系統(tǒng)之間的協(xié)調(diào)工作宿稀。A 系統(tǒng)發(fā)送請求之后可以在 zk 上對某個節(jié)點的值注冊個監(jiān)聽器,一旦 B 系統(tǒng)處理完了就修改 zk 那個節(jié)點的值赖捌,A 立馬就可以收到通知祝沸,完美解決。
分布式鎖
舉個栗子。對某一個數(shù)據(jù)連續(xù)發(fā)出兩個修改操作罩锐,兩臺機器同時收到了請求奉狈,但是只能一臺機器先執(zhí)行完另外一個機器再執(zhí)行。那么此時就可以使用 zk 分布式鎖涩惑,一個機器接收到了請求之后先獲取 zk 上的一把分布式鎖仁期,就是可以去創(chuàng)建一個 znode,接著執(zhí)行操作竭恬;然后另外一個機器也嘗試去創(chuàng)建那個 znode蟀拷,結(jié)果發(fā)現(xiàn)自己創(chuàng)建不了,因為被別人創(chuàng)建了萍聊,那只能等著,等第一個機器執(zhí)行完了自己再執(zhí)行悦析。
元數(shù)據(jù)/配置信息管理
zk 可以用作很多系統(tǒng)的配置信息的管理寿桨,比如 kafka、storm 等等很多分布式系統(tǒng)都會選用 zk 來做一些元數(shù)據(jù)强戴、配置信息的管理亭螟,包括 dubbo 注冊中心不也支持 zk 么?
HA高可用性
這個應該是很常見的骑歹,比如 hadoop预烙、hdfs、yarn 等很多大數(shù)據(jù)系統(tǒng)道媚,都選擇基于 zk 來開發(fā) HA 高可用機制扁掸,就是一個重要進程一般會做主備兩個,主進程掛了立馬通過 zk 感知到切換到備用進程最域。