Go RPC 開發指南

astaxie發表於2016-10-18

Go RPC 開發指南

本書首先介紹了使用Go官方庫開發RPC服務的方法,然後介紹流行gRPC庫以及其它一些RPC框架如Thrift等,後面重點介紹高效能的分散式全功能的RPC框架 rpcx。讀者通過閱讀本書,可以快速學習和了解Go生態圈的RPC開發技術,並且應用到產品的開發中。

RPC介紹

遠端過程呼叫(Remote Procedure Call,縮寫為 RPC)是一個計算機通訊協議。 該協議允許執行於一臺計算機的程式呼叫另一臺計算機的子程式,而程式設計師無需額外地為這個互動作用程式設計。 如果涉及的軟體採用物件導向程式設計,那麼遠端過程呼叫亦可稱作遠端呼叫或遠端方法呼叫,比如 Java RMI。

有關RPC的想法至少可以追溯到1976年以“信使報”(Courier)的名義使用。RPC首次在UNIX平臺上普及的執行工具程式是SUN公司的RPC(現在叫ONC RPC)。它被用作SUN的NFC的主要部件。ONC RPC今天仍在伺服器上被廣泛使用。 另一個早期UNIX平臺的工具是“阿波羅”計算機網路計算系統(NCS),它很快就用做OSF的分佈計算環境(DCE)中的DCE/RPC的基礎,並補充了DCOM。

遠端過程呼叫是一個分散式計算的客戶端-伺服器(Client/Server)的例子,它簡單而又廣受歡迎。 遠端過程呼叫總是由客戶端對伺服器發出一個執行若干過程請求,並用客戶端提供的引數。執行結果將返回給客戶端。 由於存在各式各樣的變體和細節差異,對應地派生了各式遠端過程呼叫協議,而且它們並不互相相容。

為了允許不同的客戶端均能訪問伺服器,許多標準化的 RPC 系統應運而生了。其中大部分採用介面描述語言(Interface Description Language,IDL),方便跨平臺的遠端過程呼叫。 來自microsoft

從上圖可以看出, RPC 本身是 client-server模型,也是一種 request-response 協議。 有些實現擴充套件了遠端呼叫的模型,實現了雙向的服務呼叫,但是不管怎樣,呼叫過程還是由一個客戶端發起,伺服器端提供響應,基本模型沒有變化。 服務的呼叫過程為:

  1. client呼叫client stub,這是一次本地過程呼叫
  2. client stub將引數打包成一個訊息,然後傳送這個訊息。打包過程也叫做 marshalling
  3. client所在的系統將訊息傳送給server
  4. server的的系統將收到的包傳給server stub
  5. server stub解包得到引數。 解包也被稱作 unmarshalling
  6. 最後server stub呼叫服務過程. 返回結果按照相反的步驟傳給client

https://smallnest.gitbooks.io/go-rpc/content/

相關文章