Zookeeper用作註冊中心的原理

2021-08-21 20:06:01 字數 1789 閱讀 5790

rpc框架中有3個重要的角色:

註冊中心 :儲存所有服務的名字,服務提供者的ip列表,服務消費者的ip列表

服務提供者: 提供跨程序服務

服務消費者: 尋找到指定命名的服務並消費。

簡單來講,zookeeper可以充當乙個服務登錄檔(service registry),讓多個服務提供者形成乙個集群,讓服務消費者通過服務登錄檔獲取具體的服務訪問位址(ip+埠)去訪問具體的服務提供者。如下圖所示:

具體來說,zookeeper就是個分布式檔案系統,每當乙個服務提供者部署後都要將自己的服務註冊到zookeeper的某一路徑上: ///, 比如我們的helloworldservice部署到兩台機器,那麼zookeeper上就會建立兩條目錄:分別為/helloworldservice/1.0.0/100.19.20.01:16888 /helloworldservice/1.0.0/100.19.20.02:16888。

這麼描述有點不好理解,下圖更直觀,

在zookeeper中,進行服務註冊,實際上就是在zookeeper中建立了乙個znode節點,該節點儲存了該服務的ip、埠、呼叫方式(協議、序列化方式)等。該節點承擔著最重要的職責,它由服務提供者(發布服務時)建立,以供服務消費者獲取節點中的資訊,從而定位到服務提供者真正網路拓撲位置以及得知如何呼叫。rpc服務註冊、發現過程簡述如下:

服務提供者啟動時,會將其服務名稱,ip位址註冊到配置中心。

服務消費者在第一次呼叫服務時,會通過註冊中心找到相應的服務的ip位址列表,並快取到本地,以供後續使用。當消費者呼叫服務時,不會再去請求註冊中心,而是直接通過負載均衡演算法從ip列表中取乙個服務提供者的伺服器呼叫服務。

當服務提供者的某台伺服器宕機或下線時,相應的ip會從服務提供者ip列表中移除。同時,註冊中心會將新的服務ip位址列表傳送給服務消費者機器,快取在消費者本機。

當某個服務的所有伺服器都下線了,那麼這個服務也就下線了。

同樣,當服務提供者的某台伺服器上線時,註冊中心會將新的服務ip位址列表傳送給服務消費者機器,快取在消費者本機。

服務提供方可以根據服務消費者的數量來作為服務下線的依據。

zookeeper提供了「心跳檢測」功能,它會定時向各個服務提供者傳送乙個請求(實際上建立的是乙個 socket 長連線),如果長期沒有響應,服務中心就認為該服務提供者已經「掛了」,並將其剔除,比如100.19.20.02這台機器如果宕機了,那麼zookeeper上的路徑就會只剩/helloworldservice/1.0.0/100.19.20.01:16888。

服務消費者會去監聽相應路徑(/helloworldservice/1.0.0),一旦路徑上的資料有任務變化(增加或減少),zookeeper都會通知服務消費方服務提供者位址列表已經發生改變,從而進行更新。

更為重要的是zookeeper 與生俱來的容錯容災能力(比如leader選舉),可以確保服務登錄檔的高可用性。

使用 zookeeper 作為註冊中心時,客戶端訂閱服務時會向 zookeeper 註冊自身;主要是方便對呼叫方進行統計、管理。但訂閱時是否註冊 client 不是必要行為,和不同的註冊中心實現有關,例如使用 consul 時便沒有註冊。

註冊中心Zookeeper

註冊中心負責服務位址的註冊與查詢,相當於目錄服務,服務提供者和消費者只在啟動時與註冊中心互動,註冊中心不 請求,壓力較小。zookeeper註冊中心的作用主要是註冊和發現服務的作用,埠2181 對cline端提供服務 3888 選舉leader使用 2888 集群內機器通訊使用 leader監聽此埠...

服務註冊中心zookeeper

一 背景 場景 1 服務位址如何維護 服務啟動的時候,註冊到乙個服務中 key,服務名 value 若干個http位址 2 如何對目標服務負載均衡 從註冊服務中拿到目標服務位址列表,通過輪詢或者隨機演算法得到乙個位址 3 服務 的動態感知 目標服務可能宕機 心跳機制 註冊中心定期和客戶端心跳,如果沒...

Zookeeper註冊中心的搭建

zookeeper是乙個分布式的,開放原始碼的分布式應用程式協調服務,是google的chubby乙個開源的實現,是hadoop和hbase的重要元件。它是乙個為分布式應用提供一致性服務的軟體,提供的功能包括 配置維護 名字服務 分布式同步 組服務等。之所以把本文歸類為dubbo是因為,博主關於du...