天天看點

RPC架構介紹

什麼是RPC架構:

遠端過程調用RPC,就是用戶端基于某種傳輸協定通過網絡向服務提供端請求服務處理,然後擷取傳回資料(對于ONE WAY模式則不返還響應結果);而這種調用對于用戶端而言,和調用本地服務一樣友善,開發人員不需要了解具體底層網絡傳輸協定。簡單講,就是本地調用的邏輯處理的過程放在的遠端的機器上,而不是本地服務代理來處理。RPC就是本地動态代理隐藏通信細節,通過元件序列化請求,走網絡到服務端,執行真正的服務代碼,然後将結果傳回給用戶端,反序列化資料給調用方法的過程。

以下是一個典型的RPC架構的組成部分:

RPC架構介紹

通用的RPC架構一般包括以下幾種組成部分:

  1. serviceClient:這個子產品主要是封裝服務端對外提供的API,讓用戶端像使用本地API接口一樣調用遠端服務。一般使用動态代理機制,當用戶端調用api的方法時,serviceClient會走代理邏輯,去遠端伺服器請求真正的執行方法,然後将響應結果作為本地的api方法執行結果傳回給用戶端應用。類似RMI的stub子產品。
  2. processor:在服務端存在很多方法,當用戶端請求過來,服務端需要定位到具體對象的具體方法,然後執行該方法,這個功能就由processor子產品來完成。一般這個操作需要使用反射機制來擷取用來執行真實處理邏輯的方法,當然,有的RPC直接在server初始化的時候,将一定規則寫進Map映射中,這樣直接擷取對象即可。類似RMI的skeleton子產品。
  3. protocol:協定層,這是每個RPC元件的核心技術所在。一般,協定層包括編碼/解碼,或者說序列化和反序列化工作;當然,有的時候編解碼不僅僅是對象序列化的工作,還有一些通信相關的位元組流的額外解析部分。序列化工具有:hessian,protobuf,avro,thrift,json系,xml系等等。在RMI中這塊是直接使用JDK自身的序列化元件。
  4. transport:傳輸層,主要是服務端和用戶端網絡通信相關的功能。這裡和下面的IO層區分開,主要是因為傳輸層處理server/client的網絡通信互動,而不涉及具體底層處理連接配接請求和響應相關的邏輯。
  5. I/O:這個子產品主要是為了提高性能可能采用不同的IO模型和線程模型,當然,一般我們可能和上面的transport層聯系的比較緊密,統一稱為remote子產品。

繼續閱讀