在2019年的 Google Cloud Next 2019 大会上,Google Cloud 正式发布了 Coud Run,这是一个基于容器运行 Serverless 应用的解决方案,也是业界第一个基于 Knative + Kubernetes 的 Serverless 托管服务。
作为一个完全托管的计算环境,无需担心配置机器、配置集群或自动伸缩。其主要特点还包括:
- 没有厂商限制—— Cloud Run 采用标准的 OCI 容器并实现了标准的 Knative 服务 API,所以用户可以轻松地将自己的应用程序移植到本地或任何其他云环境;
- 快速自动伸缩——在 Cloud Run 中部署的微服务可根据传入请求的数量自动伸缩,无需配置或管理全部的 Kubernetes 集群。如果没有请求,Cloud Run 可扩展到零,也就是说,不使用资源;
- 分流流量——Cloud Run 允许用户在多个版本中拆分流量,因此我们可以循序渐进地进行部署;
- 自定义域—我们可以在 Cloud Run 中设置自定义域映射,它将为这些域提供 TLS 证书;
- 自动冗余——Cloud Run 提供了自动冗余,因此不必为创建多个实例以实现高可用性。
Cloud Run 是如何工作的
Cloud Run,允许用户使用自己喜欢的语言编写代码,或者使用自己选择的二进制库。然后将其推送到 Cloud Build 以创建一个容器构建。通过一个命令 gcloud run deploy 就可以从一个容器映像到一个完全管理的 web 应用程序,该应用程序运行在一个具有 TLS 证书的域上,并且可以根据请求自动伸缩。
Cloud Run 服务可以通过以下方式调用:
一、通过发送 HTTPS 请求来触发 Cloud Run 托管服务,所有的 Cloud Run 服务都有一个稳定的 HTTPS 地址,其中包含的用例有:
- 自定义的 RESTful web API
- 私人 microservice
- HTTP 中间件或 web 应用的反向代理
- 预先包装好的 web 应用程序
二、可以使用 gRPC 将 Cloud Run 服务与其他服务连接起来——例如,在内部微服务之间提供简单、高性能的通信。当你需要进行一下操作时,gRPC 是一个很好的选择:
- 想要在内部微服务之间进行通信:
- 支持高数据加载( gRPC 使用协议缓冲区,比 REST 调用快7倍);
- 不想编写一个完整的客户端库时,只需要一个简单的服务定义;
- 在 gRPC 服务器中使用流 gRPC来 构建响应性更快的应用程序和 api。
三、Cloud Run 支持 WebSockets 应用程序,无需额外配置。潜在用例包括任何需要流媒体服务的应用程序,例如聊天应用程序。
四、从 Pub/Sub 触发:使用 Pub/Sub 将消息推送到 Cloud Run 服务的端点,然后这些消息随后作为 HTTP 请求传送到容器。可使用的场景包括:
- 当文件上传到云存储桶时,接收到事件后进行数据转换;
- 使用 Cloud Run 处理谷歌云操作套件日志,将它们导出到 Pub/Sub;
- 从云运行服务中发布和处理您自己的自定义事件。
五、按计划运行服务:使用 Cloud Scheduler 安全地按计划触发 Cloud Run 服务。这类似于使用cron作业。可能的用例包括:
- 定期执行备份;
- 执行经常性的管理任务,如重新生成站点地图或删除旧的数据、内容、配置、同步或修订;
- 生成账单或其他文件。
六、执行异步任务:您可以使用 Cloud tasks 安全地将任务排队,以便由 Cloud Run 服务异步处理。典型的用例包括:
- 通过意外的生产事件处理请求
- 通过推迟非面向用户的工作来平滑流量峰值
- 通过将缓慢的后台操作(如数据库更新或批处理)委托给另一个服务来处理,从而减少用户响应时间,
- 将调用速率限制为数据库和第三方api等后端服务。
七、event from Eventrac:可以使用来自60多个 Google Cloud 源的事件触发 Cloud Run。
例如:
- 使用云存储事件(通过云审计日志)来触发数据处理通道;
- 每次任务完成时,使用 BigQuery 事件(通过 Cloud Audit Logs )在 Cloud Run 中发起下游处理
Cloud Run 与 Cloud Functions 有什么不同
Cloud Run 和 Cloud Functions 都是在 Google Cloud 的无服务器基础架构上运行的完全托管的服务,可自动扩展并处理 HTTP 请求或事件。它们之间的区别主要如下:
- 前文我们说过 Cloud Run 支持用户使用自己喜欢的语言进行编码,但是 Cloud Functions 对代码的部署方式施加了更多限制(需要将其打包为一个函数),并且仅支持一组特定的语言(您可以使用 JavaScript、Node.js、Python 3,或 Go 运行时);
- Cloud Run 支持使用应用程序中的任何工具或系统库,而Cloud Functions 不允许使用自定义可执行文件;
- Cloud Run 提供了更长的请求超时时间,最高可达60分钟,而 Cloud Functions 的请求超时时间最长可设置为9分钟;
- Cloud Functions 每次只向每个函数实例发送一个请求;而在默认情况下Cloud Run 被配置为在每个容器实例上发送多个并发请求,如果希望获得更大的容量,这将有助于改善延迟并降低成本。
总结:
Cloud Run 提供了许多免费的套餐服务,也可按照使用计费,即只需在容器实例上处理请求时付费。如果它闲置没有流量,那么无需支付任何费用。另外,在确定哪种 Serverless 平台最适合使用时,可参考以下几点:
- 如果您已经将代码打包在 Docker 容器中或正在 Google Cloud 中运行 Kubernetes 集群,请针对您的 Serverless 工作负载考虑使用 Cloud Run。
- 对于运行响应实时事件的代码,或在不使用容器的情况下处理请求,请使用 Cloud Functions。