好程序員Java教程分享Zookeeper基本原理與運(yùn)用場(chǎng)景-創(chuàng)新互聯(lián)

好程序員Java教程分享Zookeeper基本原理與運(yùn)用場(chǎng)景一、什么是Zookeeper?

十多年的興文網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。全網(wǎng)營(yíng)銷推廣的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整興文建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)公司從事“興文網(wǎng)站設(shè)計(jì)”,“興文網(wǎng)站推廣”以來,每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。

zookeeper是一個(gè)分布式的一致性協(xié)調(diào)服務(wù)。

?換句話說,也可以把zookeeper看成一個(gè)小型的分布式文件系統(tǒng)。但是和FastDFS不同,zookeeper只適合用來存儲(chǔ)一些小型的數(shù)據(jù)或者配置信息。

二、Zookeeper的文件系統(tǒng)

zookeeper底層是一個(gè)樹形結(jié)構(gòu),進(jìn)行數(shù)據(jù)的存儲(chǔ)。

好程序員Java教程分享Zookeeper基本原理與運(yùn)用場(chǎng)景

和Linux、Window等系統(tǒng)不同:

Linux和Window中有文件和文件夾的概念。文件夾下面只能有文件,文件下面不能再有數(shù)據(jù)。文件夾本身不存放數(shù)據(jù),文件本身用來進(jìn)行數(shù)據(jù)存儲(chǔ)。

Zookeeper中的節(jié)點(diǎn),沒有文件夾和文件之分,所有節(jié)點(diǎn)都可以進(jìn)行數(shù)據(jù)存儲(chǔ),同時(shí)也可以擁有子節(jié)點(diǎn)。每個(gè)節(jié)點(diǎn)稱之為znode

znode的分類:

1)臨時(shí)節(jié)點(diǎn)-ephemeral:臨時(shí)節(jié)點(diǎn)由某個(gè)客戶端創(chuàng)建,如果該客戶端斷開了和zookeeper服務(wù)器的鏈接,則該臨時(shí)節(jié)點(diǎn)就會(huì)被自動(dòng)刪除。注意:臨時(shí)節(jié)點(diǎn)不能有子節(jié)點(diǎn)。

2)持久性節(jié)點(diǎn)-persistent:持久化的節(jié)點(diǎn)會(huì)永久存在于文件系統(tǒng)中,除非客戶端顯示的刪除該節(jié)點(diǎn)。該節(jié)點(diǎn)是最常見的節(jié)點(diǎn)。

3)臨時(shí)順序節(jié)點(diǎn)-ephemeral_sequential:和臨時(shí)節(jié)點(diǎn)擁有相同的特點(diǎn),唯一的卻別在于該節(jié)點(diǎn)名稱會(huì)自動(dòng)維護(hù)一個(gè)編號(hào)。

4)持久性順序節(jié)點(diǎn)-persistent_sequential:和持久性節(jié)點(diǎn)擁有相同的特點(diǎn),唯一的卻別在于該節(jié)點(diǎn)名稱會(huì)自動(dòng)維護(hù)一個(gè)編號(hào)。

?文件系統(tǒng)的操作命令:

?ls?路徑:查看某個(gè)路徑下的子節(jié)點(diǎn)情況,zk中只能寫絕對(duì)路徑(所有的路徑都必須從/出發(fā))

?create [-s] [-e] path data?:?創(chuàng)建一個(gè)節(jié)點(diǎn),在path路徑的位置。數(shù)據(jù)為data(數(shù)據(jù)不能為空,至少要為'')。-s表示順序節(jié)點(diǎn) -e臨時(shí)節(jié)點(diǎn)

?get?路徑:查看指定路徑對(duì)應(yīng)的節(jié)點(diǎn)數(shù)據(jù)。每個(gè)節(jié)點(diǎn)都分為:數(shù)據(jù)部分、描述信息

?set?path?data:修改指定節(jié)點(diǎn)的數(shù)據(jù)

?delete path:刪除指定節(jié)點(diǎn)數(shù)據(jù),如果下面的有子節(jié)點(diǎn)需要先刪除子節(jié)點(diǎn)

三、Zookeeper的通知機(jī)制(watch)

?什么是通知機(jī)制?

? ? 客戶端可以選擇對(duì)某個(gè)znode進(jìn)行監(jiān)聽。當(dāng)這個(gè)znode發(fā)生變化時(shí)(本身的添加、刪除、修改以及子節(jié)點(diǎn)的變化),會(huì)主動(dòng)通知監(jiān)聽了這個(gè)znode的客戶端。zookeeper的通知機(jī)制有一次性觸發(fā)原則,znode發(fā)生變化后,一旦通知了客戶端,則斷開客戶端的監(jiān)聽,如果需要繼續(xù)監(jiān)聽節(jié)點(diǎn)的變化,則必須重新發(fā)起監(jiān)聽。

exists - 可以監(jiān)聽到節(jié)點(diǎn)創(chuàng)建、節(jié)點(diǎn)的內(nèi)容修改、節(jié)點(diǎn)的刪除

getData - 可以監(jiān)聽節(jié)點(diǎn)內(nèi)容修改,節(jié)點(diǎn)的刪除

