gRPC

下書きに残っていて書く気は無いけど、もったいないので出しておく。

gRPCの備忘録

gRPC の g は、多分 google の g。
google が開発したものは g を付けがちなので。

概要

google に開発されたハイパフォーマンスな RPC のプロトコルです。
高速かつ HTTP/2 の機能を利用した双方向通信なども利用でき、インターフェース定義言語(Protocol Buffers)をベースに、複数言語のクライアントモジュールとサーバーサイドモジュールを生成できます。

gRPC

仕組み

Protocol Buffers から、クライアントモジュールとサーバーサイドモジュールを生成する。(protoc)
以下の図にある、gRPC サーバーや gRPC Stub は単一の Protocol Buffers から生成されています。
C++Ruby など様々な言語のモジュールを自動生成します。

引用元:https://www.grpc.io/docs/what-is-grpc/introduction/

特徴

  • 高速な通信
  • 複数の通信方法
  • 単一の Protocol Buffers から複数言語のモジュールを生成

高速な通信

複数の通信方法

HTTP/1.1 までで利用されてきた、GET、POST などのメソッドは、1つのリクエストに対して、1つのレスポンスを返すという方式でした。
HTTP/2 では、ストリームという機能により、複数のリクエスト、レスポンスを同時に処理することができるようになりました。
gRPC には、以下の4つのサービスメソッドがあります。

  • unary RPC

- リクエスト 1 : レスポンス 1

  • server streaming RPC

- リクエスト 1 : レスポンス 多

  • client streaming RPC

- リクエスト 多 : レスポンス 1

  • bidirectional streaming RPC

- リクエスト 多 : レスポンス 多

単一の Protocol Buffers から複数言語のモジュールを生成

gRPC では、Protocol Buffers というインターフェース定義言語を用いてサービスを定義しています。
これを基に各言語のモジュールを自動生成します。
多くの場合、各言語のビルドツールなどが依存関係などを考慮して自動でダウンロードしてくれます。
たまにその機能を実装していないツールもあります。