Zookeeper詳解(三):Zookeeper中的Znod-創(chuàng)新互聯(lián)

數(shù)據(jù)模型

建德網(wǎng)站建設(shè)公司成都創(chuàng)新互聯(lián)公司,建德網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為建德近千家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)網(wǎng)站建設(shè)要多少錢,請找那個售后服務(wù)好的建德做網(wǎng)站的公司定做!

ZK擁有一個命名空間就像一個精簡的文件系統(tǒng),不同的是它的命名空間中的每個節(jié)點(diǎn)擁有它自己或者它下面子節(jié)點(diǎn)相關(guān)聯(lián)的數(shù)據(jù)。ZK中必須使用絕對路徑也就是使用“/”開頭。

Znode:

ZK目錄樹中每個節(jié)點(diǎn)對應(yīng)一個Znode。每個Znode維護(hù)這一個屬性,當(dāng)前版本、數(shù)據(jù)版本、建立時間和修改時間等,看下圖:

Zookeeper詳解(三):Zookeeper中的Znod

ZK就是使用這些屬性來實(shí)現(xiàn)特殊功能的。當(dāng)一個客戶端要對某個節(jié)點(diǎn)進(jìn)行修改時,必須提供該數(shù)據(jù)的版本號,當(dāng)節(jié)點(diǎn)數(shù)據(jù)發(fā)生變化是其版本號就會增加。如下圖:

Zookeeper詳解(三):Zookeeper中的Znod

Znode具有如下特性:

  • Watches:客戶端可以在節(jié)點(diǎn)上設(shè)置Watches(可以叫做監(jiān)視器)。當(dāng)節(jié)點(diǎn)狀態(tài)發(fā)生變化時,就會觸發(fā)監(jiān)視器對應(yīng)的操作,當(dāng)監(jiān)視器被觸發(fā)時,ZK服務(wù)器會向客戶端發(fā)送且只發(fā)送一個通知

  • 數(shù)據(jù)訪問:ZK上存儲的數(shù)據(jù)需要被原子性的操作(要么修改成功要么回到原樣),也是就讀操作將會讀取節(jié)點(diǎn)相關(guān)所有數(shù)據(jù),寫操作也會修改節(jié)點(diǎn)相關(guān)所有數(shù)據(jù),,而且每個節(jié)點(diǎn)都有自己的ACL。

節(jié)點(diǎn)類型:ZK中有幾種節(jié)點(diǎn)類型,節(jié)點(diǎn)類型在節(jié)點(diǎn)創(chuàng)建的時候就被確定且不可改變

  • 臨時節(jié)點(diǎn)(EPHEMERAL):臨時創(chuàng)建的,會話結(jié)束節(jié)點(diǎn)自動被刪除,也可以手動刪除,臨時節(jié)點(diǎn)不能擁有子節(jié)點(diǎn)

  • 臨時順序節(jié)點(diǎn)(EPHEMERAL_SEQUENTIAL):具有臨時節(jié)點(diǎn)特征,但是它會有序列號,分布式鎖中會用到該類型節(jié)點(diǎn)

  • 持久節(jié)點(diǎn)(PERSISTENT):創(chuàng)建后永久存在,除非主動刪除。

  • 持久順序節(jié)點(diǎn)(PERSISTENT_SEQUENTIAL):該節(jié)點(diǎn)創(chuàng)建后持久存在,相對于持久節(jié)點(diǎn)它會在節(jié)點(diǎn)名稱后面自動增加一個10位數(shù)字的序列號,這個計(jì)數(shù)對于此節(jié)點(diǎn)的父節(jié)點(diǎn)是唯一,如果這個序列號大于2^32-1就會溢出。

創(chuàng)建順序節(jié)點(diǎn)

create -s /NODE_NAME DATA    # -e參數(shù)為創(chuàng)建臨時節(jié)點(diǎn),如果不帶參數(shù)則創(chuàng)建持久節(jié)點(diǎn)

Zookeeper詳解(三):Zookeeper中的Znod

ZK中的時間和版本號:

ZXID:ZK節(jié)點(diǎn)狀態(tài)改變會導(dǎo)致該節(jié)點(diǎn)收到一個zxid格式的時間戳,這個時間戳是全局有序的,每次更新都會產(chǎn)生一個新的。如果zxid1的值小于zxid2,那么說明zxid2發(fā)生的改變在zxid1之后。zxid是一個唯一的事務(wù)ID,具有遞增性,一個znode的建立或者更新都會產(chǎn)生一個新的zxid值,具體時間有3個cZxid(節(jié)點(diǎn)創(chuàng)建時間)、mZxid(該節(jié)點(diǎn)修改時間,與子節(jié)點(diǎn)無關(guān))、pZxid(該節(jié)點(diǎn)的子節(jié)點(diǎn)的最后一次創(chuàng)建或者修改時間,孫子節(jié)點(diǎn)無關(guān))

