Zookeeper
問(wèn)題1:什么是zookeeper:
簡(jiǎn)單理解為一個(gè)集群管理軟件
作用:配置維護(hù)撩满、統(tǒng)一命名服務(wù)、狀態(tài)同步服務(wù)绅你、集群管理等伺帘。
問(wèn)題2: zookeeper和yarn有什么區(qū)別?
分布式系統(tǒng)有很多問(wèn)題 其中有兩個(gè)
Zookeeper偏重解決分布式系統(tǒng)中的Coordination
Yarn偏重解決系統(tǒng)中的Resource Management
看回答: https://www.zhihu.com/question/41254423
問(wèn)題3:能否介紹一個(gè)zookeeper的使用場(chǎng)景
主備結(jié)點(diǎn)的容災(zāi) - 主節(jié)點(diǎn)掛掉了, 備用啟用的時(shí)候, 所有任務(wù)的信息可能都放在zookeeper里, 備用結(jié)點(diǎn)從這里取回任務(wù)信息, 保準(zhǔn)系統(tǒng)繼續(xù)穩(wěn)定運(yùn)行.所以從這看zookeeper里存的可能有配置文件, 任務(wù)信息等.
問(wèn)題: zookeeper的設(shè)計(jì)理念
強(qiáng)一致性:client不論連接到哪個(gè)Server,展示給它都是同一個(gè)視圖忌锯,這是zookeeper最重要的性能伪嫁。
可靠性: 如果消息m被到一臺(tái)服務(wù)器接受,那么它將被所有的服務(wù)器接受偶垮。
原子性: 更新只能成功或者失敗张咳,沒(méi)有中間狀態(tài)。
問(wèn)題4: 工作原理
zookeeper要處理的是集群之間的協(xié)同問(wèn)題, 那么處理協(xié)同問(wèn)題有2中辦法:
- 不同服務(wù)器之間相互傳遞信息
- 廣播(開(kāi)辟一個(gè)公共頻道大家都能收聽(tīng)消息)
zookeeper選擇的是2.
Zookeeper 的核心是廣播针史,這個(gè)機(jī)制保證了各個(gè)Server之間的同步.實(shí)現(xiàn)這個(gè)機(jī)制的協(xié)議叫做Zab協(xié)議晶伦。
問(wèn)題5: zookeeper的內(nèi)部結(jié)構(gòu)是什么樣的?
zookeeper也是集群, 是master-slave model.
為什么這么設(shè)計(jì)? 分布式的模式要有主從, 二, 可以實(shí)現(xiàn)強(qiáng)一致性
為什么要強(qiáng)一致性? 保證集群中的信息一致,解決的就是協(xié)同問(wèn)題
問(wèn)題6: zookeeper的數(shù)據(jù)模型是什么樣的?
可以將zk看成一個(gè)文件系統(tǒng), 但是沒(méi)有文件也沒(méi)有目錄, 而是統(tǒng)一使用結(jié)點(diǎn)的概念, 叫做znode. znode既可以保存數(shù)據(jù), 也可以保存其它znode.
其中, znode分成幾種:
- Persistent Nodes: 永久有效結(jié)點(diǎn)
- Ephemeral Nodes: 臨時(shí)結(jié)點(diǎn), 僅在創(chuàng)建該節(jié)點(diǎn)的client這邊保持有效, 一旦連接丟失, zk會(huì)自動(dòng)刪除該節(jié)點(diǎn)
- Sequence Nodes: 順序節(jié)點(diǎn), 用戶(hù)實(shí)現(xiàn)分布式queue等功能
問(wèn)題7: 既然是主從模式, 那么master node是怎么選出來(lái)的?
通過(guò)投票選舉制度. 所有的server開(kāi)始都是slave, 對(duì)任意一個(gè)server,開(kāi)始第一次都會(huì)投自己. 這個(gè)投票會(huì)包含所推舉的server的myid和zxid. 然后他們把這個(gè)投票發(fā)給集群中的其它機(jī)器. 當(dāng)這個(gè)server收到其他server發(fā)來(lái)的信息后,要處理投票. 怎么處理呢?
· 優(yōu)先檢查ZXID碟狞。ZXID比較大的服務(wù)器優(yōu)先作為L(zhǎng)eader啄枕。
· 如果ZXID相同,那么就比較myid族沃。myid較大的服務(wù)器作為L(zhǎng)eader服務(wù)器频祝。
再進(jìn)行一次統(tǒng)計(jì)(由發(fā)起投票的server統(tǒng)計(jì)), 得票最多的server被選舉為leader. 具體是, 某個(gè)server獲得n/2 + 1的票, 它就會(huì)變?yōu)閘eader. 否則的話(huà), 繼續(xù)這個(gè)過(guò)程.
Follow up1: 什么時(shí)候會(huì)進(jìn)行投票選舉?
- 非leader的server宕機(jī)了不會(huì)2)leader掛了,會(huì)3)初始化起集群的時(shí)候, 會(huì)
Follow up2: 什么是zxid, 他有什么用?
每個(gè)znode維護(hù)的一個(gè)屬性結(jié)構(gòu), 它包含著版本號(hào), 時(shí)間戳.
問(wèn)題8: zookeeper是如何去處理一個(gè)請(qǐng)求的?
首先, zk是集群服務(wù)器, 里面會(huì)放著一些其它應(yīng)用的, 比如配置信息. 如果想更新這個(gè)配置信息, 那么需要向zk發(fā)請(qǐng)求. 通過(guò)zk的客戶(hù)端, 與zk的server建立連接. 這個(gè)連接叫一個(gè)對(duì)話(huà)(session), client可以與zk集群中的任何一個(gè)server連接(因?yàn)檫@些server的數(shù)據(jù)都是一模一樣的.)
所有的請(qǐng)求(讀寫(xiě),改查)都要通過(guò)leader來(lái)進(jìn)行. 一個(gè)請(qǐng)求過(guò)來(lái)以后, leader server會(huì)為這個(gè)請(qǐng)求生成一個(gè)proposal, 并將其發(fā)送給集群總所有follower server. follower server收到proposal后處理也很簡(jiǎn)單, 將該proposal寫(xiě)入事務(wù)日志, 然后反饋ACK給leader. leader收到過(guò)半follower 的ACK后, 會(huì)廣播commit笑給給所有的follower, 并將事務(wù)應(yīng)用到內(nèi)存.
Follow up: ZAB協(xié)議中為什么要用過(guò)半同意這種制度?
這是在可用性與一致性之間做的取舍.犧牲掉了部分一致性(舍棄全員通過(guò)), 能在集群板書(shū)一下服務(wù)宕機(jī)時(shí)正常對(duì)外提供服務(wù), 這也體現(xiàn)了它的容錯(cuò)性.
問(wèn)題9: zookeeper是如何實(shí)現(xiàn)一致性原理的?
實(shí)現(xiàn)一致性原理的核心是ZAB協(xié)議, 需要做到:
- 集群在半數(shù) 一下結(jié)點(diǎn)宕機(jī)的情況下, 能正常對(duì)外提供服務(wù)(所以配置要一般配置奇數(shù)個(gè)服務(wù)器)
-
客戶(hù)端的寫(xiě)請(qǐng)求全部交給leader來(lái)處理. leader需要確保寫(xiě)的change能實(shí)時(shí)同步給所有follower.
ZAB協(xié)議有2中模式, 崩潰恢復(fù)(選leader+數(shù)據(jù)同步), 和消息廣播.
image