亚洲国产成人精品在线播放_日韩第一页在线观看_人人插人人摸精品在线视频_日韩黄色成人电影_国产人成无码视频在线观看_国产91热爆ts人妖系列_免费观看欧美一级_午夜影院操一操黄片_午夜大片免费爽爽爽影院_日本少妇中文三级

聯(lián)系我們

公司地址: 上海市滬宜公路1188號(hào)4號(hào)樓
     一層
聯(lián)系電話:021-31080981
電子郵箱:soline@soline.com.cn
郵政編碼:201802

Zookeeper 中間件解決方案

中間件ZooKeeper(分布式服務(wù)框架)

1、簡(jiǎn)介       

         Zookeeper是為分布式應(yīng)用提供一致性服務(wù)的軟件,是一個(gè)開(kāi)源的分布式協(xié)調(diào)服務(wù),是開(kāi)源的hadoop項(xiàng)目的一個(gè)子項(xiàng)目,可以提供配置信息管理、命名、分布式同步、集群管理、數(shù)據(jù)庫(kù)切換等服務(wù)。它不適合用來(lái)存儲(chǔ)大量信息,可以用來(lái)存儲(chǔ)一些配置、發(fā)布與訂閱等少量信息。Hadoop、Storm、消息中間件、RPC服務(wù)框架、分布式數(shù)據(jù)庫(kù)同步系統(tǒng),這些都是Zookeeper的應(yīng)用場(chǎng)景。

      zookeeper可以充當(dāng)一個(gè)服務(wù)注冊(cè)表(Service Registry),讓多個(gè)服務(wù)提供者形成一個(gè)集群,讓服務(wù)消費(fèi)者通過(guò)服務(wù)注冊(cè)表獲取具體的服務(wù)訪問(wèn)地址(ip+端口)去訪問(wèn)具體的服務(wù)提供者。

      官方:ZooKeeper是一個(gè)開(kāi)源的的分布式服務(wù)框架,它是Apache Hadoop項(xiàng)目的一個(gè)子項(xiàng)目,主要用來(lái)解決分布式應(yīng)用場(chǎng)景中存在的一些問(wèn)題,如:統(tǒng)一命名服務(wù)、狀態(tài)同步服務(wù)、集群管理、分布式應(yīng)用配置管理等,它支持Standalone模式和分布式模式,在分布式模式下,能夠?yàn)榉植际綉?yīng)用提供高性能和可靠地協(xié)調(diào)服務(wù),而且使用ZooKeeper可以大大簡(jiǎn)化分布式協(xié)調(diào)服務(wù)的實(shí)現(xiàn),為開(kāi)發(fā)分布式應(yīng)用極大地降低了成本。

        Zookeeper 作為一個(gè)分布式的服務(wù)框架,主要用來(lái)解決分布式集群中應(yīng)用系統(tǒng)的一致性問(wèn)題,它能提供基于類似于文件系統(tǒng)的目錄節(jié)點(diǎn)樹(shù)方式的數(shù)據(jù)存儲(chǔ),但是 Zookeeper 并不是用來(lái)專門存儲(chǔ)數(shù)據(jù)的,它的作用主要是用來(lái)維護(hù)和監(jiān)控你存儲(chǔ)的數(shù)據(jù)的狀態(tài)變化。通過(guò)監(jiān)控這些數(shù)據(jù)狀態(tài)的變化,從而可以達(dá)到基于數(shù)據(jù)的集群管理。

        ZooKeeper的目標(biāo)是封裝好易出錯(cuò)的關(guān)鍵服務(wù),將簡(jiǎn)單易用的接口和性能高效、功能穩(wěn)定的系統(tǒng)提供給用戶。

       Zookeeper是一個(gè)基于觀察者模式設(shè)計(jì)的分布式服務(wù)管理框架,負(fù)責(zé)存儲(chǔ)和管理相關(guān)數(shù)據(jù),接收觀察者的注冊(cè)。一旦這些數(shù)據(jù)的狀態(tài)發(fā)生變化,zookeeper就負(fù)責(zé)通知那些已經(jīng)在zookeeper集群進(jìn)行注冊(cè)并關(guān)心這些狀態(tài)發(fā)生變化的觀察者,以便觀察者執(zhí)行相關(guān)操作。

2、Zookeeper的3種角色:

1)Leader   2)Follower   3)Observer

一個(gè) ZooKeeper 集群同一時(shí)刻只會(huì)有一個(gè) Leader,其他都是 Follower 或 Observer。

3、節(jié)點(diǎn)讀寫服務(wù)分工:

 1)ZooKeeper 集群的所有機(jī)器通過(guò)一個(gè) Leader 選舉過(guò)程來(lái)選定一臺(tái)被稱為L(zhǎng)eader

   的機(jī)器,Leader服務(wù)器為客戶端提供讀和寫服務(wù)。

