使用 gRPC 实现应用程序

通过 Code Engine,您可以将应用程序配置为作为 gRPC 服务器运行,以通过利用 gRPC 功能来处理客户机调用。

gRPC 是一个现代开放式源代码高性能远程过程调用 (RPC) 框架,可以在数据中心内和数据中心之间连接服务。 提供高效的二进制序列化,双向流式传输,客户机和服务器负载均衡,跟踪,运行状况检查和认证。 有关更多信息,请参阅 gRPC 文档

使用 gRPC 的优点

gRPC 在促进客户机与服务器之间的通信方面提供了一些优势。 gRPC 的一个基本方面是定义一个清晰的接口,用于封装可用于远程调用的所有方法和参数。 在服务器端,实现此接口以有效处理和响应客户机请求。

这种将 gRPC 与 Code Engine 应用程序配合使用的方法具有优势。

  • 互操作性- gRPC 客户机和服务器可以在各种环境中相互运行和通信。 例如,可以使用 Go 语言定义服务器,而使用 Java定义客户机。

  • 序列化- gRPC 使用协议缓冲区进行消息序列化,这在大小和速度方面比在 HTTP API 中使用 JSON 更高效。

  • Streaming- gRPC 支持双向流式方法,以便客户机和服务器通过单个连接同时发送和接收消息。

  • 错误检测- gRPC 通过协议缓冲区 (.proto 文件) 在客户机与服务器之间强制实施强类型合同。 此合同确保客户机和服务器在接口和数据结构上达成一致,从而提供更好的代码生成,验证和错误处理。

  • 安全性- gRPC 支持各种认证和加密方法,包括相互 TLS,提供客户机与服务器之间的安全通信。

配置 Code Engine 应用程序以使用 gRPC

在项目级别上,Code Engine 应用程序支持 gRPC,这意味着 Code Engine gRPC 服务器应用程序只能向在同一项目中运行的客户机提供流量。

必须使用 Code Engine CLI 来配置 Code Engine gRPC 应用程序。

准备工作

从 Code Engine:

  1. 使用 ibmcloud ce application create 命令创建和部署应用程序。 要指示此应用程序支持使用 HTTP/2 作为传输方式的 gRPC,必须指定格式为 [NAME:]PORT--port 选项; 例如,--port h2c:8080。 当 [NAME:]h2c 时,端口使用未加密的 HTTP/2。 缺省情况下,Code Engine 假定应用程序侦听端口 8080 上的入局连接。

    在以下示例中,使用 myapp-grpcserver 作为服务器应用程序的名称,并指定 icr.io/codeengine/grpc-server 作为要引用的映像。

    ibmcloud ce application create --name myapp-grpcserver --port h2c:8080 --min-scale 1 --image icr.io/codeengine/grpc-server
    
  2. 运行 application get 命令以显示有关应用程序的详细信息。

    ibmcloud ce application get --name myapp-grpcserver
    

    示例输出

    [...]
    OK
    
    Name:               myapp-grpcserver
    ID:                 abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
    Project Name:       myproject
    [...]
    Port:               h2c:8080
    [...]
    

既然已创建并部署服务器应用程序以使用 gRPC,那么必须在同一项目中部署客户机应用程序以使用 gRPC访问服务器。 有关用于部署 gRPC 服务器和客户机应用程序的 Code Engine 样本代码的更多信息,请参阅 Code Engine grpc 样本

GitHub 上的 IBM Cloud Code Engine 样本存储库 构建的 Code Engine 样本映像在公共 icr.io/codeengine 名称空间的 IBM Cloud® Container Registry 中可用。