這篇文章的知識(shí)點(diǎn)包括:Zookeeper的概念、Zookeeper的角色介紹、Zookeeper的選舉介紹、Zookeeper的角色作用、Zookeeper中的zab協(xié)議以及Zookeeper的節(jié)點(diǎn),閱讀完整文相信大家對(duì)Zookeeper有了一定的認(rèn)識(shí)。
專注于為中小企業(yè)提供成都做網(wǎng)站、成都網(wǎng)站建設(shè)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)分宜免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了數(shù)千家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
ZooKeeper概念
ZooKeeper是一個(gè)分布式的,開放源碼的分布式應(yīng)用程序協(xié)調(diào)服務(wù),是Google的Chubby一個(gè)開源的實(shí)現(xiàn),是Hadoop和Hbase的重要組件。它是一個(gè)為分布式應(yīng)用提供一致性服務(wù)的軟件,提供的功能包括:配置維護(hù)、域名服務(wù)、分布式同步、組服務(wù)等。ZooKeeper的目標(biāo)就是封裝好復(fù)雜易出錯(cuò)的關(guān)鍵服務(wù),將簡(jiǎn)單易用的接口和性能高效、功能穩(wěn)定的系統(tǒng)提供給用戶。ZooKeeper包含一個(gè)簡(jiǎn)單的原語(yǔ)集,提供Java和C的接口
【一、Zookeeper中的角色】
①領(lǐng)導(dǎo)者(leader)Leader服務(wù)器為客戶端提供讀寫服務(wù)。它是集群工作機(jī)制的核心,事務(wù)請(qǐng)求唯一調(diào)度者和處理者,保證集群事務(wù)請(qǐng)求處理的順序性。
②學(xué)習(xí)者(learner),學(xué)習(xí)者又分為跟隨者和觀察者:
跟隨者(follower)Follower服務(wù)器為客戶端提供讀服務(wù),參與Leader選舉過(guò)程,參與寫操作“過(guò)半寫成功”策略。處理非事務(wù)請(qǐng)求,轉(zhuǎn)發(fā)事務(wù)請(qǐng)求給領(lǐng)導(dǎo)者,同時(shí)參與投票。
觀察者(observer)Observer服務(wù)器為客戶端提供讀服務(wù),不參與Leader選舉過(guò)程,不參與寫操作“過(guò)半寫成功”策略。用于在不影響寫性能的前提下提升集群的讀性能。該服務(wù)不參與投票,可有可無(wú)的。
③客戶端(client)服務(wù)請(qǐng)求發(fā)起方。
【二、Zookeeper選舉】
上面提到的服務(wù)器角色是怎么產(chǎn)生的呢,就是通過(guò)選舉。
我這里,以一個(gè)例子的來(lái)形象說(shuō)明選舉的過(guò)程:
1、咱們現(xiàn)在有10臺(tái)服務(wù)器,剛剛上線的服務(wù)器沒(méi)有任何數(shù)據(jù),嶄新的。咱們給它編個(gè)號(hào):1,2,3,4,5,6,7,8,9,10,咱們呢把這10個(gè)服務(wù)器逐個(gè)都開機(jī)了哈。
2、在服務(wù)器啟動(dòng)的時(shí)候啊,選舉就開始了。1號(hào)服務(wù)器啟動(dòng),先給自己投票,然后把自己的信息發(fā)出去,讓別的也投。但是呢其他服務(wù)器還沒(méi)有啟動(dòng)啊,于是1號(hào)服務(wù)器就收不到反饋。心情很是失落,像筆者那年一樣,此時(shí)1號(hào)服務(wù)器就開始處于選舉狀態(tài)了(Looking左顧右盼的,焦急等待)。
3、接著2號(hào)服務(wù)器終于啟動(dòng)了,它也給自己投票,但是2號(hào)服務(wù)器收到了1號(hào)服務(wù)器的反饋。2號(hào)服務(wù)器暫時(shí)勝出,票數(shù)還沒(méi)有大于半數(shù),2號(hào)也得處于選舉狀態(tài)。
4、同理哈,3號(hào)啟動(dòng),4號(hào)啟動(dòng),5號(hào)啟動(dòng),一直到6號(hào)。6號(hào)就不同了,它給自己先投了一票,然后收到了1,2,3,4,5的投票,6票超過(guò)半數(shù),他就是領(lǐng)導(dǎo)者。同時(shí)也先入為主了,后續(xù)7,8,9,10號(hào)無(wú)論票數(shù)怎樣,都不管了。
【三、Zookeeper各種角色作用】
1、Zookeeper中的請(qǐng)求
事務(wù)請(qǐng)求:
改變服務(wù)器狀態(tài)的請(qǐng)求。
非事務(wù)請(qǐng)求:
僅僅讀取數(shù)據(jù),不修改數(shù)據(jù)的請(qǐng)求
2、領(lǐng)導(dǎo)者Leader
領(lǐng)導(dǎo)者會(huì)根據(jù)不同的請(qǐng)求,進(jìn)行不同的處理。
3、跟隨者Follower
①向領(lǐng)導(dǎo)者發(fā)送請(qǐng)求;
②接收領(lǐng)導(dǎo)者的消息并處理;
③接收客戶端請(qǐng)求,如果是寫入則需要發(fā)送給領(lǐng)導(dǎo)者進(jìn)行半數(shù)投票;
④返回請(qǐng)求結(jié)果給客戶端。
4、觀察者Observer
除了不參與Leader選舉和Proposal投票外,與Follower的作用相同。
【四、Zookeeper中的Zab協(xié)議】
①客戶端所有的寫入請(qǐng)求,都要轉(zhuǎn)發(fā)給服務(wù)中唯一的領(lǐng)導(dǎo)者Leader,然后領(lǐng)導(dǎo)者Leader根據(jù)請(qǐng)求發(fā)起一個(gè)Proposal請(qǐng)求;
②其他的跟隨服務(wù),對(duì)該P(yáng)roposal請(qǐng)求進(jìn)行投票,看自己是否支持這個(gè)請(qǐng)求;
③領(lǐng)導(dǎo)者Leader對(duì)投票進(jìn)行收集,票數(shù)過(guò)半時(shí),領(lǐng)導(dǎo)者Leader會(huì)向所有的服務(wù)發(fā)送一個(gè)通知。
④客戶端所連接的那個(gè)服務(wù)器收到消息,執(zhí)行操作并作出對(duì)客戶端的回應(yīng)。
【五、Zookeeper節(jié)點(diǎn)】
Zookeeper有四種常用節(jié)點(diǎn):
①持久:PERSISTENT,【持久化節(jié)點(diǎn)】;
②PERSISTENT_SEQUENTIAL,順序自動(dòng)編號(hào)【持久化節(jié)點(diǎn)】,這種節(jié)點(diǎn)會(huì)根據(jù)當(dāng)前已存在的節(jié)點(diǎn)數(shù)自動(dòng)加 1
③EPHEMERAL,【臨時(shí)節(jié)點(diǎn)】, 客戶端session超時(shí)這類節(jié)點(diǎn)就會(huì)被自動(dòng)刪除
④EPHEMERAL_SEQUENTIAL,【臨時(shí)節(jié)點(diǎn)】臨時(shí)自動(dòng)編號(hào)節(jié)點(diǎn)。
然后這四種節(jié)點(diǎn)還可以分呢!
按照持久化
持久:PERSISTENT、PERSISTENT_SEQUENTIAL
臨時(shí):EPHEMERAL、EPHEMERAL_SEQUENTIAL
還可以按照類型,分呢!
目錄節(jié)點(diǎn):PERSISTENT、EPHEMERAL
編號(hào)目錄節(jié)點(diǎn):PERSISTENT_SEQUENTIAL、EPHEMERAL_SEQUENTIAL
看完上述內(nèi)容,你們對(duì)Zookeeper有進(jìn)一步的了解嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀。