Python知識(shí)分享網(wǎng) - 專業(yè)的Python學(xué)習(xí)網(wǎng)站 學(xué)Python,上Python222
34道ZooKeeper面試題帶答案(很全) PDF 下載
匿名網(wǎng)友發(fā)布于:2024-01-22 10:04:31
(侵權(quán)舉報(bào))
(假如點(diǎn)擊沒(méi)反應(yīng),多刷新兩次就OK!)

34道ZooKeeper面試題帶答案(很全) PDF 下載  圖1

 

 

 

資料內(nèi)容:

 

1. Zookeeper是什么? Zookeeper是一個(gè)開(kāi)放源碼的 分布式協(xié)調(diào)服務(wù) ,它是集群的管理者,監(jiān)視著集群中各個(gè)節(jié)點(diǎn)的狀態(tài)根據(jù)節(jié)點(diǎn) 提交的反饋進(jìn)行下一步合理操作。最終,將簡(jiǎn)單易用的接口和性能高效、功能穩(wěn)定的系統(tǒng)提供給用戶。 分布式應(yīng)用程序可以基于Zookeeper實(shí)現(xiàn)諸如數(shù)據(jù)發(fā)布/訂閱、負(fù)載均衡、命名服務(wù)、分布式協(xié)調(diào)/通知、集 群管理、Master選舉、分布式鎖和分布式隊(duì)列等功能。 Zookeeper保證了如下分布式一致性特性: 順序一致性 原子性 單一視圖 可靠性 實(shí)時(shí)性(最終一致性) 客戶端的讀請(qǐng)求可以被集群中的任意一臺(tái)機(jī)器處理,如果讀請(qǐng)求在節(jié)點(diǎn)上注冊(cè)了監(jiān)聽(tīng)器,這個(gè)監(jiān)聽(tīng)器也是由 所連接的Zookeeper機(jī)器來(lái)處理。對(duì)于寫(xiě)請(qǐng)求,這些請(qǐng)求會(huì)同時(shí)發(fā)給其他Zookeeper機(jī)器并且達(dá)成一致后, 請(qǐng)求才會(huì)返回成功。因此,隨著Zookeeper的集群機(jī)器增多,讀請(qǐng)求的吞吐會(huì)提高但是寫(xiě)請(qǐng)求的吞吐會(huì)下 降。有序性是Zookeeper中非常重要的一個(gè)特性,所有的更新都是全局有序的,每個(gè)更新都有一個(gè)唯一的時(shí) 間戳,這個(gè)時(shí)間戳稱為 zxid(Zookeeper Transaction Id)。而讀請(qǐng)求只會(huì)相對(duì)于更新有序,也就是讀請(qǐng)求 的返回結(jié)果中會(huì)帶有這個(gè)Zookeeper最新的zxid。 2. Zookeeper和dubbo的區(qū)別? Zookeeper: Zookeeper用來(lái)注冊(cè)服務(wù)和進(jìn)行負(fù)載均衡,哪一個(gè)服務(wù)由哪一個(gè)機(jī)器來(lái)提供必需讓調(diào)用者知 道, 簡(jiǎn)單來(lái)說(shuō)就是ip地址和服務(wù)名稱的對(duì)應(yīng)關(guān)系。當(dāng)然也可以通過(guò)硬編碼的方式把這種對(duì)應(yīng)關(guān)系在調(diào)用方業(yè) 務(wù)代碼中實(shí)現(xiàn),但是如果提供服務(wù)的機(jī)器掛掉,調(diào)用者無(wú)法知曉,如果不更改代碼會(huì)繼續(xù)請(qǐng)求掛掉的機(jī)器提 供服務(wù)。 Zookeeper通過(guò) 心跳機(jī)制 可以檢測(cè)掛掉的機(jī)器并將掛掉機(jī)器的ip和服務(wù)對(duì)應(yīng)關(guān)系從列表中刪除。 至于支持高并發(fā),簡(jiǎn)單來(lái)說(shuō)就是橫向擴(kuò)展,在不更改代碼的情況通過(guò)添加機(jī)器來(lái)提高運(yùn)算能力。通過(guò)添加新 的機(jī)器向 Zookeeper注冊(cè)服務(wù),服務(wù)的提供者多了能服務(wù)的客戶就多了。 Dubbo: 是管理中間層的工具,在業(yè)務(wù)層到數(shù)據(jù)倉(cāng)庫(kù)間有非常多服務(wù)的接入和服務(wù)提供者需要調(diào)度,dubbo 提供一個(gè)框架解決這個(gè)問(wèn)題。 Zookeeper和 Dubbo的關(guān)系: Dubbo將注冊(cè)中心進(jìn)行抽象,它可以外接不同的存儲(chǔ)媒介給注冊(cè)中心提供服 務(wù),有 Zookeeper, Memcached, Redis等。注意這里的 dubbo只是一個(gè)框架,這個(gè)框架中要完成調(diào)度必 須要有一個(gè)分布式的注冊(cè)中心,儲(chǔ)存所有服務(wù)的元數(shù)據(jù),可以用Zookeeper,也可以用別的。 3. Zookeeper的java客戶端都有哪些? Zookeeper自帶的 Zookeeperclient Apache開(kāi)源的 Curator 4. Zookeeper提供了什么? 文件系統(tǒng) 通知機(jī)制 5. 說(shuō)說(shuō)Zookeeper文件系統(tǒng) Zookeeper提供一個(gè)多層級(jí)的節(jié)點(diǎn)命名空間(節(jié)點(diǎn)稱為 znode)。與文件系統(tǒng)不同的是,這些節(jié)點(diǎn)都可以設(shè)置 關(guān)聯(lián)的數(shù)據(jù),而文件系統(tǒng)中只有文件節(jié)點(diǎn)可以存放數(shù)據(jù)而目錄節(jié)點(diǎn)不行。Zookeeper為了保證高吞吐和低延 遲,在內(nèi)存中維護(hù)了這個(gè)樹(shù)狀的目錄結(jié)構(gòu),這種特性使得 Zookeeper不能用于存放大量的數(shù)據(jù),每個(gè)節(jié)點(diǎn)的存 放數(shù)據(jù)上限為1M。 6. 說(shuō)說(shuō)ZAB協(xié)議? ZAB協(xié)議是為分布式協(xié)調(diào)服務(wù)Zookeeper專門(mén)設(shè)計(jì)的一種支持 崩潰恢復(fù)的原子廣播協(xié)議 。 ZAB協(xié)議包括兩種基本的模式: 崩潰恢復(fù) 和 消息廣播 。 當(dāng)整個(gè)Zookeeper集群剛剛啟動(dòng)或者Leader服務(wù)器宕機(jī)、重啟或者網(wǎng)絡(luò)故障導(dǎo)致不存在過(guò)半的服務(wù)器與 Leader服務(wù)器保持正常通信時(shí),所有進(jìn)程(服務(wù)器)進(jìn)入崩潰恢復(fù)模式,首先選舉產(chǎn)生新的Leader服務(wù)器, 然后集群中Follower服務(wù)器開(kāi)始與新的Leader服務(wù)器進(jìn)行數(shù)據(jù)同步,當(dāng)集群中超過(guò)半數(shù)機(jī)器與該Leader服務(wù) 器完成數(shù)據(jù)同步之后,退出恢復(fù)模式進(jìn)入消息廣播模式,Leader服務(wù)器開(kāi)始接收客戶端的事務(wù)請(qǐng)求生成事物 提案來(lái)進(jìn)行事務(wù)請(qǐng)求處理。 7. Znode有哪些類型 PERSISTENT:持久節(jié)點(diǎn) 除非手動(dòng)刪除,否則節(jié)點(diǎn)一直存在于Zookeeper上 EPHEMERAL:臨時(shí)節(jié)點(diǎn) 臨時(shí)節(jié)點(diǎn)的生命周期與客戶端會(huì)話綁定,一旦客戶端會(huì)話失效(客戶端與 Zookeeper連接斷開(kāi)不一定會(huì)話失效),那么這個(gè)客戶端創(chuàng)建的所有臨時(shí)節(jié)點(diǎn)都會(huì)被移除。 PERSISTENT_SEQUENTIAL:持久順序節(jié)點(diǎn) 基本特性同持久節(jié)點(diǎn),只是增加了順序?qū)傩?,?jié)點(diǎn)名后邊會(huì) 追加一個(gè)由父節(jié)點(diǎn)維護(hù)的自增整型數(shù)字。 EPHEMERAL_SEQUENTIAL:臨時(shí)順序節(jié)點(diǎn) 基本特性同臨時(shí)節(jié)點(diǎn),增加了順序?qū)傩裕?jié)點(diǎn)名后邊會(huì)追 加一個(gè)由父節(jié)點(diǎn)維護(hù)的自增整型數(shù)字。 8. Zookeeper節(jié)點(diǎn)宕機(jī)如何處理? Zookeeper本身也是集群,推薦配置 不少于3個(gè)服務(wù)器 。Zookeeper自身也要保證當(dāng)一個(gè)節(jié)點(diǎn)宕機(jī)時(shí),其他 節(jié)點(diǎn)會(huì)繼續(xù)提供服務(wù)。 如果是一個(gè)Follower宕機(jī),還有2臺(tái)服務(wù)器提供訪問(wèn),因?yàn)閆ookeeper上的數(shù)據(jù)是有 多個(gè)副本的,數(shù)據(jù)并不會(huì)丟失; 如果是一個(gè)Leader宕機(jī),Zookeeper會(huì)選舉出新的Leader。 Zookeeper集群的機(jī)制是只要超過(guò)半數(shù)的節(jié)點(diǎn)正常,集群就能正常提供服務(wù)。 只有在Zookeeper節(jié)點(diǎn)掛得太 多,只剩一半或不到一半節(jié)點(diǎn)能工作,集群才失效。 所以: 3個(gè)節(jié)點(diǎn)的cluster可以掛掉1個(gè)節(jié)點(diǎn)(leader可以得到2票>1.5) 2個(gè)節(jié)點(diǎn)的cluster不能掛掉任何1個(gè)節(jié)點(diǎn)(leader可以得到1票<=1)