面試題
zookeeper 都有哪些使用場(chǎng)景?
面試官心理分析
現(xiàn)在聊的 topic 是分布式系統(tǒng)辣卒,面試官跟你聊完了 dubbo 相關(guān)的一些問題之后,已經(jīng)確認(rèn)你對(duì)分布式服務(wù)框架/RPC框架基本都有一些認(rèn)知了睛榄。那么他可能開始要跟你聊分布式相關(guān)的其它問題了荣茫。
分布式鎖這個(gè)東西,很常用的懈费,你做 Java 系統(tǒng)開發(fā)计露,分布式系統(tǒng)博脑,可能會(huì)有一些場(chǎng)景會(huì)用到憎乙。最常用的分布式鎖就是基于 zookeeper 來實(shí)現(xiàn)的。
其實(shí)說實(shí)話叉趣,問這個(gè)問題泞边,一般就是看看你是否了解 zookeeper,因?yàn)?zookeeper 是分布式系統(tǒng)中很常見的一個(gè)基礎(chǔ)系統(tǒng)疗杉。而且問的話常問的就是說 zookeeper 的使用場(chǎng)景是什么阵谚?看你知道不知道一些基本的使用場(chǎng)景。但是其實(shí) zookeeper 挖深了自然是可以問的很深很深的烟具。
面試題剖析
大致來說梢什,zookeeper 的使用場(chǎng)景如下,我就舉幾個(gè)簡單的朝聋,大家能說幾個(gè)就好了:
- 分布式協(xié)調(diào)
- 分布式鎖
- 元數(shù)據(jù)/配置信息管理
- HA高可用性
分布式協(xié)調(diào)
這個(gè)其實(shí)是 zookeeper 很經(jīng)典的一個(gè)用法嗡午,簡單來說,就好比冀痕,你 A 系統(tǒng)發(fā)送個(gè)請(qǐng)求到 mq荔睹,然后 B 系統(tǒng)消息消費(fèi)之后處理了狸演。那 A 系統(tǒng)如何知道 B 系統(tǒng)的處理結(jié)果?用 zookeeper 就可以實(shí)現(xiàn)分布式系統(tǒng)之間的協(xié)調(diào)工作僻他。A 系統(tǒng)發(fā)送請(qǐng)求之后可以在 zookeeper 上對(duì)某個(gè)節(jié)點(diǎn)的值注冊(cè)個(gè)監(jiān)聽器宵距,一旦 B 系統(tǒng)處理完了就修改 zookeeper 那個(gè)節(jié)點(diǎn)的值,A 系統(tǒng)立馬就可以收到通知吨拗,完美解決满哪。
分布式鎖
舉個(gè)栗子。對(duì)某一個(gè)數(shù)據(jù)連續(xù)發(fā)出兩個(gè)修改操作丢胚,兩臺(tái)機(jī)器同時(shí)收到了請(qǐng)求翩瓜,但是只能一臺(tái)機(jī)器先執(zhí)行完另外一個(gè)機(jī)器再執(zhí)行。那么此時(shí)就可以使用 zookeeper 分布式鎖携龟,一個(gè)機(jī)器接收到了請(qǐng)求之后先獲取 zookeeper 上的一把分布式鎖兔跌,就是可以去創(chuàng)建一個(gè) znode,接著執(zhí)行操作峡蟋;然后另外一個(gè)機(jī)器也嘗試去創(chuàng)建那個(gè) znode坟桅,結(jié)果發(fā)現(xiàn)自己創(chuàng)建不了,因?yàn)楸粍e人創(chuàng)建了蕊蝗,那只能等著仅乓,等第一個(gè)機(jī)器執(zhí)行完了自己再執(zhí)行。
元數(shù)據(jù)/配置信息管理
zookeeper 可以用作很多系統(tǒng)的配置信息的管理蓬戚,比如 kafka夸楣、storm 等等很多分布式系統(tǒng)都會(huì)選用 zookeeper 來做一些元數(shù)據(jù)、配置信息的管理子漩,包括 dubbo 注冊(cè)中心不也支持 zookeeper 么豫喧?
HA高可用性
這個(gè)應(yīng)該是很常見的,比如 hadoop幢泼、hdfs紧显、yarn 等很多大數(shù)據(jù)系統(tǒng),都選擇基于 zookeeper 來開發(fā) HA 高可用機(jī)制缕棵,就是一個(gè)重要進(jìn)程一般會(huì)做主備兩個(gè)孵班,主進(jìn)程掛了立馬通過 zookeeper 感知到切換到備用進(jìn)程。
本文在米兜公眾號(hào)鏈接:
https://mp.weixin.qq.com/s/nkKW2O-qW0AJpqxqGMQVNA
歡迎關(guān)注米兜Java招驴,一個(gè)注在共享篙程、交流的Java學(xué)習(xí)平臺(tái)。