getChildren - 可以監(jiān)聽子節(jié)點(diǎn)的添加、刪除(子節(jié)點(diǎn)內(nèi)容變化和子節(jié)點(diǎn)的子節(jié)點(diǎn)的變化不能監(jiān)聽)

四、Zookeeper的運(yùn)用場(chǎng)景

?1)配置文件統(tǒng)一管理

? ? 在分布式集群的工程中,通常由很多服務(wù)部署在不同的服務(wù)上,每個(gè)服務(wù)都有自己的配置信息,如果需要修改某個(gè)配置,則可能需要對(duì)多態(tài)服務(wù)器進(jìn)行配置的修改,是非常不方便的。那么就可以使用zookeeper幫助我們進(jìn)行統(tǒng)一的配置文件管理。

好程序員Java教程分享Zookeeper基本原理與運(yùn)用場(chǎng)景

? ? 在zookeeper上創(chuàng)建一個(gè)持久化節(jié)點(diǎn),將所有的配置信息放入到這個(gè)節(jié)點(diǎn)中,然后每臺(tái)服務(wù)器都去監(jiān)聽這個(gè)節(jié)點(diǎn)的變化(Watch機(jī)制)。如果有新的配置信息,開發(fā)者只需要上傳到zookeeper的這個(gè)節(jié)點(diǎn)上(更新節(jié)點(diǎn)的配置數(shù)據(jù))。每個(gè)服務(wù)就能收到zookeeper節(jié)點(diǎn)的更新通知,然后從節(jié)點(diǎn)中讀取新的配置,應(yīng)用到系統(tǒng)中,完成配置的更新。

2)集群管理

? ? 在某些集群中,可能需要知道其他集群服務(wù)器的狀態(tài),比如有新的機(jī)器加入集群,或者有老的機(jī)器退出集群等。這個(gè)時(shí)候就可以通過zookeeper進(jìn)行集群的統(tǒng)一管理。

好程序員Java教程分享Zookeeper基本原理與運(yùn)用場(chǎng)景

3)分布式鎖

? ??·?保持獨(dú)占

好程序員Java教程分享Zookeeper基本原理與運(yùn)用場(chǎng)景

?? ??? ??? ?

? ??·?控制順序

?? ??? ?? 所有客戶端同時(shí)在一個(gè)節(jié)點(diǎn)的下面創(chuàng)建臨時(shí)順序節(jié)點(diǎn)。然后只需要讓編號(hào)最小的節(jié)點(diǎn)的機(jī)器獲得鎖就可以了。

? ??

五、Zookeeper的集群

? ??集群的工作原理:

好程序員Java教程分享Zookeeper基本原理與運(yùn)用場(chǎng)景

? ? zookeeper集群可能有N臺(tái)機(jī)器,這些機(jī)器中一定會(huì)存在一個(gè)leader,其他的機(jī)器就是follower。對(duì)于客戶端來說,可以隨意連接任何一個(gè)集群中服務(wù)器。如果某個(gè)客戶端需要對(duì)zk進(jìn)行更改的操作,這些操作命令最終需要提交給leader。leader將命令分發(fā)給所有的集群服務(wù)器。當(dāng)一半以上的集群服務(wù)器執(zhí)行該命令成功,則leader就會(huì)通知所有節(jié)點(diǎn)進(jìn)行事務(wù)提交,達(dá)到數(shù)據(jù)同步更新的目的。

????zookeeper集群的“過半數(shù)存活原則”:

? ? 在zookeeper集群中,當(dāng)存活的機(jī)器數(shù)量超過總集群一半的時(shí)候,整個(gè)集群才能正常工作。

? ??基于過半數(shù)存活原則,zookeeper的集群數(shù)量一定是奇數(shù)臺(tái)。

? ?為什么zookeeper需要設(shè)計(jì)一個(gè)過半數(shù)存活機(jī)制?

好程序員Java教程分享Zookeeper基本原理與運(yùn)用場(chǎng)景

? ? 因?yàn)檎麄€(gè)集群中,有可能因?yàn)椤澳X裂“,導(dǎo)致整個(gè)集群分為2個(gè)甚至多個(gè)集群,如果沒有“過半數(shù)存活的機(jī)制“,那么整個(gè)zookeeper集群提供的數(shù)據(jù)將無法再保證數(shù)據(jù)一致性。所以為了保證整體數(shù)據(jù)的強(qiáng)一致性,zookeeper規(guī)定了過半數(shù)存活這個(gè)原則。

?? ?

? ??zookeeper集群的角色:

? ? leader:領(lǐng)導(dǎo)者

? ? follower:追隨者

? ? observer:觀察者,觀察者和追隨者功能一樣,但是區(qū)別在于觀察者不會(huì)參與投票環(huán)節(jié)。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

當(dāng)前標(biāo)題:好程序員Java教程分享Zookeeper基本原理與運(yùn)用場(chǎng)景-創(chuàng)新互聯(lián)
轉(zhuǎn)載源于:http://muchs.cn/article4/dsgcie.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)公司、搜索引擎優(yōu)化標(biāo)簽優(yōu)化、網(wǎng)站設(shè)計(jì)、面包屑導(dǎo)航、定制網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

綿陽服務(wù)器托管