我们很高兴宣布为 Cloud Run 提供一系列广泛的新协议支持:端到端 HTTP/2 连接, WebSockets 支持和 gRPC 双向流传输,从而完善了 gRPC 提供的 RPC 类型。这些功能在全球所有 Cloud Run 区域的发布预览。

对流的支持是构建响应式高性能应用的重要部分。 Cloud Run 以前不支持流传输,因为它既缓冲了来自客户端的请求,又缓冲了服务的响应。2020年10月,我们发布了支持服务器端流服务,它使您可以将数据从无服务器容器流式传输到客户端。这使我们可以提高先前的32 MB响应限制,并支持 gRPC 的服务器端流。但是,当时还不支持客户端流或双向流来运行 WebSockets 和 gRPC 。

WebSockets 和 gRPC 双向流

借助新的双向流功能,Cloud Run 现在可以运行使用 WebSockets 的应用程序(例如社交应用,协作编辑,多人游戏)以及所有 gRPC 双向流 API。服务器和客户端可以持续在同一连接上交换数据。利用 WebSocket 和双向 RPC 可以构建响应更快的应用和 API ,即可以使用  WebSockets 等协议在 Cloud Run 之上构建聊天应用程序,或使用 gRPC 设计流 API 。

下图是一个在 Cloud Run 上作为容器运行的协作实时“白板”应用程序的示例,在不同的浏览器窗口上提供两个单独的 WebSocket 会话。注意两个窗口上的画布是实时更新的:

在 Cloud Run 上使用 WebSockets 不需要任何额外的配置,可以直接使用。要将客户端流或双向流与 gRPC 一起使用,您需要启用 HTTP/2 支持,这将在下一节中讨论。

要在 Cloud Run 上试用示例的 WebSockets 应用程序,请单击此链接从 Socket.io 部署此白板示例。

要注意的是, WebSockets 流仍然受您在 Cloud Run 服务上配置的请求超时的约束。如果打算使用 WebSockets ,请确认设置的请求超时。

端到端 HTTP/2 支持

当初许多应用还不支持 HTTP/2 的时候, Cloud Run 就从第一个发行版以来就支持,包括用于 gRPC 的端到端 HTTP/2 。它通过自动升级客户端来支持该协议,使得您的服务更快,更高效。但是,以前, HTTP/2 请求发送到容器后就降级为 HTTP/1 了。

而现在,您可以在 Cloud Run 上使用端到端 HTTP/2 传输。这对于已经支持 HTTP/2 的应用很有用。对于不支持 HTTP/2 的应用, Cloud Run 将继续处理 HTTP/2 流量,直到进入您的容器为止。

为了使您的服务能够提供端到端 HTTP/2 服务,您的应用程序需要能够处理 HTTP/2 cleartext (也称为“ h2c”)格式的请求。我们用 Go 开发了一个示例 h2c 服务端应用,供您尝试“ h2c”协议。您可以通过 git clone 下载,并运行以下命令来打包应用并将其部署到 Cloud Run :

git clone https://github.com/GoogleCloudPlatform/golang-samples.git

cd ./run/h2c

gcloud beta run deploy http2-test --use-http2 --source=.

 

在上面的示例命令中,“ --use-http2”选项表示应用程序支持“ h2c”协议,并确保服务获取 HTTP/2 请求而不降级它们。

部署服务后,请使用以下命令来验证请求是使用 HTTP/2 服务的,而不是降级为 HTTP / 1 的:

curl -v --http2-prior-knowledge https://<SERVICE_URL>

您还可以在 Google Cloud 控制台中将服务配置为使用 HTTP/2 :

相关推荐