1.zookeeper介紹
成都創(chuàng)新互聯(lián)是專(zhuān)業(yè)的城陽(yáng)網(wǎng)站建設(shè)公司,城陽(yáng)接單;提供成都網(wǎng)站建設(shè)、網(wǎng)站制作,網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專(zhuān)業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行城陽(yáng)網(wǎng)站開(kāi)發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專(zhuān)業(yè)做搜索引擎喜愛(ài)的網(wǎng)站,專(zhuān)業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!(1)zookeeper簡(jiǎn)介:
Zookeeper是一個(gè)分布式的,開(kāi)放源代碼的分布式應(yīng)用程序協(xié)調(diào)服務(wù),是Google的chubby一個(gè)開(kāi)源的實(shí)現(xiàn)。
它提供了簡(jiǎn)單原始的功能,分布式應(yīng)用可以基于它實(shí)現(xiàn)更高的服務(wù),比如分布式同步,配置管理,集群管理,
命名管理,隊(duì)列管理。它被設(shè)計(jì)為易與編程,使用文件系統(tǒng)目錄樹(shù)作為數(shù)據(jù)模型。服務(wù)端跑在 java 上,提供 java 和 C 的客戶端 API。
zookeeper是集群的管理者,監(jiān)視著集群中各個(gè)節(jié)點(diǎn)的狀態(tài),根據(jù)節(jié)點(diǎn)提供的反饋進(jìn)行一步合理操作。最終,將簡(jiǎn)單易用的接口
和功能穩(wěn)定,性能高效的系統(tǒng)提供給用戶。
官網(wǎng)地址:
http://ZooKeeper.apache.org/
官網(wǎng)快速開(kāi)始地址:
http://ZooKeeper.apache.org/doc/trunk/ZooKeeperStarted.html
官網(wǎng) API 地址:
http://ZooKeeper.apache.org/doc/r3.4.10/api/index.html
2.zookeeper的相關(guān)功能
(1)文件系統(tǒng):
ZooKeeper 的命名空間就是 ZooKeeper 應(yīng)用的文件系統(tǒng),它和 linux 的文件系統(tǒng)很像,也是樹(shù)狀,這樣就可以確定每個(gè)路徑都是唯一的,
對(duì)于命名空間的操作必須都是絕對(duì)路徑操作。與Linux文件系統(tǒng)不同的是,Linux文件系統(tǒng) 有目錄和文件的區(qū)別,而ZooKeeper統(tǒng)一叫znode,
一個(gè)znode節(jié)點(diǎn)可以包含子znode,同時(shí)也可以包含數(shù)據(jù)。
znode 即是文件夾又是文件的概念,所以在 ZooKeeper 這里面就不叫文件文 件也不叫文件夾,叫znode,每個(gè)znode有唯一的路徑標(biāo)識(shí),
既能存儲(chǔ)數(shù)據(jù),也能創(chuàng)建子znode。但是znode只適合存儲(chǔ)非常小的數(shù)據(jù),不能超過(guò)1M,最好都小于1K。
zookeeper的文件系統(tǒng)的特點(diǎn):
zk的文件系統(tǒng)和Linux的文件系統(tǒng)目錄結(jié)構(gòu)一樣,從”“/開(kāi)始
zk的訪問(wèn)路徑只有絕對(duì)路徑,沒(méi)有相對(duì)路徑。
zk中沒(méi)有文件和目錄的概念,只有znode節(jié)點(diǎn),Znode既有文件的功能,又有目錄的功能
(2)znode介紹:
znode在類(lèi)型上分為兩種:短暫的(斷開(kāi)時(shí)刪除)、持久的(斷開(kāi)時(shí)保留)。但是znode有4形式的節(jié)點(diǎn)表現(xiàn):
persistent | 持久化znode節(jié)點(diǎn),一旦創(chuàng)建這個(gè)znode點(diǎn)存儲(chǔ)的數(shù)據(jù)不會(huì)主動(dòng)消失,除非客戶端主動(dòng)delete |
Persistent_sequential | 自動(dòng)增加順序編號(hào)的znode節(jié)點(diǎn),比如ClientA 去 zk service 上建 立一個(gè) znode 名字叫做/zk/conf,指定了 這種類(lèi)型的節(jié)點(diǎn)后 zk 會(huì) 創(chuàng) 建 /zk/conf0000000000 , ClientB 再 去 創(chuàng) 建 就 是 創(chuàng) 建 /zk/conf0000000001, ClientC 是創(chuàng)建/zk/conf0000000002,以后任 意 Client 來(lái)創(chuàng)建這個(gè) znode 都會(huì)得到一個(gè)比當(dāng)前 zk 命名空間最 大 znode 編號(hào)+1 的 znode,也就說(shuō)任意一個(gè) Client 去創(chuàng)建 znode 都是保證得到的 znode 是遞增的,而且是 唯一的。(原子性原則) |
Ephemral | 臨時(shí)znode節(jié)點(diǎn),client連接到zkservice的時(shí)候會(huì)建立一個(gè)session,之后用這個(gè)zk連接實(shí)例創(chuàng)建該類(lèi)型的znode ,一旦client關(guān)閉了zk的連接,服務(wù)器就會(huì)清除 session,然后這個(gè) session 建立的 znode 節(jié)點(diǎn)都會(huì)從命名空間 消失。 |
Ephemral_ sequential | 臨時(shí)自動(dòng)編號(hào)設(shè)置,znode節(jié)點(diǎn)編號(hào)會(huì)自動(dòng)增加,但是會(huì)隨著session消失而消失。 |
zookeeper的znode的相關(guān)特點(diǎn):
創(chuàng)建znode時(shí)設(shè)置順序標(biāo)識(shí),znode名稱(chēng)后會(huì)附加一個(gè)值,順序號(hào)是一個(gè)單調(diào)遞增的計(jì)數(shù)器,由父節(jié)點(diǎn)維護(hù)。(無(wú)論創(chuàng)建的是否是有編號(hào)節(jié)點(diǎn),都為順序遞增)
EPHEMERAL 類(lèi)型的節(jié)點(diǎn)不能有子節(jié)點(diǎn)
zk的znode的分類(lèi):臨時(shí)節(jié)點(diǎn)(EPHEMERAL)、永久節(jié)點(diǎn)(persistent)、有編號(hào)節(jié)點(diǎn)(Persistent_sequential)、臨時(shí)有編號(hào)(Ephemral_ sequential)
對(duì)于zk來(lái)說(shuō),它的znode中儲(chǔ)存的數(shù)據(jù)不能超過(guò)1M,最好不要超過(guò)1KB,如果數(shù)據(jù)量比較大,很難保證數(shù)據(jù)的一致性
對(duì)于zk來(lái)說(shuō),有幾個(gè)節(jié)點(diǎn)數(shù)據(jù)就會(huì)存儲(chǔ)幾份
3.zookeeper的監(jiān)聽(tīng)機(jī)制
(1)監(jiān)聽(tīng)機(jī)制介紹:
客戶端注冊(cè)監(jiān)聽(tīng)它關(guān)心的目錄節(jié)點(diǎn),當(dāng)目錄節(jié)點(diǎn)發(fā)生變化(數(shù)據(jù)改變、節(jié)點(diǎn)刪除、子目錄節(jié) 點(diǎn)增加刪除)時(shí),zookeeper會(huì)通知客戶端。
監(jiān)聽(tīng)機(jī)制保證zookeeper保存的任何的數(shù)據(jù)的任何改變都能快速的相應(yīng)到監(jiān)聽(tīng)了該節(jié)點(diǎn)的應(yīng)用程序。監(jiān)聽(tīng)器的工作機(jī)制,其實(shí)是在客戶端會(huì)專(zhuān)門(mén)
創(chuàng)建一個(gè)監(jiān)聽(tīng)線程,在本機(jī)的一個(gè)端口上等待zk集群發(fā)送過(guò)來(lái)的事件。
(2)監(jiān)聽(tīng)的觸發(fā)
Znode的創(chuàng)建----nodeCreated
Znode 被刪除---nodeDelete
Znode的數(shù)據(jù)變化---nodedatachanged
Znode的子節(jié)點(diǎn)的變化----nodeChildrenchange
注意:監(jiān)聽(tīng)只生效一次。(可以使用循環(huán)監(jiān)聽(tīng)取,去實(shí)現(xiàn)一直監(jiān)聽(tīng))。
(3)監(jiān)聽(tīng)機(jī)制的工作原理
解釋?zhuān)?ZooKeeper 的 Watcher 機(jī)制主要包括:客戶端線程、客戶端 WatcherManager、Zookeeper 服務(wù) 器三部分??蛻舳嗽谙騴ookeeper服務(wù)器
注冊(cè)的同時(shí),會(huì)將Watcher對(duì)象存儲(chǔ)在客戶端的WatcherManager當(dāng)中。當(dāng)zookeeper服務(wù)器觸發(fā)watcher事件后,會(huì)向客戶端發(fā)送通知,
客戶端線程從 WatcherManager 中取出對(duì)應(yīng)的 Watcher 對(duì)象來(lái)執(zhí)行回調(diào)邏輯。
(4)監(jiān)聽(tīng)的設(shè)置:
相應(yīng)的觸發(fā):
ls--觸發(fā)---create 、delete(子節(jié)點(diǎn))
get--觸發(fā)—set
exists--觸發(fā)--- create 、delete(當(dāng)前節(jié)點(diǎn))
4. Zookeeper的特點(diǎn)
最終一致性:client不論連接哪個(gè)server,展示給他的都是同一個(gè)視圖,這是zookeeper最重要特定。
可靠性:具有簡(jiǎn)單、健壯、良好的性能,如果消息M被一臺(tái)服務(wù)器接收,那么它將被 所有的服務(wù)器接受。
實(shí)時(shí)性:ZooKeeper 保證客戶端將在一個(gè)時(shí)間間隔范圍內(nèi)獲得服務(wù)器的更新信息,或者 服務(wù)器失效的信息。但由于網(wǎng)絡(luò)延時(shí)等原因,
ZooKeeper 不能保證兩個(gè)客戶端能同時(shí)得 到剛更新的數(shù)據(jù),如果需要最新數(shù)據(jù),應(yīng)該在讀數(shù)據(jù)之前調(diào)用 sync()接口。
等待無(wú)關(guān):慢的或者失效的 client 不得干預(yù)快速的 client 的請(qǐng)求,使得每個(gè) client 都能有效的等待。
原子性:更新只能成功或者失敗,沒(méi)有中間狀態(tài)。
順序性:包括全局有序和偏序兩種:全局有序是指如果在一臺(tái)服務(wù)器上消息 a 在消息 b 前發(fā)布,則在所有 Server 上消息 a 都將在消息 b 前被發(fā)布;
偏序是指如果一個(gè)消息 b 在 消息 a 后被同一個(gè)發(fā)送者發(fā)布,a 必將排在 b 前面。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。