更新時間:2022-07-21 10:39:45 來源:動力節點 瀏覽1917次
Dubbo原理是什么?動力節點小編來為大家解答。Dubbo 框架是用來處理分布式系統中,服務發現與注冊以及調用問題的,并且管理調用過程。
服務提供者在啟動的時候,會通過讀取一些配置將服務實例化。
Proxy 封裝服務調用接口,方便調用者調用。客戶端獲取 Proxy 時,可以像調用本地服務一樣,調用遠程服務。
Proxy 在封裝時,需要調用 Protocol 定義協議格式,例如:Dubbo Protocol。
將 Proxy 封裝成 Invoker,它是真實服務調用的實例。
將 Invoker 轉化成 Exporter,Exporter 只是把 Invoker包裝了一層,是為了在注冊中心中暴露自己,方便消費者使用。
將包裝好的 Exporter 注冊到注冊中心。
服務消費者建立好實例,會到服務注冊中心訂閱服務提供者的元數據。元數據包括服務 IP 和端口以及調用方式(Proxy)。
消費者會通過獲取的 Proxy 進行調用。通過服務提供方包裝過程可以知道,Proxy 實際包裝了 Invoker 實體,因此需要使用Invoker 進行調用。
在 Invoker 調用之前,通過 Directory 獲取服務提供者的 Invoker列表。在分布式的服務中有可能出現同一個服務,分布在不同的節點上。
通過路由規則了解,服務需要從哪些節點獲取。
Invoker 調用過程中,通過 Cluster 進行容錯,如果遇到失敗策略進行重試。
調用中,由于多個服務可能會分布到不同的節點,就要通過 LoadBalance 來實現負載均衡。
Invoker 調用之前還需要經過 Filter,它是一個過濾鏈,用來處理上下文,限流和計數的工作。
生成過濾以后的 Invoker。
用 Client 進行數據傳輸。
Codec 會根據 Protocol 定義的協議,進行協議的構造。
構造完成的數據,通過序列化 Serialization 傳輸給服務提供者。
Request 已經到達了服務提供者,它會被分配到線程池(ThreadPool)中進行處理。
Server 拿到請求以后查找對應的 Exporter(包含有 Invoker)。
由于 Export 也會被 Filter 層層包裹
通過 Filter 以后獲得 Invoker
最后,對服務提供者實體進行調用。
1.提供者暴露服務的整體機制:
在服務提供者初始化的時候,會通過 Config 組件中的 ServiceConfig 讀取服務的配置信息。這個配置信息有三種形式,分別是 XML 文件,注解(Annoation)和屬性文件(Properties 和 yaml)。
在讀取配置文件生成服務實體以后,會通過 ProxyFactory 將 Proxy 轉換成 Invoker。
此時,Invoker 會被定義 Protocol,之后會被包裝成 Exporter。
最后,Exporter 會發送到注冊中心,作為服務的注冊信息
2.注冊中心
其主要作用如下:
動態載入服務
動態發現服務
參數動態調整
服務統一配置管理
提供者(Provider)啟動時,會向注冊中心寫入自己的元數據信息(調用方式)。
消費者(Consumer)啟動時,也會在注冊中心寫入自己的元數據信息,并且訂閱服務提供者,路由和配置元數據的信息。
服務治理中心(duubo-admin)啟動時,會同時訂閱所有消費者,提供者,路由和配置元數據的信息。
當提供者離開或者新提供者加入時,注冊中心發現變化會通知消費者和服務治理中心。
Dubbo 有四種注冊中心的實現,分別是 ZooKeeper,Redis,Simple 和 Multicast。
ZooKeeper 是負責協調服務式應用的。通過樹形文件存儲的 ZNode 在 /dubbo/Service 目錄下面建立了四個目錄,分別是:
Providers 目錄下面,存放服務提供者 URL 和元數據。
Consumers 目錄下面,存放消費者的 URL 和元數據。
Routers 目錄下面,存放消費者的路由策略。
Configurators 目錄下面,存放多個用于服務提供者動態配置 URL 元數據信息。
客戶端第一次連接注冊中心的時候,會獲取全量的服務元數據,包括服務提供者和服務消費者以及路由和配置的信息。
根據 ZooKeeper 客戶端的特性,會在對應 ZNode 的目錄上注冊一個 Watcher,同時讓客戶端和注冊中心保持 TCP 長連接。
如果服務的元數據信息發生變化,客戶端會接受到變更通知,然后去注冊中心更新元數據信息。變更時根據 ZNode 節點中版本變化進行。
3.服務消費者
服務消費者首先持有遠程服務實例生成的 Invoker,然后把 Invoker 轉換成用戶接口的動態代理引用,服務引用的入口點在 ReferenceBean
4.Dubbo 集群容錯
分布式服務多以集群形式出現,在消費服務發起調用的時候,會涉及到 Cluster,Directory,Router,LoadBalance 幾個核心組件。
cluster生成 Invoker 對象后就獲取可調用的服務列表,在 Directory 獲取所有 Invoker 列表之后,會調用路由接口(Router)。其會根據用戶配置的不同策略對 Invoker 列表進行過濾,只返回符合規則的 Invoker。生成的 Invoker服務有可能分布在不同的節點上面。所以,需要經過 LoadBalance。
5.Dubbo 遠程調用
服務消費者經過容錯,Invoker 列表,路由和負載均衡以后,會對 Invoker 進行過濾,之后通過 Client 編碼,序列化發給服務提供者。
以上就是關于“Dubbo原理和機制詳解”的介紹,大家如果對此比較感興趣,想了解更多相關知識,可以關注一下動力節點的Dubbo教程,里面的課程內容由淺到深,很適合沒有基礎的小伙伴學習,希望對大家能夠有所幫助。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習