version:對節(jié)點(diǎn)的每次操作都會使節(jié)點(diǎn)的版本號增加,有三個版本號dataversion(數(shù)據(jù)版本號)、cversion(子節(jié)點(diǎn)版本號)、aclversion(節(jié)點(diǎn)所擁有的ACL版本號)

Zookeeper詳解(三):Zookeeper中的Znod

cZxid
創(chuàng)建節(jié)點(diǎn)時的事務(wù)ID
ctime
創(chuàng)建節(jié)點(diǎn)時的時間
mZxid
最后修改節(jié)點(diǎn)時的事務(wù)ID
mtime
最后修改節(jié)點(diǎn)時的時間
pZxid
表示該節(jié)點(diǎn)的子節(jié)點(diǎn)列表最后一次修改的事務(wù)ID,添加子節(jié)點(diǎn)或刪除子節(jié)點(diǎn)就會影響子節(jié)點(diǎn)列表,但是修改子節(jié)點(diǎn)的數(shù)據(jù)內(nèi)容則不影響該ID
cversion
子節(jié)點(diǎn)版本號,子節(jié)點(diǎn)每次修改版本號加1
dataversion
數(shù)據(jù)版本號,數(shù)據(jù)每次修改該版本號加1
aclversion
權(quán)限版本號,權(quán)限每次修改該版本號加1
dataLength
該節(jié)點(diǎn)的數(shù)據(jù)長度
numChildren
該節(jié)點(diǎn)擁有子節(jié)點(diǎn)的數(shù)量

版本號的作用

Zookeeper里面的版本號和我們理解的版本號不同,它表示的是對數(shù)據(jù)節(jié)點(diǎn)的內(nèi)容、子節(jié)點(diǎn)列表或者ACL信息的修改次數(shù)。節(jié)點(diǎn)創(chuàng)建時dataversion、aclversion,cversion都為0,每次修改響應(yīng)內(nèi)容其對應(yīng)的版本號加1。

這個版本號的用途就和分布式場景的一個鎖概念有關(guān)。比如演出售票中的一個座位,顯然每個場次中的每個座位都只有一個,不可能賣出2次。如果A下單的時候顯示可售,他想買,那么為了保證他可以下單成功,此時別人就不能買。這時候就需要有一種機(jī)制來保證同一時刻只能有一個人去修改該座位的庫存。這就用到了鎖。鎖有悲觀鎖和樂觀鎖。

  • 悲觀鎖:它會假定所有不同事務(wù)的處理一定會出現(xiàn)干擾,數(shù)據(jù)庫中最嚴(yán)格的并發(fā)控制策略,如果一個事務(wù)A正在對數(shù)據(jù)處理,那么在整個事務(wù)過程中,其他事務(wù)都無法對這個數(shù)據(jù)進(jìn)行更新操作,直到A事務(wù)釋放了這個鎖。

  • 樂觀鎖:它假定所有不同事務(wù)的處理不一定會出現(xiàn)干擾,所以在大部分操作里不許加鎖,但是既然是并發(fā)就有出現(xiàn)干擾的可能,如何解決沖突就是一個問題。在樂觀鎖中當(dāng)你在提交更新請求之前,你要先去檢查你讀取這個數(shù)據(jù)之后該數(shù)據(jù)是否發(fā)生了變化,如果有那么你此次的提交就要放棄,如果沒有就可以提交。

Zookeeper中的版本號就是樂觀鎖,你修改節(jié)點(diǎn)數(shù)據(jù)之前會讀取這個數(shù)據(jù)并記錄該數(shù)據(jù)版本號,當(dāng)你需要更新時會攜帶這個版本號去提交,如果你此時攜帶的版本號(就是你上次讀取出來的)和當(dāng)前節(jié)點(diǎn)的版本號相同則說明該數(shù)據(jù)沒有被修改過,那么你的提交就會成功,如果提交失敗說明該數(shù)據(jù)在你讀取之后和提交之前這段時間內(nèi)被修改了。

這里通過set命令并攜帶版本號提交更新,版本號相同更新就會成功。

Zookeeper詳解(三):Zookeeper中的Znod

如果你再次更新并使用之前的版本號那么就會失敗。

Zookeeper詳解(三):Zookeeper中的Znod


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

當(dāng)前名稱:Zookeeper詳解(三):Zookeeper中的Znod-創(chuàng)新互聯(lián)
鏈接分享:http://bm7419.com/article42/dseohc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供標(biāo)簽優(yōu)化、建站公司、動態(tài)網(wǎng)站ChatGPT、搜索引擎優(yōu)化App開發(fā)

廣告

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

外貿(mào)網(wǎng)站制作