コンピューティング

HTTP だけではない:Cloud Run で gRPC の利用が可能に

Google Containers.jpg

※この投稿は米国時間 2020 年 3 月 17 日に、Google Cloud blog に投稿されたものの抄訳です。

Cloud Run は、Google Cloud が提供するマネージド型のサーバーレス コンピューティング プラットフォームです。基盤となるインフラストラクチャの管理に煩わされることなく、フルマネージドの環境でステートレスなサーバー コンテナを実行できます。Cloud Run はリリース以降、多数のお客様にご採用いただいております。プロビジョニングや構成、スケーリングといった処理は Google 側で行うため、お客様はビジネス ロジックに注力できます。

Cloud Run で動作するほとんどのアプリケーションは HTTP JSON REST を使用してリクエストを処理しますが、サポートするプロトコルはこれだけではありません。9 月からは、単項 gRPC サービスのサポートも開始しました。

gRPC は Google が開発した高性能な RPC フレームワークであり、従来のワークロードを対象として、Netflix、Cisco、Square などの企業によってエッジで広範に使用されています。gRPC は、強固なインターフェース定義やコード生成など、従来の HTTP よりも優れた利点を提供しますが、本番環境で gRPC サーバーを運用するインフラストラクチャを設定する作業は、非常に煩雑になる場合があります。Cloud Run は、このようなプロセスに伴う労力を軽減します。

gRPC では、まずプロトコル バッファ ファイルの形式を持つ次のような強固な API コントラクトを定義します。

  syntax = "proto3";
 
enum Operation {
  ADD = 0;
  SUBTRACT = 1;
}
 
message BinaryOperation {
  float first_operand = 1;
  float second_operand = 2;
  Operation operation = 3;
};
 
message CalculationResult {
  float result = 1;
};
 
service Calculator {
  rpc Calculate (BinaryOperation) returns (CalculationResult);
};

このインターフェース定義により、サービスの機能を拡張した場合でも、クライアントとサーバーが同じ言語を使用してやり取りするようにします。次に、この定義に基づいた目的の言語でコードを生成し、それに対応した実装を提供します。

  class Calculator(calculator_pb2_grpc.CalculatorServicer):
 
    def Calculate(self,
                  request: calculator_pb2.BinaryOperation,
                  context: grpc.ServicerContext) -> None:
        logging.info("Received request: %s", request)
        if request.operation == calculator_pb2.ADD:
            result = request.first_operand + request.second_operand
        else:
            result = request.first_operand - request.second_operand
        return calculator_pb2.CalculationResult(result=result)

作成したコードでトラフィックを処理するために必要なその他のものは、すべて Cloud Run が提供します。必要な作業は、シンプルな Dockerfile を作成して、次のような数個のコマンドを実行することだけです。

  docker build -t gcr.io/my-project/my-grpc-app:latest .
docker push gcr.io/my-project/my-grpc-app:latest
gcloud run deploy --image gcr.io/my-project/my-grpc-app:latest --platform managed

フルマネージドの Cloud Run でシンプルな gRPC サービスの運用を容易に開始していただけるように、Google では複数の言語で記述された例をご用意しています。ぜひ gRPC サービスをデプロイしてみてください。

Cloud Run での gRPC のサポートは進化し続けています。たとえば、ストリーミングのサポートについては現在も取り組み中です。クライアントからサーバーへ段階的にデータを送信するユースケースでは、現状では複数の 単項 RPC または REST リクエストをチェーンした方が効率的です。また、Cloud Run の gRPC データパスは、現状では小規模なリクエストに対して最適に動作します。目安として、リクエストのサイズは 32MB 未満に抑えてください。この点は今後改善していく予定ですが、まずは Cloud Run での gRPC の利用について、こちらのチュートリアルで詳細をご確認ください。

- By ソフトウェア エンジニア Richard Belleville、ソフトウェア エンジニア Wenlei He