1.zookeeper介紹
ZooKeeper是一個(gè)分布式的,開放源碼的分布式應(yīng)用程序協(xié)調(diào)服務(wù),是Google的Chubby一個(gè)開源的實(shí)現(xiàn),是Hadoop和Hbase的重要組件。它是一個(gè)為分布式應(yīng)用提供一致性服務(wù)的軟件奥帘,提供的功能包括:配置維護(hù)、域名服務(wù)仪召、分布式同步寨蹋、組服務(wù)等。
ZooKeeper的目標(biāo)就是封裝好復(fù)雜易出錯(cuò)的關(guān)鍵服務(wù)扔茅,將簡(jiǎn)單易用的接口和性能高效已旧、功能穩(wěn)定的系統(tǒng)提供給用戶。
ZooKeeper包含一個(gè)簡(jiǎn)單的原語(yǔ)集,提供Java和C的接口召娜。
ZooKeeper代碼版本中运褪,提供了分布式獨(dú)享鎖、選舉玖瘸、隊(duì)列的接口秸讹,代碼在zookeeper-3.4.3\src\recipes。其中分布鎖和隊(duì)列有Java和C兩個(gè)版本雅倒,選舉只有Java版本璃诀。
2.使用場(chǎng)景
①分布式協(xié)調(diào)
這是ZK的很經(jīng)典的一個(gè)用法,比如A系統(tǒng)發(fā)送了一個(gè)請(qǐng)求到MQ屯断,然后B系統(tǒng)消費(fèi)這個(gè)請(qǐng)求進(jìn)行處理之后文虏,那么A怎么知道B已經(jīng)處理了呢?殖演?這時(shí)候就可以使用zk進(jìn)行協(xié)調(diào)工作氧秘。,A系統(tǒng)發(fā)送請(qǐng)求到MQ之后可以在ZK上多某個(gè)節(jié)點(diǎn)的值注冊(cè)一個(gè)監(jiān)聽器趴久,一旦B系統(tǒng)處理完了請(qǐng)求就修改zk那個(gè)節(jié)點(diǎn)的值丸相,這樣A系統(tǒng)就馬上知道了。
②分布式鎖
對(duì)某一個(gè)數(shù)據(jù)連續(xù)發(fā)出兩個(gè)修改操作彼棍,兩臺(tái)機(jī)器同時(shí)收到了請(qǐng)求灭忠,但是只能一臺(tái)機(jī)器先執(zhí)行另外一個(gè)機(jī)器再執(zhí)行。那么此時(shí)就可以使用zk分布式鎖座硕,一個(gè)機(jī)器接收到了請(qǐng)求之后先獲取zk上的一把分布式鎖弛作,就是可以去創(chuàng)建一個(gè)znode,接著執(zhí)行操作华匾;然后另外一個(gè)機(jī)器也嘗試去創(chuàng)建那個(gè)znode映琳,結(jié)果發(fā)現(xiàn)自己創(chuàng)建不了,因?yàn)楸粍e人創(chuàng)建了蜘拉。萨西。。旭旭。那只能等著谎脯,等第一個(gè)機(jī)器執(zhí)行完了自己再執(zhí)行。
③元數(shù)據(jù)/配置信息管理
zk可以用作很多系統(tǒng)的配置信息的管理持寄,比如kafka源梭、storm等等很多分布式系統(tǒng)都會(huì)選用zk來(lái)做一些元數(shù)據(jù)、配置信息的管理际看,包括dubbo注冊(cè)中心不也支持zk么 咸产。
④HA高可用性
這個(gè)應(yīng)該是很常見的,比如hadoop仲闽、hdfs脑溢、yarn等很多大數(shù)據(jù)系統(tǒng),都選擇基于zk來(lái)開發(fā)HA高可用機(jī)制赖欣,就是一個(gè)重要進(jìn)程一般會(huì)做主備兩個(gè)屑彻,主進(jìn)程掛了立馬通過(guò)zk感知到切換到備用進(jìn)程。