RPC學習入門(轉)

很長時間一直專一於業務編碼,不去關注底層實現和設計,致使面試啪啪打臉,學習吧!java

RPC的全稱是Remote Procedure Call,是一種進程間通訊方式。它容許程序調用另外一個進程上(一般是共享網絡的另外一臺機器)的過程或函數,而不用程序員顯式編碼這個遠程調用的細節。也就是說,程序員不管是調用本地的仍是遠程的函數,本質上編寫的調用代碼基本相同。程序員

RPC主要解決三件事情:面試

  • 進程間通訊
  • 提供和本地方法調用同樣的調用機制
  • 屏蔽程序員對遠程調用的細節實現
  1. RPC基本原理
    1. rpc對一些遠程調用的內部實現進行封裝:
      • 序列化
      • 編解碼
      • 協議
      • 網絡

       2. rpc遠程調用過程:網絡

      1. 服務消費方(client)調用以本地調用方式調用服務
      2. client stub接收到調用後負責將方法、參數等組成可以進行網絡傳輸的消息體
      3. client stub找到服務地址,並將消息發送到服務端
      4. server stub收到消息後進行解碼
      5. server stub根據解碼結果調用本地服務
      6. 本地服務支持並將結果返回給server stub
      7. server stub將返回結果打包成消息併發送至消費方
      8. client stub接收到消息,並進行解碼
      9. 服務消費方獲得最終結果

rpc至關於將2至8步驟進行封裝,如圖:併發


2. RPC模型框架

      對於上圖進一步拆解獲得以下分佈式


上圖解讀:函數

  1. RPC服務端經過RpcServer去暴露服務接口,二客戶端經過RpcClient去獲取服務接口
  2. 客戶端像調用本地方法同樣去調用遠程接口方法
  3. RPC框架提供接口的代理實現,實際的調用將委託給代理Rpcproxy,代理封裝調用信息並將調用轉給Rpcinvoker去實際執行。
  4. 在客戶端的RpcInvoker經過鏈接器RpcConnect 去維持與 服務端的通道RpcChannel,並使用RpcProtocol執行協議編碼(encode)並將編碼後的請求消息經過通道發送給服務端。
  5. Rpc服務端接收器RpcAcceptor接收客戶端的調用請求,一樣使用RpcProtocol執行協議解碼(decode),解碼後的調用信息傳遞給RpcProcessor去控制處理調用過程,最後在委託調用給RpcInvoker去實際執行並返回調用結果。
經過上述分析可知,這裏包含如下核心組件:
  • 用於暴露服務接口的RpcServer
  • 用於發現服務接口的RpcClient
  • 遠程接口的代理實現RpcPorxy
  • 負責協議編解碼的RpcProtocol(實際中rpc框架中通常會提供多種不一樣的實現)
  • 網絡鏈接器
3. 常見的rpc框架:
  1. dubbo阿里巴巴公司開源的一個java高性能優秀的服務框架
  2. motan新浪微博開源的一個java框架
  3. gRPC Google開發的高性能、通用的開源RPC框架,主要面向移動應用開發並給予HTTP/2協議標準而設計,自己不是分佈式的。
4. RPC與MQ

     MQ(message queue)消息隊列,從某種程度上來講,一樣能夠實現RPC的功能,從功能特色上來講,MQ能夠把消息存儲,二rpc不行,簡單對好比下post



本文主要是看了大神的分享,一個字一個字抄錄過來,後面能夠經常學習瞭解,若有問題可聯繫我性能

本文轉自juejin.im/post/5aa545…

相關文章
相關標籤/搜索