Communication in Client-Server Systems

跨 process、跨機器的通訊有兩種主要機制:Socket(直接的網路通訊端點)和 RPC(把網路通訊包裝成像本地函式呼叫一樣)。


Conventional Procedure Call(背景)

要理解 RPC 為什麼有用,需要先理解本地函式呼叫在記憶體層面是怎麼運作的。

當你呼叫一個函式,例如:

count = read(fd, buf, nbytes);

stack 的變化分兩個階段:

  • 呼叫前:stack 上只有 main program 的 local variables
  • 呼叫後:stack 上會疊上這次呼叫的所有資訊——傳入的參數(nbytesbuffd)、return address、以及 read 自己的 local variables

這個過程對程式設計師完全透明。RPC 的目標就是把跨網路的呼叫也做到同樣的透明度。


Socket

D-OS-Ch02fa-Socket

RPC(Remote Procedure Call)

D-OS-Ch02fb-RPC


Socket vs RPC 的比較

Socket
RPC
抽象層次低,直接控制網路傳輸高,包裝成函式呼叫
程式設計師看到的send / recv普通的函式呼叫
需要處理序列化是,自己來否,stub 處理
適用場景需要細粒度控制想要簡單的遠端呼叫介面

現代的遠端通訊框架(gRPC、REST API)本質上都是 RPC 概念的延伸,只是在協定和序列化格式上有不同的選擇。