Communication in Client-Server Systems
跨 process、跨機器的通訊有兩種主要機制:Socket(直接的網路通訊端點)和 RPC(把網路通訊包裝成像本地函式呼叫一樣)。
Conventional Procedure Call(背景)
要理解 RPC 為什麼有用,需要先理解本地函式呼叫在記憶體層面是怎麼運作的。
當你呼叫一個函式,例如:
count = read(fd, buf, nbytes);stack 的變化分兩個階段:
- 呼叫前:stack 上只有 main program 的 local variables
- 呼叫後:stack 上會疊上這次呼叫的所有資訊——傳入的參數(
nbytes、buf、fd)、return address、以及read自己的 local variables
這個過程對程式設計師完全透明。RPC 的目標就是把跨網路的呼叫也做到同樣的透明度。
Socket
RPC(Remote Procedure Call)
Socket vs RPC 的比較
| Socket | RPC | |
|---|---|---|
| 抽象層次 | 低,直接控制網路傳輸 | 高,包裝成函式呼叫 |
| 程式設計師看到的 | send / recv | 普通的函式呼叫 |
| 需要處理序列化 | 是,自己來 | 否,stub 處理 |
| 適用場景 | 需要細粒度控制 | 想要簡單的遠端呼叫介面 |
現代的遠端通訊框架(gRPC、REST API)本質上都是 RPC 概念的延伸,只是在協定和序列化格式上有不同的選擇。