gRPC は『型安全な高速 RPC』
gRPC は、Google が開発した HTTP/2 ベースの高速 RPC フレームワークです。Protocol Buffers(protobuf)でスキーマを定義し、自動生成されたコードで型安全な通信を実現します。マイクロサービス間通信・モバイル↔バックエンド・低レイテンシ要求のシステムで採用されています。本記事では、gRPC の基本構成と実装パターンを編集部の視点で整理します。マイクロサービス設計 もご参考に。
gRPC の特徴
(1) HTTP/2 ベース:多重化・ヘッダ圧縮。(2) Protocol Buffers:型安全なスキーマ。(3) 多言語対応:Go・Python・TypeScript・Java 等。(4) ストリーミング:双方向ストリーム可能。(5) コード生成:クライアント・サーバーの型を自動生成。REST API設計 もご参考に。
REST との使い分け
(1) 外部公開 API:REST が無難。(2) 内部サービス間:gRPC が有力。(3) モバイル↔バックエンド:gRPC(バッテリー・データ量)。(4) ブラウザ→サーバー:gRPC-Web が必要。(5) パフォーマンス重視:gRPC。「全てを gRPC に」は失敗の元で、用途で使い分けます。
Protocol Buffers の基本
(1) .proto ファイルでスキーマ定義。(2) message と service:データと API の定義。(3) フィールド番号:互換性の鍵。(4) 後方互換のルール:番号を変えない・必須を増やさない。(5) コード自動生成:言語別ツール。TypeScript学習、Go言語入門 もご参考に。
4つの通信モード
(1) Unary:単発リクエスト→単発レスポンス。(2) Server Streaming:1リクエスト→複数レスポンス。(3) Client Streaming:複数リクエスト→1レスポンス。(4) Bidirectional Streaming:双方向。(5) 使い分け:チャット・通知・ファイルアップロード等。WebSocket・リアルタイム通信 もご参考に。
セキュリティと認証
(1) TLS 必須:本番では強制。(2) 認証メタデータ:JWT 等を渡す。(3) インターセプタ:認証・ログを横断的に。(4) mTLS:サービス間認証。(5) 入力検証:スキーマがあっても値の検証は別。認証・認可の実装 もご参考に。
運用のコツ
(1) サービスメッシュ:Istio 等での運用。(2) 分散トレース:OpenTelemetry。(3) エラーハンドリング:gRPC ステータスコード。(4) デッドライン:タイムアウトの伝播。(5) 負荷分散:HTTP/2 の特性を考慮。オブザーバビリティ実践 もご参考に。
ブラウザ対応(gRPC-Web)
(1) ブラウザは HTTP/2 を直接扱えない。(2) gRPC-Web プロキシ:Envoy 等。(3) Connect-RPC:gRPC 互換のシンプル代替。(4) tRPC との比較:TypeScript のみで完結。(5) 選び方:エコシステムで判断。Next.js学習ロードマップ もご参考に。
失敗しがちなパターン
(1) フィールド番号を変える:互換性破壊。(2) 巨大メッセージ:HTTP/2 の利点を活かせない。(3) タイムアウト未設定:詰まるシステム。(4) エラー詳細不足:デバッグ困難。(5) 外部 API に無理に gRPC:採用障壁。対策は、(1)フィールド番号を予約、(2)分割送信、(3)Deadline、(4)エラー詳細、(5)用途で選択、です。IT・Web業界の職種完全マップ もご活用ください。