2)Follower 和 Observer 都能提供讀服務(wù),不能提供寫服務(wù)。兩者唯一的區(qū)別在于,

     Observer機(jī)器不參與 Leader 選舉過(guò)程,也不參與寫操作的『過(guò)半寫成功』策略,因此 Observer 可以在不影響寫性能的情況下提升集群的讀性能。

     ZooKeeper 對(duì)外的服務(wù)端口默認(rèn)是2181。

4、zookeeper的結(jié)構(gòu)其實(shí)就是一個(gè)樹(shù)形結(jié)構(gòu),leader就相當(dāng)于其中的根結(jié)點(diǎn),其它節(jié)點(diǎn)就相當(dāng)于follow節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)都保留自己的內(nèi)容。

Zookeeper集群中節(jié)點(diǎn)個(gè)數(shù)一般為奇數(shù)個(gè)(>=3),若集群中Master掛掉,剩余節(jié)點(diǎn)個(gè)數(shù)在半數(shù)以上時(shí),就可以推舉新的主節(jié)點(diǎn),繼續(xù)對(duì)外提供服務(wù)。

客戶端發(fā)起事務(wù)請(qǐng)求,事務(wù)請(qǐng)求的結(jié)果在整個(gè)Zookeeper集群中所有機(jī)器上的應(yīng)用情況是一致的。不會(huì)出現(xiàn)集群中部分機(jī)器應(yīng)用了該事務(wù),而存在另外一部分集群中機(jī)器沒(méi)有應(yīng)用該事務(wù)的情況。在Zookeeper集群中的任何一臺(tái)機(jī)器,其看到的服務(wù)器的數(shù)據(jù)模型是一致的。Zookeeper能夠保證客戶端請(qǐng)求的順序,每個(gè)請(qǐng)求分配一個(gè)全局唯一的遞增編號(hào),用來(lái)反映事務(wù)操作的先后順序。Zookeeper將全量數(shù)據(jù)保存在內(nèi)存中,并直接服務(wù)于所有的非事務(wù)請(qǐng)求,在以讀操作為主的場(chǎng)景中性能非常突出。

Zookeeper使用的數(shù)據(jù)結(jié)構(gòu)為樹(shù)形結(jié)構(gòu),根節(jié)點(diǎn)為"/"。Zookeeper集群中的節(jié)點(diǎn),根據(jù)其身份特性分為leader、follower、observer。leader負(fù)責(zé)客戶端writer類型的請(qǐng)求;follower負(fù)責(zé)客戶端reader類型的請(qǐng)求,并參與leader選舉;observer是特殊的follower,可以接收客戶端reader請(qǐng)求,但是不會(huì)參與選舉,可以用來(lái)擴(kuò)容系統(tǒng)支撐能力,提高讀取速度。

5、Zookeeper使用的是ZAB原子消息廣播協(xié)議,節(jié)點(diǎn)之間的一致性算法為Paxos,能夠保障分布式環(huán)境中數(shù)據(jù)的一致性。分布式場(chǎng)景下高可用是Zookeeper的特性,可以采用第三方客戶端的實(shí)現(xiàn),即Curator框架。

6、Zookeeper集群管理

集群管理:是否有機(jī)器退出和加入、選舉master。

對(duì)于第一點(diǎn),所有機(jī)器約定在父目錄GroupMembers下創(chuàng)建臨時(shí)目錄節(jié)點(diǎn),然后監(jiān)聽(tīng)父目錄節(jié)點(diǎn)的子節(jié)點(diǎn)變化消息。一旦有機(jī)器掛掉,該機(jī)器與 zookeeper的連接斷開(kāi),其所創(chuàng)建的臨時(shí)目錄節(jié)點(diǎn)被刪除,所有其他機(jī)器都收到通知:某個(gè)兄弟目錄被刪除。

新機(jī)器加入也是類似,所有機(jī)器收到通知:新兄弟目錄加入,highcount又有了,對(duì)于第二點(diǎn),我們稍微改變一下,所有機(jī)器創(chuàng)建臨時(shí)順序編號(hào)目錄節(jié)點(diǎn),每次選取編號(hào)最小的機(jī)器作為master就好。

