0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

マルチプロセスの gRPC サーバを Cloud Run にデプロイしてモニタリングするための参考資料

Last updated at Posted at 2024-10-03

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 について

別記事にしました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?