RPC(Reomte Procedure Call Protocol)
遠程過程調用協議,一種通過網絡從遠程計算機上請求服務,而不需要了解底層網絡技術的協議。RPC協議假定某些傳輸協議的存在,如 TPC或UDP,爲通信程序之間攜帶信息數據。在OSI網絡通信模型中,RPC跨越了傳輸層和應用層。RPC在使得開發包括網絡分佈式多程序在內的應用程序更加容易。
RPC採用Client-Server結構,通過request-response消息模式實現。
RPC三個過程
- 通訊協議
- 尋址 互聯網IP
- 數據序列化
RPC用途
- 服務化/微服務
- 分佈式系統架構
- 服務可重用
- 系統間交互調用
RPC特性以及適用場景
特點:同步調用,對於要等待返回結果的場景,RPC可以非常自然直覺的使用(RPC也可以是異步調用)。
由於等待結果,Consumer會有線程消耗。如果以異步RPC的方式使用,Consumer線程消耗可以去掉。不能暫存請求,
壓力會直接傳導到服務Provider。
RPC的流程
- 客戶端處理過程中調用Client sub,傳入參數。
- Client sub將參數編組爲消息,然後通過系統調用向服務端發送信息。
- 客戶端本地操作系統將消息從客戶端機器發送到服務端機器。
- 服務端操作系統將接收的數據包傳給Server stub。
- Server stub解組消息爲參數。
- Server stub再調用服務端的過程,過程執行結果以反方向的相同步驟響應給客戶端。
stub(存根):分佈式計算中的存根是一段代碼,它轉換在遠程調用期間Client和Server之間的參數。
RPC流程中需要處理的問題
- Client stub、Server stub的開發
- 參數如何編組爲消息,以及解組信息
- 消息如何發送
- 過程結果如何表示,異常情況如何處理
- 如何實現安全的訪問控制
RPC協議
調用過程中需要將參數編組爲消息發送,接收方接收到消息進行解組消息參數,過程處理結果同樣需要編組,解組。消息由哪些構成以及消息的表示形式就構成了協議。
協議的請求,響應消息的格式。
RPC框架基本定義
封裝好了參數編組、消息解組、底層網絡通信的RPC程序開發框架,讓我們直接在基礎上只需要專注於我們的過程代碼編寫。
常用RPC框架
Webservice:Apache XFC, Apache Axis2,Java自帶的JAX-WS.
微服務:dubbo,spingCloud,Apache Thrift,ICE,GRPC等等
RPC框架核心功能要點
- 服務的暴露 根據IDL生成,共享接口
- 遠程代理對象 JDK代理、字節碼生成
- 通信 協議(TCP\HTTP)、消息ID、IO、連接、心跳
- 序列化 序列化方式、元數據、編碼內容