【じーあーるぴーしー】

gRPC とは?

💡 マイクロサービス間の「高速通話」プロトコル
📌 このページのポイント
gRPC通信の流れ .proto定義 service Greeter {'{'} rpc SayHello() {'}'} コード生成 Go / Python Java / C# etc. Service A (gRPCクライアント) Stub (自動生成) Protobufシリアライズ HTTP/2 バイナリフレーム通信 多重化 / ストリーミング Service B (gRPCサーバー) サービス実装 Protobufデシリアライズ
gRPCの仕組み
ひよこ ひよこ

REST APIと何が違うの?

ペンギン先生 ペンギン先生

RESTJSON+HTTPでテキストベースの通信。gRPCはProtobuf+HTTP/2でバイナリベースの通信。gRPCの方が①高速(シリアライズが10倍速)、②帯域効率が良い(バイナリなのでサイズが小さい)、③型安全(スキーマから自動生成されたコードを使用)。マイクロサービスの内部通信に最適だよ

ひよこ ひよこ

Protocol Buffersって何?

ペンギン先生 ペンギン先生

Googleが開発したデータのシリアライゼーション形式だよ。.protoファイルでデータ構造を定義すると、Go、JavaPython等のコードが自動生成される。JSONに比べてサイズが小さく、パース速度も高速。「message User { string name = 1; int32 age = 2; }」のように書くんだ

ひよこ ひよこ
ペンギン先生 ペンギン先生

gRPCは4つの通信パターンに対応するよ。①Unary(1リクエスト→1レスポンス、REST的)、②Server streaming(1リクエスト→複数レスポンス)、③Client streaming(複数リクエスト→1レスポンス)、④Bidirectional streaming(双方向にリアルタイム通信)。チャット監視データの配信にストリーミングが活躍するんだ

ひよこ ひよこ

gRPCの弱点は?

ペンギン先生 ペンギン先生

ブラウザから直接呼べない(gRPC-WebやEnvoyプロキシが必要)、②バイナリなのでcurlやPostmanでのデバッグが難しい(grpcurlやBloomRPCを使う)、③学習コストがRESTより高い。外部APIにはRESTGraphQL、内部サービス間通信にはgRPCという使い分けが一般的だよ

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「gRPC」って出てきたら「マイクロサービス間の高速通信フレームワーク」と思えればだいたいOK!
📖 おまけ:英語の意味
「gRPC Remote Procedure Call」 = gRPCリモートプロシージャコール
💬 gは最初Google、現在は再帰的にgRPCの意味。RPC(遠隔関数呼び出し)の現代版だよ
← 用語集にもどる