【あーるぴーしー】

RPC とは?

💡 遠くのサーバーの関数を「手元にあるように」呼び出す
📌 このページのポイント
RPC(リモートプロシージャコール) クライアント result = add(3, 5) ローカルの関数呼び出し のように書ける result = 8 ✓ サーバー(リモート) def add(a, b): return a + b 実際の処理は リモートで実行 3 + 5 = 8 を返す リクエスト レスポンス ネットワーク ネットワーク越しの処理をローカル関数のように呼べる仕組み
RPCのイメージ
ひよこ ひよこ

REST APIとどう違うの?

ペンギン先生 ペンギン先生

RESTは「リソース」中心で、URLで名詞を指定してHTTPメソッドで操作する(GET /users/123)。RPCは「関数呼び出し」中心で、操作名を直接指定する(getUser(123))。RESTはWebの思想に忠実、RPCはプログラミングの関数呼び出しに忠実。マイクロサービス間の内部通信はRPCの方が相性が良いんだよ

ひよこ ひよこ

gRPCって何がすごいの?

ペンギン先生 ペンギン先生

Protocol Buffersで型安全なインターフェース定義とシリアライズ、②HTTP/2ベースで多重化・ストリーミング対応、③双方向ストリーミングサーバーとクライアントが同時にデータを送り合う)、④多言語対応(Go、JavaPythonTypeScript等のコードを自動生成)。マイクロサービスのデファクトだよ

ひよこ ひよこ

ブラウザから使える?

ペンギン先生 ペンギン先生

生のgRPCHTTP/2のトレーラーが必要で、ブラウザから直接呼べない。gRPC-Webというプロキシ経由のプロトコルがあるけど、機能制限がある。ConnectRPC(旧Buf Connect)はgRPCRESTの両方に対応するプロトコルで、ブラウザからもネイティブに使える。最近はこちらが注目されているよ

ひよこ ひよこ

どういう場面で選ぶ?

ペンギン先生 ペンギン先生

マイクロサービス間の内部通信、低遅延が求められるリアルタイムシステム、大量データのストリーミングにはgRPCが最適。外部公開API(サードパーティ開発者向け)はREST+OpenAPIの方が扱いやすい。社内APIgRPC、公開APIREST+JSONという使い分けが一般的だよ

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「RPC」って出てきたら「リモートの関数をローカルのように呼び出す通信方式」と思えればだいたいOK!
📖 おまけ:英語の意味
「Remote Procedure Call」 = 遠隔手続き呼び出し
💬 Remote(遠隔の)Procedure(手続き)をCall(呼び出す)。1970年代から存在する概念だよ
← 用語集にもどる