溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Java中Zookeeper注冊(cè)中心原理是什么

發(fā)布時(shí)間:2021-08-02 09:56:32 來源:億速云 閱讀:130 作者:chen 欄目:開發(fā)技術(shù)

本篇內(nèi)容主要講解“Java中Zookeeper注冊(cè)中心原理是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“Java中Zookeeper注冊(cè)中心原理是什么”吧!

RPC框架中有3個(gè)重要的角色:

Java中Zookeeper注冊(cè)中心原理是什么

注冊(cè)中心 :保存所有服務(wù)的名字,服務(wù)提供者的IP列表,服務(wù)消費(fèi)者的IP列表

服務(wù)提供者: 提供跨進(jìn)程服務(wù)

服務(wù)消費(fèi)者: 尋找到指定命名的服務(wù)并消費(fèi)。

Zookeeper用作注冊(cè)中心
簡(jiǎn)單來講,zookeeper可以充當(dāng)一個(gè)服務(wù)注冊(cè)表(Service Registry),讓多個(gè)服務(wù)提供者形成一個(gè)集群,讓服務(wù)消費(fèi)者通過服務(wù)注冊(cè)表獲取具體的服務(wù)訪問地址(IP+端口)去訪問具體的服務(wù)提供者。如下圖所示:

Java中Zookeeper注冊(cè)中心原理是什么

具體來說,zookeeper就是個(gè)分布式文件系統(tǒng),每當(dāng)一個(gè)服務(wù)提供者部署后都要將自己的服務(wù)注冊(cè)到zookeeper的某一路徑上: /{service}/{version}/{ip:port},比如我們的HelloWorldService部署到兩臺(tái)機(jī)器,那么zookeeper上就會(huì)創(chuàng)建兩條目錄:分別為/HelloWorldService/1.0.0/100.100.0.237:16888

/HelloWorldService/1.0.0/100.100.0.238:16888。

如圖:

Java中Zookeeper注冊(cè)中心原理是什么

在zookeeper中,進(jìn)行服務(wù)注冊(cè),實(shí)際上就是在zookeeper中創(chuàng)建了一個(gè)znode節(jié)點(diǎn),該節(jié)點(diǎn)存儲(chǔ)了該服務(wù)的IP、端口、調(diào)用方式(協(xié)議、序列化方式)等。該節(jié)點(diǎn)承擔(dān)著最重要的職責(zé),它由服務(wù)提供者(發(fā)布服務(wù)時(shí))創(chuàng)建,以供服務(wù)消費(fèi)者獲取節(jié)點(diǎn)中的信息,從而定位到服務(wù)提供者真正網(wǎng)絡(luò)拓?fù)湮恢靡约暗弥绾握{(diào)用。RPC服務(wù)注冊(cè)、發(fā)現(xiàn)過程簡(jiǎn)述如下:

1.服務(wù)提供者啟動(dòng)時(shí),會(huì)將其服務(wù)名稱,ip地址注冊(cè)到配置中心。

2.服務(wù)消費(fèi)者在第一次調(diào)用服務(wù)時(shí),會(huì)通過注冊(cè)中心找到相應(yīng)的服務(wù)的IP地址列表,并緩存到本地,以供后續(xù)使用。當(dāng)消費(fèi)者調(diào)用服務(wù)時(shí),不會(huì)再去請(qǐng)求注冊(cè)中心,而是直接通過負(fù)載均衡算法從IP列表中取一個(gè)服務(wù)提供者的服務(wù)器調(diào)用服務(wù)。

3.當(dāng)服務(wù)提供者的某臺(tái)服務(wù)器宕機(jī)或下線時(shí),相應(yīng)的ip會(huì)從服務(wù)提供者IP列表中移除。同時(shí),注冊(cè)中心會(huì)將新的服務(wù)IP地址列表發(fā)送給服務(wù)消費(fèi)者機(jī)器,緩存在消費(fèi)者本機(jī)。

4.當(dāng)某個(gè)服務(wù)的所有服務(wù)器都下線了,那么這個(gè)服務(wù)也就下線了。

5.同樣,當(dāng)服務(wù)提供者的某臺(tái)服務(wù)器上線時(shí),注冊(cè)中心會(huì)將新的服務(wù)IP地址列表發(fā)送給服務(wù)消費(fèi)者機(jī)器,緩存在消費(fèi)者本機(jī)。

6.服務(wù)提供方可以根據(jù)服務(wù)消費(fèi)者的數(shù)量來作為服務(wù)下線的依據(jù)。

感知服務(wù)的下線&上線

zookeeper提供了“心跳檢測(cè)”功能,它會(huì)定時(shí)向各個(gè)服務(wù)提供者發(fā)送一個(gè)請(qǐng)求(實(shí)際上建立的是一個(gè) socket 長(zhǎng)連接),如果長(zhǎng)期沒有響應(yīng),服務(wù)中心就認(rèn)為該服務(wù)提供者已經(jīng)“掛了”,并將其剔除。比如100.100.0.237這臺(tái)機(jī)器如果宕機(jī)了,那么zookeeper上的路徑就會(huì)只剩/HelloWorldService/1.0.0/100.100.0.238:16888。

服務(wù)消費(fèi)者會(huì)去監(jiān)聽相應(yīng)路徑(/HelloWorldService/1.0.0),一旦路徑上的數(shù)據(jù)有任務(wù)變化(增加或減少),zookeeper都會(huì)通知服務(wù)消費(fèi)方、服務(wù)提供者地址列表已經(jīng)發(fā)生改變,從而進(jìn)行更新。

更為重要的是zookeeper 與生俱來的容錯(cuò)容災(zāi)能力(比如leader選舉),可以確保服務(wù)注冊(cè)表的高可用性。

使用 zookeeper 作為注冊(cè)中心時(shí),客戶端訂閱服務(wù)時(shí)會(huì)向 zookeeper 注冊(cè)自身;主要是方便對(duì)調(diào)用方進(jìn)行統(tǒng)計(jì)、管理。但訂閱時(shí)是否注冊(cè) client 不是必要行為,和不同的注冊(cè)中心實(shí)現(xiàn)有關(guān),例如使用 consul 時(shí)便沒有注冊(cè)。

到此,相信大家對(duì)“Java中Zookeeper注冊(cè)中心原理是什么”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI