好程序員Java教程分享Zookeeper基本原理與運用場景一、什么是Zookeeper?
創(chuàng)新互聯(lián)建站從2013年創(chuàng)立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目網(wǎng)站制作、網(wǎng)站建設(shè)網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元商丘做網(wǎng)站,已為上家服務(wù),為商丘各地企業(yè)和個人服務(wù),聯(lián)系電話:18982081108
? ? zookeeper是一個分布式的一致性協(xié)調(diào)服務(wù)。
? ??換句話說,也可以把zookeeper看成一個小型的分布式文件系統(tǒng)。但是和FastDFS不同,zookeeper只適合用來存儲一些小型的數(shù)據(jù)或者配置信息。
?
?
? ? zookeeper底層是一個樹形結(jié)構(gòu),進行數(shù)據(jù)的存儲。
和Linux、Window等系統(tǒng)不同:
?? ?Linux和Window中有文件和文件夾的概念。文件夾下面只能有文件,文件下面不能再有數(shù)據(jù)。文件夾本身不存放數(shù)據(jù),文件本身用來進行數(shù)據(jù)存儲。
? ? Zookeeper中的節(jié)點,沒有文件夾和文件之分,所有節(jié)點都可以進行數(shù)據(jù)存儲,同時也可以擁有子節(jié)點。每個節(jié)點稱之為znode
?
??? znode的分類:
? ? 1)臨時節(jié)點-ephemeral:臨時節(jié)點由某個客戶端創(chuàng)建,如果該客戶端斷開了和zookeeper服務(wù)器的鏈接,則該臨時節(jié)點就會被自動刪除。注意:臨時節(jié)點不能有子節(jié)點。
? ? 2)持久性節(jié)點-persistent:持久化的節(jié)點會永久存在于文件系統(tǒng)中,除非客戶端顯示的刪除該節(jié)點。該節(jié)點是最常見的節(jié)點。
? ? 3)臨時順序節(jié)點-ephemeral_sequential:和臨時節(jié)點擁有相同的特點,唯一的卻別在于該節(jié)點名稱會自動維護一個編號。
? ? 4)持久性順序節(jié)點-persistent_sequential:和持久性節(jié)點擁有相同的特點,唯一的卻別在于該節(jié)點名稱會自動維護一個編號。
?
? ??文件系統(tǒng)的操作命令:
? ??ls?路徑:查看某個路徑下的子節(jié)點情況,zk中只能寫絕對路徑(所有的路徑都必須從/出發(fā))
? ??create [-s] [-e] path data?:?創(chuàng)建一個節(jié)點,在path路徑的位置。數(shù)據(jù)為data(數(shù)據(jù)不能為空,至少要為'')。-s表示順序節(jié)點 -e臨時節(jié)點
? ??get?路徑:查看指定路徑對應(yīng)的節(jié)點數(shù)據(jù)。每個節(jié)點都分為:數(shù)據(jù)部分、描述信息
? ??set?path?data:修改指定節(jié)點的數(shù)據(jù)
? ??delete path:刪除指定節(jié)點數(shù)據(jù),如果下面的有子節(jié)點需要先刪除子節(jié)點
?
?
?
? ??什么是通知機制?
?? ?? ? 客戶端可以選擇對某個znode進行監(jiān)聽。當(dāng)這個znode發(fā)生變化時(本身的添加、刪除、修改以及子節(jié)點的變化),會主動通知監(jiān)聽了這個znode的客戶端。zookeeper的通知機制有一次性觸發(fā)原則,znode發(fā)生變化后,一旦通知了客戶端,則斷開客戶端的監(jiān)聽,如果需要繼續(xù)監(jiān)聽節(jié)點的變化,則必須重新發(fā)起監(jiān)聽。
?
?? ?exists - 可以監(jiān)聽到節(jié)點創(chuàng)建、節(jié)點的內(nèi)容修改、節(jié)點的刪除
?? ?getData - 可以監(jiān)聽節(jié)點內(nèi)容修改,節(jié)點的刪除
?? ?getChildren - 可以監(jiān)聽子節(jié)點的添加、刪除(子節(jié)點內(nèi)容變化和子節(jié)點的子節(jié)點的變化不能監(jiān)聽)
?
?
? ??1)配置文件統(tǒng)一管理
?? ?? ? 在分布式集群的工程中,通常由很多服務(wù)部署在不同的服務(wù)上,每個服務(wù)都有自己的配置信息,如果需要修改某個配置,則可能需要對多態(tài)服務(wù)器進行配置的修改,是非常不方便的。那么就可以使用zookeeper幫助我們進行統(tǒng)一的配置文件管理。
?? ?? ? 在zookeeper上創(chuàng)建一個持久化節(jié)點,將所有的配置信息放入到這個節(jié)點中,然后每臺服務(wù)器都去監(jiān)聽這個節(jié)點的變化(Watch機制)。如果有新的配置信息,開發(fā)者只需要上傳到zookeeper的這個節(jié)點上(更新節(jié)點的配置數(shù)據(jù))。每個服務(wù)就能收到zookeeper節(jié)點的更新通知,然后從節(jié)點中讀取新的配置,應(yīng)用到系統(tǒng)中,完成配置的更新。
?
??? 2)集群管理
?? ?? ? 在某些集群中,可能需要知道其他集群服務(wù)器的狀態(tài),比如有新的機器加入集群,或者有老的機器退出集群等。這個時候就可以通過zookeeper進行集群的統(tǒng)一管理。
?
??? 3)分布式鎖
?? ?? ??·?保持獨占
?? ??? ??? ??? ?
?? ?? ??·?控制順序
?? ??? ??? ?? 所有客戶端同時在一個節(jié)點的下面創(chuàng)建臨時順序節(jié)點。然后只需要讓編號最小的節(jié)點的機器獲得鎖就可以了。
?? ?? ??
?
?? ?? ??集群的工作原理:
?
?? ?? ? zookeeper集群可能有N臺機器,這些機器中一定會存在一個leader,其他的機器就是follower。對于客戶端來說,可以隨意連接任何一個集群中服務(wù)器。如果某個客戶端需要對zk進行更改的操作,這些操作命令最終需要提交給leader。leader將命令分發(fā)給所有的集群服務(wù)器。當(dāng)一半以上的集群服務(wù)器執(zhí)行該命令成功,則leader就會通知所有節(jié)點進行事務(wù)提交,達到數(shù)據(jù)同步更新的目的。
?
?? ?????zookeeper集群的“過半數(shù)存活原則”:
?? ?? ? 在zookeeper集群中,當(dāng)存活的機器數(shù)量超過總集群一半的時候,整個集群才能正常工作。
?? ?? ??基于過半數(shù)存活原則,zookeeper的集群數(shù)量一定是奇數(shù)臺。
?
?? ?? ?為什么zookeeper需要設(shè)計一個過半數(shù)存活機制?
?? ?
?? ?? ? 因為整個集群中,有可能因為“腦裂“,導(dǎo)致整個集群分為2個甚至多個集群,如果沒有“過半數(shù)存活的機制“,那么整個zookeeper集群提供的數(shù)據(jù)將無法再保證數(shù)據(jù)一致性。所以為了保證整體數(shù)據(jù)的強一致性,zookeeper規(guī)定了過半數(shù)存活這個原則。
?? ??? ?
?? ?? ??zookeeper集群的角色:
?? ?? ? leader:領(lǐng)導(dǎo)者
?? ?? ? follower:追隨者
?? ?? ? observer:觀察者,觀察者和追隨者功能一樣,但是區(qū)別在于觀察者不會參與投票環(huán)節(jié)。
?
本文標(biāo)題:好程序員Java教程分享Zookeeper基本原理與運用場景
地址分享:http://jinyejixie.com/article0/pdsdio.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計公司、搜索引擎優(yōu)化、營銷型網(wǎng)站建設(shè)、網(wǎng)站營銷、軟件開發(fā)、服務(wù)器托管
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)