zookeeper 是一個(gè)apache 開源的分布式協(xié)調(diào)服務(wù),具有如下分布式一致性特性:
1.順序一致性:從同一個(gè)客戶端發(fā)起的事務(wù)請(qǐng)求,最終會(huì)嚴(yán)格按照發(fā)起順序應(yīng)用到zookeeper中去
2.原子性:所有事務(wù)請(qǐng)求的處理結(jié)果在整個(gè)集群的所有節(jié)點(diǎn)上是一致的
3.單一視圖:客戶端連接zookeeper集群中的任何節(jié)點(diǎn),看到的數(shù)據(jù)模型都是一致的
4.可靠性:被成功執(zhí)行的事務(wù)請(qǐng)求所引起的服務(wù)器端狀態(tài)變化會(huì)被一直保留下來,除非有別的事務(wù)對(duì)其進(jìn)行了修改
5.實(shí)時(shí)性:最終一致性
一般的主要用途:配置管理、發(fā)布訂閱、分布式鎖、負(fù)載均衡等功能
zookeeper 技術(shù)細(xì)節(jié):
1. 數(shù)據(jù)模型:類似于unix文件系統(tǒng)的樹狀層次結(jié)構(gòu),每一個(gè)節(jié)點(diǎn)稱為znode,znode上可以保存數(shù)據(jù),同時(shí)也可以創(chuàng)建子節(jié)點(diǎn)
2.事務(wù)id:對(duì)于每一個(gè)事務(wù)請(qǐng)求,zookeeper會(huì)為其分配一個(gè)全局唯一的事務(wù)id zxid,一般為64位的數(shù)字。
3.節(jié)點(diǎn)特性:zookeeper中,節(jié)點(diǎn)類型分為臨時(shí)節(jié)點(diǎn)、永久節(jié)點(diǎn)、順序節(jié)點(diǎn),在節(jié)點(diǎn)創(chuàng)建過程中可以隨意組合,組合后的節(jié)點(diǎn)類型為以下4種:1
持久節(jié)點(diǎn)
持久順序節(jié)點(diǎn)
臨時(shí)節(jié)點(diǎn):該節(jié)點(diǎn)的生命周期與創(chuàng)建節(jié)點(diǎn) 的session有關(guān),session失效,該節(jié)點(diǎn)也就會(huì)被自動(dòng)刪除
臨時(shí)順序節(jié)點(diǎn):
常用命令:
1. create 創(chuàng)建節(jié)點(diǎn)
2.get /path? :獲取對(duì)應(yīng)path的數(shù)據(jù)和狀態(tài)信息
cZxid:創(chuàng)建節(jié)點(diǎn)的事務(wù)id
mZxid:節(jié)點(diǎn)最后一次被更新的事務(wù)id
pZxid:該節(jié)點(diǎn)的子節(jié)點(diǎn)列表最后一次被更新的事務(wù)id,這里需要注意 子節(jié)點(diǎn)內(nèi)容變更并不影響pzxid
cversion:當(dāng)前數(shù)據(jù)節(jié)點(diǎn)子節(jié)點(diǎn)的版本號(hào)
aclVersion:當(dāng)前數(shù)據(jù)節(jié)點(diǎn)acl變更版本號(hào)
dataVersion:當(dāng)前節(jié)點(diǎn)數(shù)據(jù)內(nèi)容的版本號(hào)

zookeeper 中version版本的概念用來控制分布式系統(tǒng)中數(shù)據(jù)的原子性操作,例如對(duì)于dataVersion來說,每一個(gè)更新數(shù)據(jù)的請(qǐng)求中攜帶的版本號(hào)和當(dāng)前數(shù)據(jù)節(jié)點(diǎn)的最新版本號(hào)做比對(duì),如果版本不匹配,則拋出異常,反之,則更新成功,版本加1
zookeeper 提供watch機(jī)制,用以對(duì)感興趣的節(jié)點(diǎn)或者操作增加watcher監(jiān)聽,在對(duì)應(yīng)事件發(fā)生時(shí),返回一個(gè)事件通知,zookeeper中的watcher接口定義了一個(gè)標(biāo)準(zhǔn)的事件處理器,定義了事件通知的相關(guān)邏輯,包含keeperState、EventType 兩個(gè)枚舉類
ACL:訪問控制列表,用以實(shí)現(xiàn)對(duì)數(shù)據(jù)節(jié)點(diǎn)的權(quán)限控制,包含 權(quán)限模式(ip、digest、world、super)、授權(quán)對(duì)象ID、權(quán)限(C、A、R、W、A 5種)
權(quán)限模式和授權(quán)對(duì)象的對(duì)應(yīng)關(guān)系
? ? ? ? ? 權(quán)限模式 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 授權(quán)對(duì)象ID
? ? ? ? ? ? ?ip ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 一個(gè)ip地址或者ip段,例如 192.168.1.2 或者192.168.0.1/24
? ? ? ? digest? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 自定義,通常是username:base64(sha-? ? ? ? ? 1(username:password)),計(jì)算方式參見DigestAuthenticationProvider.generateDigest 方法
? ? ?world ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? anyone
? ? super ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 與digest模式一致
例如:digest 模式權(quán)限控制例子