7、Zookeeper工作原理

    Zookeeper 的核心是原子廣播,這個(gè)機(jī)制保證了各個(gè)Server之間的同步。實(shí)現(xiàn)這個(gè)機(jī)制的協(xié)議叫做Zab協(xié)議。Zab協(xié)議有兩種模式,它們分別是恢復(fù)模式(選主)和廣播模式(同步)。當(dāng)服務(wù)啟動(dòng)或者在領(lǐng)導(dǎo)者崩潰后,Zab就進(jìn)入了恢復(fù)模式,當(dāng)領(lǐng)導(dǎo)者被選舉出來(lái),且大多數(shù)Server完成了和 leader的狀態(tài)同步以后,恢復(fù)模式就結(jié)束了。狀態(tài)同步保證了leader和Server具有相同的系統(tǒng)狀態(tài)。

       Zookeeper 從設(shè)計(jì)模式角度來(lái)看,是一個(gè)基于觀察者模式設(shè)計(jì)的分布式服務(wù)管理框架,它負(fù)責(zé)存儲(chǔ)和管理大家都關(guān)心的數(shù)據(jù),然后接受觀察者的注冊(cè),一旦這些數(shù)據(jù)的狀態(tài)發(fā)生變化,Zookeeper 就將負(fù)責(zé)通知已經(jīng)在 Zookeeper 上注冊(cè)的那些觀察者做出相應(yīng)的反應(yīng),從而實(shí)現(xiàn)集群中類似 Master/Slave 管理模式,

Zookeeper

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

樹(shù)結(jié)構(gòu),根節(jié)點(diǎn)為/,每一層用/劃分,且訪問(wèn)時(shí)只能用絕對(duì)路徑訪問(wèn)。這是由于zookeeper的場(chǎng)景大多是定位數(shù)據(jù)模型上的節(jié)點(diǎn),即查找節(jié)點(diǎn),因此底層使用hash結(jié)構(gòu),使用節(jié)點(diǎn)完整路徑作為key,提高查找性能。

image.png

  1. 永久節(jié)點(diǎn):創(chuàng)建后永久存在,顯示調(diào)用delete刪除。

  2. 臨時(shí)節(jié)點(diǎn):創(chuàng)建臨時(shí)節(jié)點(diǎn)的客戶端關(guān)閉連接后(超時(shí)或者異常導(dǎo)致的也算)自動(dòng)刪除。

  3. 有序節(jié)點(diǎn):創(chuàng)建永久或臨時(shí)節(jié)點(diǎn)時(shí),zookeeper自動(dòng)在節(jié)點(diǎn)名稱后面追加單調(diào)遞增的序號(hào),來(lái)表示節(jié)點(diǎn)創(chuàng)建順序。

節(jié)點(diǎn)維護(hù)的數(shù)據(jù)包括:

  1. 節(jié)點(diǎn)數(shù)據(jù),使用二進(jìn)制數(shù)組byte[]存儲(chǔ)

  2. ACL訪問(wèn)控制信息

  3. 子節(jié)點(diǎn)數(shù)據(jù),臨時(shí)絕點(diǎn)不允許有子節(jié)點(diǎn),所以其子節(jié)點(diǎn)字段為null

  4. 記錄自身狀態(tài)信息的字段stat,具體信息見(jiàn)下圖

image.png


悲觀鎖

約定/lock為鎖節(jié)點(diǎn),成功創(chuàng)建/lock節(jié)點(diǎn)的客戶端獲取鎖。


樂(lè)觀鎖

使用CAS,由節(jié)點(diǎn)中存儲(chǔ)的version信息來(lái)實(shí)現(xiàn)。


Watch機(jī)制

一種訂閱監(jiān)聽(tīng)機(jī)制,其使用可以通過(guò)向客戶端構(gòu)造方法、getData、exists 和 getChildren方法參數(shù)傳遞Watcher時(shí)間參數(shù)來(lái)實(shí)現(xiàn)。

new ZooKeeper(String connectString, int sessionTimeout, Watcher watcher);getData(String path, Watcher watcher, Stat stat);

image.png

在客戶端連接服務(wù)端的時(shí)候,可以對(duì)數(shù)據(jù)節(jié)點(diǎn)的創(chuàng)建、刪除、數(shù)據(jù)變更、子節(jié)點(diǎn)的更新等操作進(jìn)行監(jiān)控。

客戶端標(biāo)記消息為watch消息,發(fā)送到服務(wù)端,服務(wù)端收到后將watch記錄到watchManager中,并返回響應(yīng),客戶端拿到響應(yīng)后將watch記錄在自己的zkwatchManager中。

服務(wù)端出發(fā)watch時(shí)會(huì)根據(jù)watchmanage中記錄的來(lái)回調(diào)客戶端,客戶端根據(jù)zkWatchManager來(lái)回調(diào)響應(yīng)函數(shù)。

注意watch是一次性的,回調(diào)完就會(huì)刪除。要多次就要重復(fù)注冊(cè)。

watch可以用來(lái)實(shí)現(xiàn)發(fā)布訂閱如配置中心等功能。

上一篇:無(wú)

下一篇:RPC中間件解決方案