362 文字
2 分
gRPCはどこが嬉しいのか

gRPC は、Google が公開している RPC(Remote Procedure Call)フレームワークです。スキーマ定義から各言語のクライアント/サーバーコードを自動生成し、HTTP/2 の上で Protocol Buffers(バイナリ形式)を流す、というのが大まかな仕組みです。

何がいいのか#

  • スキーマ駆動.proto ファイルにメソッドとメッセージを定義すると、各言語のスタブが自動生成されます。「インターフェースが先にある」ので、フロント/バック両方の実装ミスが減ります。
  • バイナリで小さく速い:JSONより転送量が少なく、エンコード/デコードのコストも軽いです。
  • HTTP/2 のフル活用:多重化されたストリームを使えるので、サーバーストリーミング・クライアントストリーミング・双方向ストリーミングが素直に書けます。
  • タイムアウト・デッドライン・キャンセルが組み込み:分散システムを書くときに地味に効きます。

苦手なこと#

  • ブラウザから直接叩きにくい:HTTP/2 のトレーラーを使うため、素のブラウザJSからは叩けず、gRPC-Web などのブリッジが必要です。
  • デバッグが手で叩きにくいcurl でサクッと、というわけにはいきません。grpcurl などのツール頼みになります。
  • ヒューマンリーダブルでない:ペイロードがバイナリなので、ログを覗いて中身を読む、といった運用がしにくいです。

RESTとの使い分け#

  • 外向き/公開API、ブラウザクライアント → REST(あるいは GraphQL)
  • 内部サービス間の高頻度通信、低レイテンシが効くところ → gRPC

「外はREST、中はgRPC」という棲み分けがマイクロサービスでは定番です。