【あーるぴーしー】

RPC とは?

最終更新:
💡 遠くのサーバーの関数を「手元にあるように」呼び出す

別のプロセスやコンピューター上の手続き・メソッドを呼び出す仕組み。関数呼び出しに似たインターフェースで要求を送り、応答を受け取るが、通信の遅延や失敗も扱う必要がある。

📌 このページのポイント
RPC:遠隔のメソッドを呼ぶ クライアント アプリ add(3, 5) サーバー 処理 3 + 5 = 8 要求:add(3, 5) 応答:8 ローカル呼び出しとは失敗の条件が違う
加算サービスの単一要求・応答の例。通信の遅延や失敗も扱う。
ひよこ ひよこ
RPCは何を呼び出すの?
ペンギン先生 ペンギン先生
たとえば遠隔の計算サービスにadd(3, 5)を依頼し、結果の8を受け取るよ。クライアント側の窓口が引数をメッセージにして送り、サーバー側でメソッドを実行する。手元で書く形が関数呼び出しに似ているんだ。
ひよこ ひよこ
ローカルの関数と同じように考えていい?
ペンギン先生 ペンギン先生
ネットワークの遅延や切断があるので、まったく同じではないよ。応答待ちの期限やエラーを設計しよう。gRPCでもサーバー側では成功したのにクライアント側は期限切れになることがある。再試行する場合は、同じ更新を二重に行わない工夫も必要だね。
ひよこ ひよこ
gRPCはどんな仕組み?
ペンギン先生 ペンギン先生
標準ではProtocol Buffersでメソッドとメッセージを定義し、クライアント・サーバーのコードを生成できるよ。1要求・1応答に加え、サーバー側・クライアント側・双方向のストリーミングもある。ただしRPC全般がこの仕様やIDLを必須にしているわけではないんだ。
ひよこ ひよこ
ブラウザからも使える?
ペンギン先生 ペンギン先生
ブラウザ向けにはgRPC-WebやConnectなどの選択肢があるよ。grpc/grpc-webの実装は単一要求・応答とgrpcwebtextモードのサーバーストリーミングを扱い、クライアント・双方向ストリーミングには対応していない。ConnectはgRPC・gRPC-Web・独自のConnectプロトコルを扱うRPCライブラリ群で、RESTそのものではないよ。
ひよこ ひよこ
RESTより速くて使いやすいの?
ペンギン先生 ペンギン先生
RPCかRESTかという名前だけで性能や型の安全性は決まらないよ。扱うデータ、呼び出し方、利用言語、ブラウザ対応、ストリーミングや運用の条件で比較しよう。内部APIなら必ずRPC、公開APIなら必ずRESTという決まりもないんだ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「RPC」って出てきたら「リモートの関数をローカルのように呼び出す通信方式」と思えればだいたいOK!
📖 おまけ:英語の意味
「Remote Procedure Call」 = 遠隔手続き呼び出し
💬 Remote(遠隔の)Procedure(手続き)をCall(呼び出す)。別の場所の処理を呼び出すという意味だよ

参考資料

← 用語集にもどる