摘要:由于分布式系統(tǒng)和應(yīng)用可以提供更強(qiáng)的計(jì)算能力,還能更好地容災(zāi)和擴(kuò)展,所以逐漸受到青睞?;A(chǔ)由若干條指令組成,用于完成特定功能的過(guò)程稱(chēng)為原語(yǔ)。
信息飛速膨脹,很多應(yīng)用無(wú)法依賴(lài)單個(gè)服務(wù)器處理龐大的數(shù)據(jù)量。由于分布式系統(tǒng)和應(yīng)用可以提供更強(qiáng)的計(jì)算能力,還能更好地容災(zāi)和擴(kuò)展,所以逐漸受到青睞。
在開(kāi)發(fā)分布式應(yīng)用時(shí),通常需要花費(fèi)大量時(shí)間和精力來(lái)處理異構(gòu)系統(tǒng)中的協(xié)作通信問(wèn)題。
什么是 ZooKeeperZooKeeper 專(zhuān)注于任務(wù)協(xié)作,能為大型分布式系統(tǒng)提供可靠的協(xié)作處理能力,簡(jiǎn)化開(kāi)發(fā)流程,讓開(kāi)發(fā)人員更專(zhuān)注于應(yīng)用本身的邏輯。
ZooKeeper 具有 C-S 結(jié)構(gòu),在使用時(shí),開(kāi)發(fā)的應(yīng)用可以看做為連接到 ZooKeeper 服務(wù)器的客戶(hù)端,通過(guò)客戶(hù)端 API 進(jìn)行操作,保障強(qiáng)一致性、有序性和持久性,具有實(shí)現(xiàn)同步原語(yǔ)的能力,提供簡(jiǎn)單的并發(fā)處理機(jī)制。常見(jiàn)的用法如:選舉主節(jié)點(diǎn)、崩潰檢測(cè)、存儲(chǔ)元數(shù)據(jù)等。
注意,ZooKeeper 不適用于海量信息存儲(chǔ),設(shè)計(jì)應(yīng)用時(shí)最好將應(yīng)用數(shù)據(jù)與協(xié)同數(shù)據(jù)分開(kāi),使用數(shù)據(jù)庫(kù)、分布式文件系統(tǒng)等存儲(chǔ)應(yīng)用數(shù)據(jù)。
ZooKeeper 基礎(chǔ)由若干條指令組成,用于完成特定功能的過(guò)程稱(chēng)為原語(yǔ)。
為了保證靈活性,ZooKeeper 不直接提供原語(yǔ),而是暴露出類(lèi)似文件系統(tǒng)的 API,讓開(kāi)發(fā)人員通過(guò) API 實(shí)現(xiàn)自己的原語(yǔ),通常使用菜譜( recipes )來(lái)表示原語(yǔ)的實(shí)現(xiàn)。
ZooKeeper 操作和維護(hù)的為一個(gè)個(gè)數(shù)據(jù)節(jié)點(diǎn),稱(chēng)為 znode,采用類(lèi)似文件系統(tǒng)的層級(jí)樹(shù)狀結(jié)構(gòu)進(jìn)行管理。如果 znode 節(jié)點(diǎn)包含數(shù)據(jù)則存儲(chǔ)為字節(jié)數(shù)組(byte array)。
API 概述ZooKeeper 暴露如下 API:
create /path data 創(chuàng)建節(jié)點(diǎn)并包含數(shù)據(jù)
delete /path 刪除節(jié)點(diǎn)
exists /path 檢查節(jié)點(diǎn)是否存在
setData /path data 設(shè)置節(jié)點(diǎn)數(shù)據(jù)
getData /path 獲取節(jié)點(diǎn)數(shù)據(jù)
getChildren /path 獲取子節(jié)點(diǎn)列表
ZooKeeper 不允許局部讀取或?qū)懭霐?shù)據(jù),讀取時(shí)會(huì)將節(jié)點(diǎn)數(shù)據(jù)全部讀取,寫(xiě)入時(shí)會(huì)整個(gè)替換。
節(jié)點(diǎn)類(lèi)型創(chuàng)建 znode 時(shí)需要指定節(jié)點(diǎn)類(lèi)型,節(jié)點(diǎn)的類(lèi)型會(huì)影響其行為方式。
znode 分為持久節(jié)點(diǎn)和臨時(shí)節(jié)點(diǎn)。持久節(jié)點(diǎn)只有通過(guò)調(diào)用 delete API 才能刪除;臨時(shí)節(jié)點(diǎn)在客戶(hù)端崩潰或關(guān)閉與 ZooKeeper 服務(wù)器連接時(shí)就會(huì)被刪除,調(diào)用 delete API 也能刪除臨時(shí)節(jié)點(diǎn)。
znode 可設(shè)置為有序節(jié)點(diǎn)。有序節(jié)點(diǎn)在創(chuàng)建時(shí)會(huì)分配一個(gè)整數(shù)序號(hào)追加到路徑之后,如創(chuàng)建 /tasks/task- 有序節(jié)點(diǎn),追加整數(shù)后節(jié)點(diǎn)路徑為 /tasks/task-1 。
綜上,znode 共有 4 種類(lèi)型,分別為:持久(無(wú)序)、臨時(shí)(無(wú)序)、持久有序和臨時(shí)有序。
監(jiān)聽(tīng)通知ZooKeeper 通常以遠(yuǎn)程服務(wù)的方式被訪(fǎng)問(wèn),在數(shù)據(jù)不發(fā)生變化時(shí)頻繁地訪(fǎng)問(wèn)代價(jià)較大,ZooKeeper 的通知機(jī)制可以代替客戶(hù)端的輪訓(xùn)。
客戶(hù)端通過(guò)設(shè)置監(jiān)視點(diǎn)(watcher)向 ZooKeeper 注冊(cè)需要接收通知的 znode,在 znode 發(fā)生變化時(shí) ZooKeeper 向客戶(hù)端發(fā)送消息。
通知機(jī)制是單次觸發(fā)的操作,如需不斷監(jiān)聽(tīng) znode 的變化,需要在接收到 znode 變更時(shí)設(shè)置新的監(jiān)視點(diǎn)。
監(jiān)視點(diǎn)有多種類(lèi)型,如監(jiān)控 znode 數(shù)據(jù)變化、監(jiān)控 znode 子節(jié)點(diǎn)變化、監(jiān)控 znode 創(chuàng)建或刪除。
版本匹配每個(gè) znode 都有一個(gè)隨數(shù)據(jù)變化而自增的版本號(hào),多個(gè)寫(xiě)入操作會(huì)有條件的執(zhí)行。寫(xiě)入操作會(huì)將版本號(hào)作為參數(shù),當(dāng)與服務(wù)器上版本號(hào)一致時(shí)才會(huì)調(diào)用成功,這點(diǎn)在多個(gè)客戶(hù)端對(duì)同一個(gè) znode 進(jìn)行操作時(shí)很重要。
仲裁模式只有一臺(tái)多帶帶的 ZooKeeper 服務(wù)器時(shí)為獨(dú)立模式,狀態(tài)無(wú)法復(fù)制。具有一組 ZooKeeper 服務(wù)器時(shí)為仲裁模式,仲裁模式下各個(gè)服務(wù)器間進(jìn)行狀態(tài)的復(fù)制,同時(shí)服務(wù)于客戶(hù)端的請(qǐng)求。
仲裁模式下,如果讓客戶(hù)端等待所有服務(wù)器完成數(shù)據(jù)保存再繼續(xù),延遲問(wèn)題就會(huì)很大,ZooKeeper 通過(guò)法定人數(shù)確定工作時(shí)必須有效運(yùn)行的服務(wù)器最小數(shù)量。如果有 5 臺(tái)服務(wù)器,任意 3 臺(tái)服務(wù)器保存了數(shù)據(jù),客戶(hù)端就可以繼續(xù)工作。其他 2 臺(tái)服務(wù)器最終也會(huì)捕獲到數(shù)據(jù)進(jìn)行保存。
服務(wù)器的個(gè)數(shù)應(yīng)該為奇數(shù),如有 5 臺(tái)服務(wù)器,則最多允許 2 臺(tái)崩潰。假如服務(wù)器個(gè)數(shù)為偶數(shù),允許崩潰的服務(wù)器數(shù)量不會(huì)增加,法定人數(shù)卻更大,需要更多的確認(rèn)操作。
開(kāi)始使用 ZooKeeper開(kāi)始使用 ZooKeeper 之前,需要 下載 ZooKeeper 發(fā)行包 。解壓 tar 格式的壓縮文件,bin 目錄下有啟動(dòng) ZooKeeper 的腳本,conf 目錄下存放著 ZooKeeper 的配置文件,lib 目錄下存放著一些運(yùn)行所需的第三方文件。
啟動(dòng)服務(wù)器在 ZooKeeper 目錄下執(zhí)行以下命令啟動(dòng) ZooKeeper 服務(wù)器。
$ bin/zkServer.sh start啟動(dòng)客戶(hù)端
$ bin/zkCli.sh列出根節(jié)點(diǎn)下的所有節(jié)點(diǎn)
[zk: localhost:2181(CONNECTED) 0] ls / [zookeeper]創(chuàng)建節(jié)點(diǎn)
[zk: localhost:2181(CONNECTED) 1] create /test "" Created /test [zk: localhost:2181(CONNECTED) 2] ls / [zookeeper, test]刪除節(jié)點(diǎn)
[zk: localhost:2181(CONNECTED) 3] delete /test [zk: localhost:2181(CONNECTED) 4] ls / [zookeeper]退出客戶(hù)端
[zk: localhost:2181(CONNECTED) 5] quit Quitting... 2018-05-02 15:58:34,004 [myid:] - INFO [main:ZooKeeper@684] - Session: 0x1630a0cdc400001 closed 2018-05-02 15:58:34,006 [myid:] - INFO [main-EventThread:ClientCnxn$EventThread@519] - EventThread shut down for session: 0x1630a0cdc400001關(guān)閉服務(wù)器
$ bin/zkServer.sh stop
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/76520.html
摘要:具有不可分割性即原語(yǔ)的執(zhí)行必須是連續(xù)的,在執(zhí)行過(guò)程中不允許被中斷。提供服務(wù)主要就是通過(guò)數(shù)據(jù)結(jié)構(gòu)原語(yǔ)集機(jī)制達(dá)到的。子節(jié)點(diǎn)的版本號(hào)數(shù)據(jù)節(jié)點(diǎn)版本號(hào)版本號(hào)創(chuàng)建該節(jié)點(diǎn)的會(huì)話(huà)的。后位則為遞增序列。 前言 最近加入了部門(mén)的技術(shù)興趣小組,被分配了Zookeeper的研究任務(wù)。在研究過(guò)程當(dāng)中,發(fā)現(xiàn)Zookeeper由于其開(kāi)源的特性和其卓越的性能特點(diǎn),在業(yè)界使用廣泛,有很多的應(yīng)用場(chǎng)景,而這些不同的應(yīng)用場(chǎng)景...
摘要:有可能是宕機(jī)或負(fù)荷嚴(yán)重的情況導(dǎo)致的。為分布式系統(tǒng)提供了協(xié)調(diào)功能和控制沖突。 背景 隨著計(jì)算機(jī)的硬件和操作系統(tǒng)兩者相輔相成地發(fā)展,從早期的ENIAC計(jì)算機(jī)到現(xiàn)在的x86的計(jì)算機(jī),從以前的單一控制終端(Single Operator, Single Console, SOSC)的操作系統(tǒng)到現(xiàn)在百花爭(zhēng)鳴的操作系統(tǒng)(如MacOS、Windows、Linux等),現(xiàn)代的操作系統(tǒng)發(fā)展還有一個(gè)最重要...
摘要:的設(shè)計(jì)目標(biāo)是將那些復(fù)雜且容易出錯(cuò)的分布式一致性服務(wù)封裝起來(lái),構(gòu)成一個(gè)高效可靠的原語(yǔ)集,并以一系列簡(jiǎn)單易用的接口提供給用戶(hù)使用。具有不可分割性即原語(yǔ)的執(zhí)行必須是連續(xù)的,在執(zhí)行過(guò)程中不允許被中斷。 該文已加入開(kāi)源文檔:JavaGuide(一份涵蓋大部分Java程序員所需要掌握的核心知識(shí))。地址:https://github.com/Snailclimb... showImg(https:...
摘要:之后服務(wù)器等待其他服務(wù)器的反饋,一旦超過(guò)半數(shù)的服務(wù)器進(jìn)行了正確的反饋,那么就會(huì)再次向所有的服務(wù)器分發(fā)消息,要求其將前一個(gè)進(jìn)行提交。協(xié)議包括兩種基本的模式,分別是崩潰恢復(fù)和消息廣播。 前言 zookeeper本質(zhì)上就是一個(gè)分布式協(xié)調(diào)服務(wù),用來(lái)解決分布式一致性的問(wèn)題。 本文適合有一定分布式基礎(chǔ)的讀者閱讀。什么叫相關(guān)的基礎(chǔ)呢?起碼你得知道系統(tǒng)架構(gòu)為何從集中式演變成了分布式,分布式有哪些優(yōu)點(diǎn)...
摘要:協(xié)議是為分布式協(xié)調(diào)服務(wù)專(zhuān)門(mén)設(shè)計(jì)的一種支持崩潰恢復(fù)的一致性協(xié)議,這個(gè)機(jī)制保證了各個(gè)之間的同步。選主是協(xié)議中最為重要和復(fù)雜的過(guò)程。以實(shí)際效果而言,分區(qū)相當(dāng)于對(duì)通信的時(shí)限要求。參考官方文檔阿里巴巴為什么不用做服務(wù)發(fā)現(xiàn)定理的含義阮一峰 前言 同學(xué)們,在上一章中,我們主要講了Zookeeper兩種啟動(dòng)模式以及具體如何搭建。本章內(nèi)容主要講的是集群相關(guān)的原理內(nèi)容,第一章可以當(dāng)做是Zookeeper原...
閱讀 2133·2023-04-26 02:15
閱讀 2359·2021-11-19 09:40
閱讀 1125·2021-10-27 14:13
閱讀 3403·2021-08-23 09:44
閱讀 3705·2019-12-27 12:24
閱讀 707·2019-08-30 15:53
閱讀 1234·2019-08-30 10:53
閱讀 2229·2019-08-26 12:14