遠端程序呼叫

分散式計算中,遠端程序呼叫(英語:Remote Procedure CallRPC)是一個電腦通訊協定。該協定允許執行於一台電腦的程式呼叫另一個位址空間(通常為一個開放網路的一台電腦)的子程式,而程式設計師就像呼叫本地程式一樣,無需額外地為這個互動作用編程(無需關注細節)。RPC是一種伺服器-客戶端(Client/Server)模式,經典實現是一個通過傳送請求-接受回應進行資訊互動的系統。

如果涉及的軟體採用物件導向程式設計,那麼遠端程序呼叫亦可稱作遠端呼叫遠端方法呼叫,例:Java RMI

RPC是一種行程間通訊的模式,程式分布在不同的位址空間里。如果在同一主機里,RPC可以通過不同的虛擬位址空間(即便使用相同的實體位址)進行通訊,而在不同的主機間,則通過不同的實體位址進行互動。許多技術(通常是不相容)都是基於這種概念而實現的。

歷史起源

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

資訊傳遞

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

流程

  1. 客戶端呼叫客戶端stub(client stub)。這個呼叫是在本地,並將呼叫參數push到(stack)中。
  2. 客戶端stub(client stub)將這些參數包裝,並通過系統呼叫傳送到伺服器端機器。打包的過程叫 marshalling。(常見方式:XMLJSON、二進制編碼)
  3. 客戶端本地作業系統傳送資訊至伺服器。(可通過自訂TCP協定HTTP傳輸)
  4. 伺服器系統將資訊傳送至伺服器端stub(server stub)。
  5. 伺服器端stub(server stub)解析資訊。該過程叫 unmarshalling
  6. 伺服器端stub(server stub)呼叫程式,並通過類似的方式返回給客戶端。

標準化的溝通機制

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

參見