Cloud Run是来自谷歌云的一种无服务器托管计算,它允许你在完全托管的环境中运行无状态服务器容器,而无需管理底层基础设施。自发布以来,Cloud Run使我们的许多客户能够专注于他们的业务逻辑,而将创建、配置和扩展留给我们。

大多数在云端运行的应用程序都使用HTTP JSON REST来处理请求,但这并不是它所支持的唯一协议;(2019年)9月,它也开始支持unary gRPC服务。

gRPC是由谷歌开发的高性能RPC框架,广泛用于传统的工作负载,并被Netflix、Cisco、Square等公司使用于技术前缘。虽然gRPC提供了与传统HTTP相比的优势,比如强大的接口定义和代码生成,但是在生产环境中设置运行gRPC服务器的基础设施可能是一件非常麻烦的事情。Cloud Run使这一过程变得轻松。

使用gRPC,你可以从一个协议缓冲(protocol buffer,PB)文件形式的强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服务。我们很高兴看到你将部署的gRPC服务! https://github.com/grpc-ecosystem/grpc-cloud-run-example

Cloud Run对gRPC的支持正在发展。例如,我们仍在致力于对流的支持。对于希望将数据增量地从客户机发送到服务器的用例,目前最好将一系列unary RPC或REST请求链接在一起。此外,Cloud Run的gRPC数据路径目前最适合小请求。根据经验,你应该将请求的大小控制在32MB以下。我们计划随着时间的推移改进这一点,但现在你可以通过本教程了解更多关于Cloud Run运行的gRPC。 https://github.com/grpc-ecosystem/grpc-cloud-run-example

谷歌云博客交叉发布 https://cloud.google.com/blog/products/compute/serve-cloud-run-requests-with-grpc-not-just-http