Dubbo及注冊中心原理


本文首發於微信公眾號【猿燈塔】,轉載引用請說明出處

今天是猿燈塔“365天原創計划”第4天。

今天呢!燈塔君跟大家講:

一.Dubbo意義

網站應用的架構變化經歷了一個從所有服務分布在一台服務器上(All in one 、單一應用架構)到 垂直

應用架構 (MVC模式,按照各模塊的職能划分)到分布式應用架構(RPC、按照服務不同分布在不同的

服務器上)再到面向服務的架構(SOA,增加調度中心,負責集群的調度和管理)的過程。 Dubbo就
是處在SOA架構階段的一個遠程服務調用框架
 
二..系統架構

 

 

Dubbo系統分為五個部分:遠程服務運行容器(Container),遠程服務提供方(Provider)、注冊中
心(Register)、遠程服務調用者(Consumer)、監控中心(Monitor)。
Dubbo服務調用過程:
  • 服務提供方(Provider)所在的應用在容器中啟動並運行(這個容器可以說是該應用部署的tomcat)
  • 服務提供方(Provider)將自己要發布的服務注冊到注冊中心(Registry)
  • 服務調用方(Consumer)啟動后向注冊中心訂閱它想要調用的服務
  • 注冊中心(registry)存儲着Provider注冊的遠程服務,並將其所管理的服務列表通知給服務調用
  • 方(Consumer),且注冊中心和提供方和調用方之間均保持長連接,可以獲取Provider發布的服
  • 務的變化情況,並將最新的服務列表推送給Consumer
  • Consumer根據從注冊中心獲得的服務列表,根據軟負載均衡算法選擇一個服務提供者
  • (Provider)進行遠程服務調用,如果調用失敗則選擇另一台進行調用。(Consumer會緩存服務
  • 列表,即使注冊中心宕機也不妨礙進行遠程服務調用)
  • 監控中心(Monitor)對服務的發布和訂閱進行監控和統計服務消費者和提供者,在內存中累計調
  • 用次數和調用時間,定時每分鍾發送一次統計數據到監控中心(Monitor);Monitor可以選擇
  • Zookeeper、Redis或者Multiast注冊中心等,后序介紹。
 
三.Dubbo + Zookeeper

Dubbo可以用Zookeeper作為注冊中心,存儲Provider注冊的遠程服務信息。

Zookeeper采用樹形的目錄結構來存儲信息。
  • 服務提供者啟動時: 向 /dubbo/com.foo.BarService/providers 目錄下寫入自己的 URL 地 址
  • 服務消費者啟動時: 訂閱 /dubbo/com.foo.BarService/providers 目錄下的提供者 URL 地 址。並向 /dubbo/com.foo.BarService/consumers 目錄下寫入自己的 URL 地址
  • 監控中心啟動時: 訂閱 /dubbo/com.foo.BarService 目錄下的所有提供者和消費者 URL 地 址。
 
 
支持以下功能:
  • 當提供者出現斷電等異常停機時,注冊中心能自動刪除提供者信息
  • 當注冊中心重啟時,能自動恢復注冊數據,以及訂閱請求
  • 當會話過期時,能自動恢復注冊數據,以及訂閱請求
  • 當設置<dubbo:registry check="false" />時,記錄失敗注冊和訂閱請求,后台定時重試
  • 可通過設置<dubbo:registry username="admin" password="124" />設置zookeeper 登錄信息
  • 可通過<dubbo:registry group="dubbo" />設置 zookeeper 的根節點,不設置將使用無 根樹
  • 支持 * 號通配符 <dubbo:redistry group="" version="" />,可訂閱服務的所有分組 和所有版本的
提供者
 
四.Dubbo + Redis 
Redis是一個基於內存的,以Key-Value形式存儲數據的高性能Nosql數據庫,可以用來存儲遠程服務信
息用作注冊中心
使用 Redis 的 Key—Map 結構存儲數據結構:
  • 主鍵 Key 為服務名和服務類型:比如./dubbo/com.foo.BarService/providers或./dubbo/com.foo.BarService/providers,相當於Zookeeper中的第三層目錄
  • 值 Map 中的 Key 為 URL 地址 ,Map 中的 Value 為過期時間,用於判斷臟數據,臟數據由監控中心刪除
使用 Redis 的 Publish/Subscribe 事件通知數據變更:
  • 通過事件的值區分事件類型: register , unregister , subscribe , unsubscribe
  • 普通消費者直接訂閱指定服務提供者的 Key,只會收到指定服務的 register , unregister 事件
  • 監控中心通過 psubscribe 功能訂閱 /dubbo/* ,會收到所有服務的所有變更事件
調用過程:
  • 服務提供方啟動時,向 Key:/dubbo/com.foo.BarService/providers 下,添加當前提供者的地址, 並向 Channel:/dubbo/com.foo.BarService/providers 發送 register 事件
  • 服務消費方啟動時,從 Channel:/dubbo/com.foo.BarService/providers 訂閱 register 和unregister 事件 , 並向 Key:/dubbo/com.foo.BarService/providers 下,添加當前消費者的地址
  • 服務消費方收到 register 和 unregister 事件后,從 Key:/dubbo/com.foo.BarService/providers
下獲取提供者地址列表
  • 服務監控中心啟動時,從 Channel:/dubbo/* 訂閱 register 和 unregister ,以及subscribe 和unsubsribe 事件
  • 服務監控中心收到 register 和 unregister 事件后,從Key:/dubbo/com.foo.BarService/providers 下獲取提供者地址列表
  • 服務監控中心收到 subscribe 和 unsubsribe 事件后,從Key:/dubbo/com.foo.BarService/consumers 下獲取消費者地址列表
 

365天干貨不斷,可以微信搜索「 猿燈塔」第一時間閱讀,回復【資料】【面試】【簡歷】有我准備的一線大廠面試資料和簡歷模板

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM