gRPC
下書きに残っていて書く気は無いけど、もったいないので出しておく。
gRPCの備忘録
gRPC の g は、多分 google の g。
google が開発したものは g を付けがちなので。
概要
google に開発されたハイパフォーマンスな RPC のプロトコルです。
高速かつ HTTP/2 の機能を利用した双方向通信なども利用でき、インターフェース定義言語(Protocol Buffers)をベースに、複数言語のクライアントモジュールとサーバーサイドモジュールを生成できます。
仕組み
Protocol Buffers から、クライアントモジュールとサーバーサイドモジュールを生成する。(protoc)
以下の図にある、gRPC サーバーや gRPC Stub は単一の Protocol Buffers から生成されています。
C++ や Ruby など様々な言語のモジュールを自動生成します。
特徴
- 高速な通信
- 複数の通信方法
- 単一の 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 というインターフェース定義言語を用いてサービスを定義しています。
これを基に各言語のモジュールを自動生成します。
多くの場合、各言語のビルドツールなどが依存関係などを考慮して自動でダウンロードしてくれます。
たまにその機能を実装していないツールもあります。