Zookeeper概述
Zookeeper是一個開源的饼问,分布式的骑素,為分布式框架提供協(xié)調(diào)服務(wù)的Apache項目鲫忍。
分布式現(xiàn)在已經(jīng)是很常見的概念了,簡單理解為多個節(jié)點(diǎn)共同完成一個復(fù)雜任務(wù)鸠儿。
Zookeeper是為別的分布式框架服務(wù)的屹蚊。
其工作機(jī)制如下:
Zookeeper從設(shè)計模式角度來理解:是一個基于觀察者模式的分布式服務(wù)管理框架,它負(fù)責(zé)存儲和管理大家都關(guān)心的數(shù)據(jù)进每,然后接受觀察者的注冊汹粤,一旦這些數(shù)據(jù)的狀態(tài)發(fā)生變化,Zookeeper就將負(fù)責(zé)同志已經(jīng)在Zookeeper上注冊的那些觀察者做出相應(yīng)的反應(yīng)田晚。
Zookeeper相當(dāng)于文件系統(tǒng)+通知機(jī)制嘱兼,相比于文件系統(tǒng)存儲數(shù)據(jù),Zookeeper存的是服務(wù)器上線信息贤徒;通知機(jī)制指客戶端可以提前注冊(打招呼)芹壕,監(jiān)聽機(jī)制
Zookeeper的特點(diǎn)
1.zookeeper:一個領(lǐng)導(dǎo)者(leader),多個跟隨著(follower)組成的集群
2.集群中只要有半數(shù)以上節(jié)點(diǎn)存活接奈,zookeeper集群就能正常服務(wù)踢涌。所以zookeeper適合安裝技術(shù)臺服務(wù)器,偶數(shù)臺會浪費(fèi)一臺服務(wù)器
3.全局?jǐn)?shù)據(jù)一致:每個server保存一份相同的數(shù)據(jù)副本序宦,client無論連接到哪個server數(shù)據(jù)都是一致的
4.更新請求順序執(zhí)行睁壁,來自同一個client的更新請求按其發(fā)送順序依次執(zhí)行
5.數(shù)據(jù)更新原子性,一次數(shù)據(jù)更新要么成功,要么失敗
6.實時性堡僻,在一定時間范圍內(nèi)糠惫,client能讀到最新數(shù)據(jù)
數(shù)據(jù)結(jié)構(gòu)
zookeeper數(shù)據(jù)模型的結(jié)構(gòu)與Unix文件系統(tǒng)很類似,整體上可看作是一棵樹(也類似linux钉疫,hdfs),每一個節(jié)點(diǎn)稱作一個ZNode巢价。每一個ZNode默認(rèn)只能夠存儲1MB的數(shù)據(jù)牲阁。每個ZNode都可以通過其路徑唯一標(biāo)識。
zookeeper無法存儲海量數(shù)據(jù)壤躲,能存儲的內(nèi)容很有限城菊。
應(yīng)用場景
提供的服務(wù)包括:統(tǒng)一命名服務(wù)、統(tǒng)一配置管理碉克、統(tǒng)一集群管理凌唬、服務(wù)器節(jié)點(diǎn)動態(tài)上下限、軟負(fù)載均衡等漏麦。
統(tǒng)一命名服務(wù):
在分布式環(huán)境下客税,經(jīng)常需要對應(yīng)用、服務(wù)進(jìn)行統(tǒng)一命名撕贞,便于識別更耻。
此外nginx對應(yīng)框架也可以實現(xiàn)。
統(tǒng)一配置管理:
分布式環(huán)境下捏膨,配置文件同步非常常見
1.一般要求一個集群中秧均,所有節(jié)點(diǎn)的配置信息是一致的,比如kafka集群号涯,hadoop部分文件目胡。
2.對配置文件修改后,希望快速同步到各個節(jié)點(diǎn)上
配置管理可交由zookeeper實現(xiàn)
1.可將配置信息寫入Zookeeper上的一個ZNode
2.各個客戶端服務(wù)器監(jiān)聽這個ZNode
3.一旦Znode中的數(shù)據(jù)被修改链快,Zookeeper將通知各個客戶端服務(wù)器
統(tǒng)一集群管理
1.分布式環(huán)境中誉己,實時掌握每個節(jié)點(diǎn)的狀態(tài)是必要的
可根據(jù)節(jié)點(diǎn)實時狀態(tài)做出一些調(diào)整
2.zookeeper可以實現(xiàn)實時監(jiān)控節(jié)點(diǎn)狀態(tài)變化
可將節(jié)點(diǎn)信息寫入zookeeper上的一個znode
監(jiān)聽這個znode可獲取它的實時狀態(tài)變化
服務(wù)器動態(tài)上下線
客戶端能實時洞察刀服務(wù)器上下限變化
軟負(fù)載均衡
在Zookeeper中記錄每臺服務(wù)器的訪問數(shù),讓訪問數(shù)量最少的服務(wù)器去處理最新的客戶端請求(nginx也可以實現(xiàn)久又,什么場景使用什么框架)