十年網(wǎng)站開發(fā)經(jīng)驗 + 多家企業(yè)客戶 + 靠譜的建站團隊
量身定制 + 運營維護+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
Zookeeper主要用在分布式應用中實現(xiàn)一致性協(xié)調(diào)調(diào)度服務。它的命名空間類似傳統(tǒng)文件系統(tǒng),每個節(jié)點都以唯一的路徑進行標識,不同的是,每個節(jié)點除了可以擁有子節(jié)點外,還可擁有相對性的data數(shù)據(jù)。
成都創(chuàng)新互聯(lián)服務項目包括白銀網(wǎng)站建設、白銀網(wǎng)站制作、白銀網(wǎng)頁制作以及白銀網(wǎng)絡營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關系等,向廣大中小型企業(yè)、政府機構等提供互聯(lián)網(wǎng)行業(yè)的解決方案,白銀網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟效益。目前,我們服務的客戶以成都為中心已經(jīng)輻射到白銀省份的部分城市,未來相信會繼續(xù)擴大服務區(qū)域并繼續(xù)獲得客戶的支持與信任!一、Zookeeper命名空間

上圖是一個典型的Zookeeper命名空間結構,通過路徑"/app1/p_1"可訪問znode1節(jié)點,每個節(jié)點可存儲少量數(shù)據(jù),如狀態(tài)、配置、位置信息等等,且data信息量很小,一般在byte到KB級別。節(jié)點znode維護一個狀態(tài)stat結構(包括數(shù)據(jù)變化的版本號、ACL變化、時間戳),以允許緩存驗證與協(xié)調(diào)更新。每當節(jié)點數(shù)據(jù)內(nèi)容改變時,多一個版本號,類似HBase??蛻舳双@取數(shù)據(jù)的同時也獲取相對應的版本號。節(jié)點數(shù)據(jù)內(nèi)容以原子方式讀寫,讀操作會讀取該znode的全部data數(shù)據(jù),同樣寫操作也會覆蓋該znode的全部data數(shù)據(jù),不存在部分讀寫的情況。同時,每個節(jié)點有一個訪問控制列表ACL(Access Control List)來約束訪問操作,即具有權限控制。
znode存在兩種:
常規(guī)的znode: 由用戶顯式創(chuàng)建和刪除
ephemeral znode:臨時型znode, 其生命周期伴隨于創(chuàng)建它的session, session結束后,ZooKeeper Server會自動刪除它,當然用戶也可以顯式的刪除
二、Zookeeper的Watches
Zookeeper對Node的增刪改查都可觸發(fā)監(jiān)聽,每個client可對一個znode設置一個watch事件。當watch監(jiān)視的數(shù)據(jù)發(fā)生變化時,會通知設置了該watch的client,即watcher。watch事件是一次性觸發(fā)器,即觸發(fā)一次就會被取消,該client如果還要監(jiān)視該znode的變化,需要再次設置相應的watch事件。
注:
watch事件異步發(fā)送至觀察者,可能導致當兩次觸發(fā)時間間隔太短的時候,不同的接收者收到的事件不一致
watch是一次性觸發(fā)的且在獲取watch事件和設置watch事件之間有延遲,所以不能可靠的觀察到節(jié)點的每一次變化
客戶端監(jiān)視一個節(jié)點,總是先獲取watch事件,再發(fā)現(xiàn)節(jié)點的數(shù)據(jù)變化。
watch事件的順序?qū)趜ookeeper服務所見的數(shù)據(jù)更新順序
三、Zookeeper讀寫流程

讀請求到來時,將直接從replicated database獲取數(shù)據(jù),replicated database是一個內(nèi)存數(shù)據(jù)庫,因此讀寫效率高
寫請求到來時,所有的寫請求都會先發(fā)送給一個稱之為leader的server,然后由該leader廣播給各個follower(server),在收到超過一半的server反饋的ack之后,認為此次寫操作成功。同時,再寫操作更新到內(nèi)存數(shù)據(jù)庫之前,會先持久化到磁盤,用于恢復。如下圖所示:

四、在dubbo中的應用
在分布式系統(tǒng)中,通過使用命名服務,客戶端應用能夠根據(jù)指定名字來獲取資源或服務的地址,提供者等信息。被命名的實體通常可以是集群中的機器,提供的服務地址,遠程對象等等——這些我們都可以統(tǒng)稱他們?yōu)槊郑∟ame)。其中較為常見的就是一些分布式服務框架中的服務地址列表。通過調(diào)用ZK提供的創(chuàng)建節(jié)點的API,能夠很容易創(chuàng)建一個全局唯一的path,這個path就可以作為一個名稱。比如dubbo應用中:
服務提供者在啟動的時候,向ZK上的指定節(jié)點/dubbo/${serviceName}/providers目錄下寫入自己的URL地址,這個操作就完成了服務的發(fā)布。
服務消費者啟動的時候,訂閱/dubbo/serviceName/providers目錄下的提供者URL地址,并向/dubbo/serviceName/providers目錄下的提供者URL地址,并向/dubbo/{serviceName} /consumers目錄下寫入自己的URL地址。
注意,所有向ZK上注冊的地址都是臨時節(jié)點,這樣就能夠保證服務提供者和消費者能夠自動感應資源的變化。
另外,Dubbo還有針對服務粒度的監(jiān)控,方法是訂閱/dubbo/${serviceName}目錄下所有提供者和消費者的信息。
另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。