RPC遠端協議之原理分析

2022-07-26 11:12:13 字數 2383 閱讀 4739

在近幾年工作中發現,功能服務化或微服務化越來越流行,逐漸成為實現中大型分布式系統架構的主要方式,而在分布式系統中的不同節點應用間的通訊中,rpc遠端協議扮演關鍵作用。實際上,在日常工作中,我們也多多少少使用過rpc協議方案,對於初級的程式設計師來說,rpc顯得很神秘,而經驗豐富些的程式設計師雖可使用,但對其工作原理理解的並不是很深刻,往往會誤用,這裡就我理解來詳細介紹下。

l  rpc是什麼

l  rpc工作流程

l  rpc實現內容

l  rpc結構分析

一、rpc是什麼

rpc(remote procedure call),是一種遠端過程呼叫的協議方案,其本身是一種借助於網路來實現不同機子或應用之間跨程序通訊的,不是乙個實現框架,即並非是乙個拿來即用的框架。目前,比較主流使用的rpc開源框架有谷歌的grpc,facebook的thrift,阿里的dubbo,開源springcloud,以及spring的rmi等均基於rpc協議方案實現了遠端過程功能的使用,雖實現方式不同,但原理卻大同小異。接下來,介紹下rpc的工作流,rpc實現需要做的事情,以及幾種常見rpc框架的主要異同點對比。

二、rpc工作流程

rpc是基於典型的c/s模式的遠端呼叫方案,分為客戶端(caller)和服務端(callee)。caller負責呼叫遠端的服務,而callee則負責提供服務功能,並暴露給使用者caller,這在現今的微服務架構中很常見,而rpc基本概念化工作流如下:

1、client發起遠端呼叫時,是通過client-stub實現的;

2、client-stub接受client呼叫通知後,負責將呼叫的介面、方法及引數,按照約定的協議規範進行編碼存根;

3、本地rpcruntime負責遠端傳輸在client-stub中編碼的資料報;

4、遠端rpcruntime接收到訊息請求後,將其傳遞給server-stub,由其負責解碼處理,然後發起本地呼叫,完成具體服務功能並返回結果給client。

從上面流程看,認為rpc的實現比較簡單,其實不然。在整個rpc概念過程中,有很多事情要做,比如:是否跨語言支援,網路傳輸的效能與協議,資料報編譯碼以及異常恢復處理等,不簡單了吧!具體請往下俯瞰。

三、rpc實現內容

通過上面的介紹,我們應該知道rpc是什麼,以及它的工作流程是怎樣的,那麼有人問rpc是乙個協議方案,該如何設計暱?答案在下面揭曉,我們需要實現下面幾點內容:

1、兩端的stub生成策略,是手動還是自動生成,前者較麻煩,後者可借助使用生成工具生成,如:thrift本身提供的工具;

2、是否支援跨語言平台,也就是不同語言的無縫相容,一般都是通過idl來宣告介面檔案實現跨語言;

3、網路傳輸協議格式約定,可採用訊息頭和訊息體的方式,一般採用訊息頭存放元資料,訊息體存放訊息內容;

4、網路傳輸採用的協議型別,主流的rpc框架採用了socket較多,而也有基於http協議的rpc框架,如:谷歌的grpc採用http2.0;

5、在高併發時,兩端互動時是否支援非同步/同步多執行緒的通訊機制;

6、異常處理要注意:本地執行一定會執行,但遠端呼叫則不一定執行,可能因為網路問題未能送達到服務方。另外,本地呼叫只會丟擲介面宣告異常,而遠端呼叫還會丟擲rpc框架異常,同時本地和與遠端呼叫的效能消耗可能差距較大,這取決於rpc固有消耗所佔比重。

正如上面,既然有這麼多工作要做,那麼全部交給開發人員來完成,則需要若干天時間成本,即使跑通流程,也未必穩定,所以實際使用時,我們會借助於強大的開源框架來實現,正如在本章開頭部分所描述的內容。

四、rpc結構分析

上面比較粗略地介紹了rpc的工作流程,接下來對rpc協議方案的結構進行拆分,更加清楚了解rpc的工作原理細節,這樣在接觸主流的rpc開源框架時,更加游刃有餘,具體如下所示:

rpc服務方通過rpcserver匯出(export)遠端介面方法,供客戶端通過rpcclient引入(import)該遠端介面方法。這樣客戶端就可以呼叫引入的遠端api了,然後呼叫該介面方法,跟呼叫遠端介面方法一樣,rpc框架提供介面的**實現,實際的呼叫委託給了rpcproxy,而該**封裝呼叫資訊並將呼叫轉交給rpcinvoker實際執行呼叫。在客戶端的rpcinvoker通過rpcconnector維持與服務端rpcchannel,並使用rpcchannel進行協議編碼(encode),並將編碼後的請求訊息借助通道傳送給服務方。

rpc服務端接收器rpcacceptor接收客戶端的呼叫請求,同時使用rpcprotocol進行協議解碼(decode)。解碼後的呼叫資訊交給rpcprocessor來控制呼叫邏輯,最後將呼叫資訊傳遞給rpcinvoker實際執行呼叫並返回結果給客戶端。

好了,到這裡我已經介紹了rpc的基本概念,工作流程,在設計rpc時需要做的幾件事,以及rpc的結構實現分析。那麼,在後續的文章中,會繼續介紹rpc的常用開源框架的使用及分析。

原文:  

RPC 遠端過程呼叫協議

remote procedure call 1 rpc 遠端過程呼叫協議,它是一種通過網路從遠端電腦程式上請求服務,而不需要了解底層網路技術的協議。rpc協議假定某些傳輸協議的存在,如tcp或udp,為通訊程式之間攜帶資訊資料。在osi網路通訊模型中,rpc跨越了傳輸層和應用層。rpc使得開發包括網...

RPC 遠端過程呼叫協議

rpc remote procedure call 遠端過程呼叫,它是一種通過網路從遠端電腦程式上請求服務,而不需要了解底層網路技術的協議。rpc協議假定某些傳輸協議的存在,如tcp或udp,為通訊程式之間攜帶資訊資料。在osi網路通訊模型中,rpc跨越了傳輸層和應用層。rpc使得開發包括網路分布式...

遠端過程呼叫協議(RPC)

rpc remote procedure call protocol 遠端過程呼叫協議,它是一種通過網路從遠端電腦程式上請求服務,而不需要了解底層網路技術的協議。rpc協議假定某些傳輸協議的存在,如tcp或udp,為通訊程式之間攜帶資訊資料。在osi網路通訊模型中,rpc跨越了傳輸層和應用層。rpc...