面試官:咳咳咳,看你簡(jiǎn)歷寫了精通ZooKeeper,那我就隨便考考你吧
面試官:不用慌盡管說,錯(cuò)了也沒關(guān)系??。。。
每日分享大廠面試演練,感興趣就關(guān)注我吧??
面試官:知道ZooKeeper有什么應(yīng)用場(chǎng)景嗎
嗯嗯,主要有這幾種。
-
數(shù)據(jù)發(fā)布/訂閱。可以用來實(shí)現(xiàn)配置中心
-
命名服務(wù)。類似于UUID,可以生成全局唯一的ID
-
集群管理。每一個(gè)服務(wù)器是一個(gè)子節(jié)點(diǎn),可以用來檢測(cè)到集群中機(jī)器的上/下線情況
-
分布式鎖
面試官思考中…
面試官:你挑一個(gè)你比較熟悉的場(chǎng)景講講
嗯嗯好的,那我講下分布式鎖。
是這樣的,ZooKeep的獲取鎖時(shí)會(huì)在/exclusive_lock節(jié)點(diǎn)下創(chuàng)建子節(jié)點(diǎn),如果創(chuàng)建成功則獲得鎖。如果失敗,則客戶端會(huì)在該節(jié)點(diǎn)注冊(cè)一個(gè)子節(jié)點(diǎn)變更的Watcher監(jiān)聽。
同樣,釋放鎖則刪除該子節(jié)點(diǎn),此時(shí)Watcher監(jiān)聽就會(huì)通知客戶端可以重新獲取了。
面試官思考中…
面試官:你說的是排他鎖,共享鎖呢
好的面試官。共享鎖也是類似的場(chǎng)景。
每次讀、寫請(qǐng)求同樣是創(chuàng)建子節(jié)點(diǎn),是一個(gè)類似于“/shared_lock/[Hostname]-請(qǐng)求類型-序號(hào)”的臨時(shí)順序節(jié)點(diǎn)。
接著會(huì)獲取子節(jié)點(diǎn)列表,同時(shí)注冊(cè)Watcher監(jiān)聽。
- 獲取讀鎖的話,如果前面比自己小的序號(hào)沒有寫請(qǐng)求,則可以讀
- 獲取寫鎖的話,只有在自己是序號(hào)最小的情況下,才可以讀
而共享鎖的釋放鎖和排他鎖都是一樣的。
面試官:emmmm有沒聽說過共享鎖的羊群效應(yīng)
噢噢知道的面試官,這個(gè)問題主要是出現(xiàn)在集群規(guī)模比較大的場(chǎng)景下。
其實(shí)共享鎖的特別之處,在于每次讀、寫請(qǐng)求都要注冊(cè)Watcher監(jiān)聽來獲取子節(jié)點(diǎn)列表,特別是數(shù)量更多的讀請(qǐng)求。
子節(jié)點(diǎn)列表每次變動(dòng)都要通知所有的服務(wù)器客戶端,造成了短時(shí)間大量的事件通知,給ZooKeeper帶來很大性能消耗。
面試官思考中…
面試官:那怎么解決呢
我認(rèn)為要兩方面來看吧。
首先我上面說的共享鎖實(shí)現(xiàn)方式如果在集群不大的情況下是可行的,而且他實(shí)現(xiàn)簡(jiǎn)單實(shí)用。而如果在集群規(guī)模大的場(chǎng)景下,可以這樣改進(jìn)。
讀、寫請(qǐng)求首先獲取子節(jié)點(diǎn)列表,但都不注冊(cè)Watcher監(jiān)聽。
- 讀請(qǐng)求:只向比自己序號(hào)小的最后一個(gè)寫請(qǐng)求節(jié)點(diǎn)注冊(cè)Watcher監(jiān)聽
- 寫請(qǐng)求:只向比自己序號(hào)小的最后一個(gè)節(jié)點(diǎn)注冊(cè)Watcher監(jiān)聽
這樣就可以避免羊群效應(yīng),主要是從監(jiān)聽子節(jié)點(diǎn)列表,改進(jìn)為只監(jiān)聽某個(gè)子節(jié)點(diǎn)。
面試官心想,還不錯(cuò)嘛…
面試官:Kafka應(yīng)用場(chǎng)景呢,知道Kafka是怎么利用ZooKeeper嗎
嗯嗯好的,我了解到的主要有3方面。
-
使用ZooKeeper來對(duì)所有Broker服務(wù)器、Topic進(jìn)行管理
Broker啟動(dòng)后都會(huì)到ZooKeeper上創(chuàng)建屬于自己的臨時(shí)節(jié)點(diǎn),其節(jié)點(diǎn)路徑為/broker/ids/[0…N],注冊(cè)Topic節(jié)點(diǎn)也是一樣。
-
另外在Kafka生產(chǎn)者負(fù)載均衡方面
Kafka消息生產(chǎn)者會(huì)通過監(jiān)聽Broker節(jié)點(diǎn)列表,負(fù)載均衡地分發(fā)到某一個(gè)Broker。
-
而在Kafka防消費(fèi)重復(fù)消費(fèi)方面
消費(fèi)者消費(fèi)消息后,都會(huì)在消息分區(qū)寫入臨時(shí)節(jié)點(diǎn),代表該消息已消費(fèi)。
面試官思考中…
面試官:你剛剛說到Kafka生產(chǎn)者負(fù)載均衡,那消費(fèi)者負(fù)載均衡知道嗎
哦哦說欠了,消費(fèi)者負(fù)載均衡有兩方面。
- 一方面,每一個(gè)消費(fèi)者服務(wù)器都會(huì)在ZooKeeper創(chuàng)建消費(fèi)者節(jié)點(diǎn)。當(dāng)有新消息時(shí),Kafka就可以通過ZooKeeper的消費(fèi)者節(jié)點(diǎn)列表負(fù)載均衡地通知某個(gè)消費(fèi)者
- 另一方面,Kafa將一個(gè)Topic分成了多個(gè)分區(qū),多個(gè)分區(qū)由不同的Brocker處理,這是實(shí)現(xiàn)對(duì)Brocker的負(fù)載均衡
面試官抓抓腦袋,繼續(xù)看你的簡(jiǎn)歷…
得想想考點(diǎn)你不懂的??
未完待續(xù)。。。。。。
好了,今天的分享就先到這,我們下期繼續(xù)。文章來源:http://www.zghlxwxcb.cn/news/detail-839989.html
創(chuàng)作不易,不妨點(diǎn)贊、收藏、關(guān)注支持一下,各位的支持就是我創(chuàng)作的最大動(dòng)力??文章來源地址http://www.zghlxwxcb.cn/news/detail-839989.html
到了這里,關(guān)于【大廠面試演練】知道ZooKeeper有什么應(yīng)用場(chǎng)景嗎的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!