gRPC ハンズオン
まずはこのあたりを一通り実施して雰囲気を掴みます。
公式チュートリアル:
クイックスタート(helloworld サンプル):
helloworld サンプル:
Protocol Buffer Compiler (protoc)
protoc をコマンドラインで実行する際には、カレントディレクトリ、.proto ファイル、モジュールの生成先の位置関係に気をつけてパラメータを指定する必要があります。特に -I
パラメータの特殊な指定方法 (e.g. -Igrpc/example/custom/path=../../protos
) についてはコマンドのヘルプ (-h
) にも載っていないので、下記ページの Generating gRPC interfaces with custom package path セクションにある貴重な例を参考にしてください。
Python 用 protoc の使い方の説明:
サーバのマルチプロセス対応
gRPC サーバは ThreadPoolExecutor を使ってマルチスレッドで起動することになっていますが、これを単純に ProcessPoolExecutor に置き換えることではマルチプロセス対応ができません。
まずサブプロセスを必要な数だけ fork してから、通常の ThreadPoolExecutor を使って gRPC サーバを起動する方法がよいとされています。
Multiprocessing のサンプル:
コマンドラインでリクエストを送る (grpcurl)
grpcurl は gRPC サーバに直接リクエストを送信できるコマンドラインツールで、開発時に便利です。
grpcurl からリクエストを送る際に .proto ファイルを指定しなくていいように、gRPC サーバで server reflection という機能を有効にしておくのがおすすめです。
Server reflection 機能を有効にするサンプル:
Cloud Run 上で動作させる
デプロイ時に HTTP/2 を有効にすることや、クライアント・エッジロードバランサ・サーバのインスタンス間の関係に注意する必要があります。
OpenTelemetry 対応(モニタリング)
トレースコンテキストは、ヘッダの traceparent
に格納することが推奨されています。gRPC では HTTP/2 ヘッダのことを metadata と呼んでいます。
カスタム metadata を使用するサンプル:
gRPC Keepalive について
別記事にしました。