gRPCは、スキーマからコードを生成し、バイナリで通信し、ストリーミングに対応する
gRPCでは、サービスのメソッドとメッセージの形を、.protoというスキーマファイルに定義します。クライアントとサーバーの両方が、そのファイルからコードを生成します。契約は、ただ文書として書かれるだけでなく、生成されたコードとして、両側に組み込まれます。
gRPCはメッセージを、JSONのテキストではなく、Protocol Buffersというバイナリでエンコードします。エンコードしたメッセージは、より小さく解析も速い一方、RESTのレスポンスのように通信上で人が読める形ではなくなります。
gRPCは、単発のリクエストに単発のレスポンスを返す形を超えて、ストリーミングにも対応します。クライアントやサーバーは、1つの接続の上で、一連のメッセージを送れます。これは、繰り返しポーリングするよりも、絶えず更新されるデータに向いています。
この組み合わせは、内部のサービス間呼び出しに向いています。クライアントとサーバーの両方が、同じスキーマから生成したコードを使えるため、実装の手間が省け、通信も高速だからです。一方、幅広いクライアントとの互換性や、人が読めるレスポンスの方が重要な公開APIには、あまり向きません。
この課の目標
gRPCがバイナリでスキーマ駆動であることの意味を説明できる。ストリーミングが単発のリクエスト/レスポンスに何を加えるかを説明できる。RESTやGraphQLよりgRPCが合う場面を説明できる。
あるバックエンドが、更新され続ける株価を高頻度で別の内部サービスにストリーミングする必要があり、両方のサービスは同じチームの管理下にある。ここでgRPCが特に合う理由となる特徴は?