TL;DR

Google が 2015 年に OSS 化した、RPC のためのプロトコル。データ形式に Protocol Buffers、通信に HTTP/2 を使う。

なぜ必要か

データをバイナリにシリアライズして送るので、送信するデータ量が減り、高速に通信できる。型付きのデータをやり取りでき、特定の言語やプラットフォームにも依存しない。そのため、次のような場面に向いている。

  • マイクロサービス間の通信: 複数の言語やプラットフォームで構成されることがある。バックエンドどうしであれば、gRPC の恩恵を多く受けられる
  • モバイルのユーザが使うサービス: 通信量を減らせるので、通信容量の制限にかかりにくい
  • 通信速度が求められる場面

仕組み

Protocol Buffers は IDL の役割を持ち、定義からサーバとクライアントに必要なコードを自動生成できる。開発は Schema first で進める。

  1. Protocol Buffers のファイル(proto ファイル)を書く
  2. proto ファイルをコンパイルして、サーバとクライアントのコードを生成する
  3. 生成されたコードを使って、機能を実装する

公式に対応している言語は C#(.NET)、C++、Dart、Go、Java、Kotlin、Node.js、Objective-C、PHP、Python、Ruby である。

関連

出典