1. 程式人生 > 實用技巧 >分散式RPC框架實現

分散式RPC框架實現

現在大部分的網際網路公司都會採用微服務架構,但具體實現微服務架構的方式有所不同,主流上分為兩種,一種是基於Http協議的遠端呼叫,另外一種是基於RPC方式的呼叫。

兩種方式都有自己的代表框架,前者是著名的Spring Cloud,後者則是有阿里巴巴開源的Dubbo,二者都被廣泛的採用。

什麼是RPC

RPC是一種遠端呼叫過程,是一種通過網路遠端呼叫其他服務的協議。通俗的說就是,A通過打電話的方式讓B幫忙辦一件事,B辦完事後將結果告知A。

我們下面通過一張圖來大概瞭解一下在一個完整的RPC框架中存在的角色以及整個遠端呼叫的過程。

通過上面的圖可以看出來,在RPC框架中主要有以下4個角色:

  • registry - 註冊中心,當服務提供者啟動時會向註冊中心註冊,然後註冊中心會告知所有的消費者有新的服務提供者。
  • provider - 服務提供者,遠端呼叫過程中的被消費方。
  • consumer - 服務消費者,遠端呼叫過程中的消費方。
  • monitor - 監視器,它主要負責統計服務的消費和呼叫情況。

啟動服務提供者後,服務提供者會以非同步的方式向註冊中心註冊。然後啟動服務消費者,它會訂閱註冊中心中服務提供者列表,當有服務提供者的資訊發生改變時,註冊中心會通知所有的消費者。當消費者發起遠端呼叫時,會通過動態代理將需要請求的引數以及方法簽名等資訊通過Netty傳送給服務提供者,服務提供者收到呼叫的資訊後呼叫對應的方法並將產生的結果返回給消費者,這樣就完成了一個完整的遠端呼叫。當然了這個過程中可能還會將呼叫資訊非同步傳送給monitor用於監控和統計。

框架核心部分

首先我們要實現的是整個RPC框架的核心部分,這部分的主要包含以下內容:

  1. RPC服務的註解的實現。
  2. 服務提供者初始化、註冊、以及響應遠端呼叫的實現。
  3. 服務消費者訂閱註冊中心、監聽服務提供者的變化的實現。
  4. 動態代理的實現。

整個核心部分將以一個Spring Boot Starter的形式實現,這樣我們可以很方便的在Spring Boot專案中使用它。