dubbo源碼分析20 -- 遠程調用概述

在之前的文章我們分析了 dubbo 的服務治理,也就是在 consumer 端在進行服務引用的時候。consumer 首先會根據配置 Protocol(協議) 創建 Invoke 調用對象,它代表一個可執行體,可向它發起 invoke 調用,它有可能是一個本地的實現,也可能是一個遠程的實現,也可能一個集羣實現。然後再使用 ProxyFactory 接口創建代理對象,進行遠程調用。

在這裏插入圖片描述

創建的代理對象爲 InvokeInvocationHandler,然後它組合了一個 MockClusterInvoker 對象。 dubbo 裏面的服務治理就是通過它來完成的。這個裏面就涉及到服務治理也就是集羣容錯。

在這裏插入圖片描述

  • 首先通過 MockClusterInvoke 將多個 Invoker 僞裝成一個Invoker,這樣其它人只要關注Protocol 層 Invoker 即可,加上 Cluster 或者去掉 Cluster 對其它層都不會造成影響,因爲只有一個提供者時,是不需要Cluster的。
  • 接着 Directory 服務的主要作用是通過註冊中心推送變更。當 Provider 暴露新的接口服務,或者失效掉接口服務的時候就會動態的更新 Invoke。
  • 然後 Router 服務配置可以過濾 Directory 服務裏面註冊的接口服務,可以通過路由規則從多個 Invoke 裏面選擇出子集。
  • 最後 LoadBalance 負責從過濾後的 Invoke 列表中通過負載均衡算法選擇一個具體的 Invoke 來用於本次服務調用。

這就是之前分析集羣容錯源碼的整個過程。其實就是通過服務治理從多個服務中選擇中一個具體的 Invoke 來進行調用。最終選擇出來的 Invoke 如下把示:

在這裏插入圖片描述

它是 RegistryDirectory 的內部類 InvokerDelegete,而這個類又是繼承於 InvokerWrapper 類,所以最終是通過 InvokerWrapper 來進行遠程調用的。

dubbo 調用流程圖:

在這裏插入圖片描述

我們已經獲取到了一個具體的 Invoke,所以我們下面就是需要來分析一下以下幾個問題:

  • consumer 的發送與接收原理
  • provider 的接收與發送原理
  • dubbo 的通信方式

因爲 dubbo 的遠程網絡傳輸默認 netty NIO的非阻塞並行調用通信的。所以將會再下一個章節來簡單的介紹一下 netty 的使用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章