Cloud Run 是一个全托管式应用平台,可让您在 Google 高度可伸缩的基础设施之上运行代码、函数或容器。
简而言之,借助 Cloud Run,开发者可以将主要精力集中在编写代码上,而不是耗费在 Cloud Run 服务的运维、配置和扩缩上。您无需创建集群或管理基础设施即可高效使用 Cloud Run。
服务和作业
在 Cloud Run 上,代码可以作为服务或作业运行。
下表概要介绍了每种 Cloud Run 资源类型提供的选项。
| 资源 | 说明 |
|---|---|
| 服务 | 使用根据各种关键指标自动扩缩的无状态临时实例来响应发送到唯一且稳定的端点的 HTTP 请求,还会响应各种事件和函数。 |
| 作业 | 执行可并行化的任务,这些任务会手动执行或按计划执行,且运行到完成。 |
Cloud Run 服务
Cloud Run 服务可为您提供运行可靠 HTTPS 端点所需的基础架构。您负责确保代码侦听 TCP 端口并处理 HTTP 请求。
下图展示了一项 Cloud Run 服务,它运行多个容器实例,以使用 HTTPS 端点处理来自客户端的 Web 请求和事件。
标准服务包括以下功能:
- 每个服务的唯一 HTTPS 端点
- 每项 Cloud Run 服务在
*.s3nsrun.fr网域的唯一子网域上都有一个 HTTPS 端点,您也可以配置自定义网域。Cloud Run 会为您管理传输层安全协议 (TLS),并且支持 WebSocket、HTTP/2(端到端)和 gRPC(端到端)。 - 基于请求的快速自动扩缩
- Cloud Run 会快速扩容以处理所有传入请求,或者处理请求之外增加的 CPU 利用率(如果结算设置设为基于实例的结算方式)。服务可以快速横向扩容到一千个实例甚至更多(如果您申请增加配额的话)。如果需求减少,Cloud Run 会移除空闲容器。如果您担心费用或下游系统过载,可以限制实例数上限。
- 可选的手动扩缩
- 默认情况下,Cloud Run 会自动扩容到更多实例以处理更多流量,但您可以使用手动扩缩来控制扩缩行为,从而替换此行为。
- 内置流量管理
为降低部署新修订版本的风险,Cloud Run 支持执行逐步推出,包括将传入流量路由到最新修订版本、回滚到以前的修订版本,以及同时将流量拆分到多个修订版本。
例如,您可以先从向新的修订版本发送 1% 的请求开始,在监控遥测时提高此百分比。
- 公共服务和专用服务
您可以从互联网访问 Cloud Run 服务,也可以通过以下方式限制访问权限:
- 使用 Cloud IAM 指定访问权限政策。
- 使用入站流量设置限制网络访问权限。如果您希望仅允许来自 VPC 和内部服务的内部流量,则此方式非常有用。
- 仅允许使用 Identity-Aware Proxy (IAP) 进行身份验证的用户。
您可以将内容分发网络 (CDN)(例如 Firebase Hosting 和 Cloud CDN)作为 Cloud Run 服务的前端,从更靠近客户端的边缘位置传送可缓存资源。
缩减至零和实例数下限
默认情况下,如果结算设置为基于实例的结算方式,Cloud Run 会自动添加和移除实例,以处理所有传入请求或处理请求之外增加的 CPU 利用率。
如果您的服务没有传入请求,则甚至会移除剩下的最后一个实例。此行为通常称为“缩减至零”。 然后,如果在请求传入时没有活跃实例,Cloud Run 会创建一个新实例。这会增加第一批此类请求的响应时间,具体取决于容器准备好处理请求的速度。
如需更改此行为,请使用以下方法之一:
按服务用量计费
出于经济原因,缩减至零非常适合,因为您需要为分配给实例的 CPU 和内存付费,粒度为 100 毫秒。如果您未配置实例数下限,则您无需在未使用服务时付费。 我们提供了宽裕的免费层级。如需了解详情,请参阅价格。
您可以启用以下两种结算设置:
- 基于请求
- 如果实例未处理请求,您无需付费。您需要按请求付费。
- 基于实例
- 您需要为实例的整个生命周期付费。无需按请求付费。
我们提供了宽裕的免费层级。如需了解详情,请参阅价格;如需了解如何为服务启用基于请求或基于实例的结算方式,请参阅结算设置。
临时性容器文件系统
Cloud Run 上的实例是一次性的。每个容器都有一个内存中的可写文件系统叠加层,如果容器关闭,该叠加层不会保留。Cloud Run 会确定何时停止向实例发送请求并关停实例(例如在缩容时)。
如需在 Cloud Run 即将关停实例时收到警告,您的应用可以捕获 SIGTERM 信号。这样,代码可以 flush 本地缓冲区并将本地数据保留到外部数据存储区中。
如需永久保留文件,请与 Cloud Storage 集成或装载网络文件系统 (NFS)。
何时使用 Cloud Run 服务
对于处理请求、事件或函数的代码,Cloud Run 服务非常适合。示例使用场景包括:
- 网站和 Web 应用
- 使用您自己偏爱的栈构建 Web 应用,访问 SQL 数据库,并呈现动态 HTML 页面。
- API 和微服务
- 您可以构建 REST API、GraphQL API 或是通过 HTTP 或 gRPC 进行通信的专用微服务。
Cloud Run 作业
如果您的代码执行操作,然后停止(例如使用脚本),则您可以使用 Cloud Run 作业运行代码。如需从命令行执行作业,您可以使用 Google Cloud CLI、安排周期性作业
数组作业是运行作业的更快捷方式
作业可以启动单个实例来运行代码,这是运行脚本或工具的常用方法。
不过,您也可以使用数组作业,从而并行启动多个相同的独立实例。数组作业是一种处理可拆分为多个独立任务的作业的更快捷方式。
下图显示了包含 7 个任务的作业按顺序运行所需的时间如何比 4 个实例并行可以处理独立任务时所需的时间更长:
例如,如果您要对 Cloud Storage 中的 1,000 张图片进行大小调整和剪裁,则顺序处理这些图片的速度会比使用多个实例并行处理这些图片(由 Cloud Run 管理自动扩缩)的速度要慢。
何时使用 Cloud Run 作业
Cloud Run 作业非常适合运行运行执行操作(作业)并在操作完成时退出的代码。以下是几个例子:
- 脚本或工具
- 运行脚本以执行数据库迁移或其他操作任务。
- 数组作业
- 对 Cloud Storage 存储桶中的所有文件执行高度并行化处理。
- 预定作业
- 定期创建和发送账单,或将数据库查询的结果保存为 XML 文件,并每隔几小时上传一次该文件。