Cloud Run 是一个托管式计算平台,可让您直接在 Google 可伸缩的基础架构之上运行容器。
如果您可以构建使用任何编程语言编写的代码的容器映像,则可以在 Cloud Run 上部署该代码。实际上,构建容器映像是可选操作。如果您使用的是 Go、Node.js、Python、Java、.NET Core、Ruby 或支持的框架,则可以使用基于来源的部署选项,它会按照您所用语言的最佳实践构建容器。
Google 构建了可与 Google Cloud 上的其他服务完美配合的 Cloud Run,以便您可以构建功能齐全的应用。
简而言之,Cloud Run 可让开发者将时间花在编写代码上,将很少的时间花在运行、配置和伸缩 Cloud Run 服务上。您无需创建集群或管理基础架构即可高效使用 Cloud Run。
服务和作业:运行代码的两种方式
在 Cloud Run 上,代码可以作为服务或作为作业连续运行。服务和作业都在同一环境中运行,并且可以使用与 Google Cloud 上的其他服务的相同集成。
- Cloud Run 服务。用于运行响应 Web 请求、事件或函数的代码。
- Cloud Run 作业。用于运行执行操作(作业)并在操作完成时退出的代码。
Cloud Run 服务
Cloud Run 服务可为您提供运行可靠 HTTPS 端点所需的基础架构。您负责确保代码侦听 TCP 端口并处理 HTTP 请求。
标准服务包括以下功能:
- 每个服务的唯一 HTTPS 端点
- 系统在
*.run.app
网域的唯一子网域上为每项 Cloud Run 服务提供了一个 HTTPS 端点,您也可以配置自定义网域。Cloud Run 会为您管理传输层安全协议 (TLS),并且支持 WebSocket、HTTP/2(端到端)和 gRPC(端到端)。 - 基于请求的快速自动扩缩
- Cloud Run 旨在快速横向扩容以处理所有传入请求,或者处理请求之外增加的 CPU 利用率(如果 CPU 分配设置为
always on
)。服务可以快速横向扩容到一千个实例甚至更多(如果您申请增加配额的话)。如果需求减少,Cloud Run 会移除空闲容器。如果您担心费用或下游系统过载,可以限制实例数上限。 - 内置流量管理
- 每个部署都会创建一个新的不可变的修订版本。您可以将传入流量路由到最新修订版本、回滚到先前修订版本,或同时将流量拆分到多个修订版本,以逐步执行发布。如果您想要降低部署新修订版本的风险,则这种做法会非常有用。您可以先从向新的修订版本发送 1% 的请求开始,在监控遥测时提高此百分比。
- 专用服务和公共服务
- 您可以从互联网访问 Cloud Run 服务,或者您可以通过以下三种方式限制访问权限:
- 使用 Cloud IAM 指定访问权限政策。
- 使用入站流量设置限制网络访问权限。如果您希望仅允许来自 VPC 和内部服务的内部流量,则此方式非常有用。
- 仅允许使用 Cloud Identity-Aware Proxy (IAP) 进行身份验证的用户。
您可以在 Cloud Run 服务前面配置内容分发网络 (CDN),以从更靠近客户端的边缘位置提供可缓存的资源。Firebase Hosting 和 Cloud CDN 都提供此功能。
缩减至零和实例数下限
Cloud Run 会自动添加和移除实例,以处理所有传入请求,或处理请求之外增加的 CPU 利用率(如果 CPU 分配设置为 always on
)。如果您的服务没有传入请求,则甚至会移除剩下的最后一个实例。此行为通常称为“缩减至零”。
如果没有活跃实例,则在请求传入时,系统会立即按需创建新的实例。这会对第一批此类请求的响应时间产生负面影响,具体取决于容器准备好处理请求的速度。
为确保您的服务不会缩减至零个实例,您可以配置 Cloud Run,使最小数量的实例保持活跃状态。
按服务用量计费
出于经济原因,缩减至零非常适合,因为您需要为分配给实例的 CPU 和内存付费,粒度为 100 毫秒。如果您未配置实例数下限,则您无需在未使用服务时付费。
您可以启用以下两种价格模式:
- 基于请求
- 如果实例未处理请求,则系统不会分配 CPU,您无需付费。此外,您需要按请求付费。
- 基于实例
- 您需要为实例的整个生命周期付费,并且系统会始终分配 CPU。无需按请求付费。
我们提供了宽裕的免费层级。请参阅价格以了解详情,并且请参阅 CPU 分配以了解如何为您的服务启用基于请求或基于实例的价格。
一次性容器文件系统
Cloud Run 上的实例是一次性的。每个容器都有一个内存中可写的文件系统叠加层,如果容器关闭,该叠加层不会保留。Cloud Run 会独立确定何时停止向实例发送请求并关闭实例(例如在缩减时)。
如需在 Cloud Run 即将关停实例时收到警告,您的应用可以捕获 SIGTERM 信号。这样,代码可以刷新本地缓冲区并将本地数据保留到外部数据存储区中。
如需永久保留文件,您可以与 Cloud Storage 集成或装载网络文件系统 (NFS)。
何时使用 Cloud Run 服务
对于处理请求、事件或函数的代码,Cloud Run 服务非常适合。示例使用场景包括:
- 网站和 Web 应用
- 使用您自己偏爱的栈构建 Web 应用,访问 SQL 数据库,并呈现动态 HTML 页面。
- API 和微服务
- 您可以构建 REST API、GraphQL API 或通过 HTTP 或 gRPC 进行通信的专用微服务。
- 流式数据处理
- Cloud Run 服务可以接收来自 Pub/Sub 推送订阅的消息和来自 Eventarc 的事件。
- 异步工作负载
- Cloud Run 函数可以响应异步事件,例如关于 Pub/Sub 主题的消息、Cloud Storage 存储桶变更或者 Firebase 事件。
- AI 推理
- 无论是否配置 GPU,Cloud Run 服务都可以托管推理模型和模型训练等 AI 工作负载。
Cloud Run 作业
如果代码执行操作,然后停止(脚本是一个很好的示例),则您可以使用 Cloud Run 作业来运行代码。您可以使用 gcloud CLI 通过命令行执行作业,安排周期性作业,或在工作流中运行该作业。
数组作业是运行作业的更快捷方式
作业可以启动一个实例来运行代码,这是运行脚本或工具的常用方法。但是,您也可以并行启动多个相同、独立的实例,即数组作业。
数组作业是一种处理可拆分为多个独立任务的作业的更快捷方式,如下所示:
例如,如果您要对 Cloud Storage 中的 1,000 张图片进行大小调整和剪裁,则顺序处理这些图片的速度会比使用多个实例并行处理这些图片的速度要慢,Cloud Run 通过自动扩缩功能对并行处理进行管理。
何时使用 Cloud Run 作业
Cloud Run 作业非常适合运行运行执行操作(作业)并在操作完成时退出的代码。以下是几个例子:
- 脚本或工具
- 运行脚本以执行数据库迁移或其他操作任务。
- 数组作业
- 对 Cloud Storage 存储桶中的所有文件执行高度并行化处理。
- 预定作业
- 定期创建和发送账单,或将数据库查询的结果保存为 XML 文件,并每隔几小时上传一次该文件。
Cloud Run 集成
Cloud Run 可与更广泛的 Google Cloud 生态系统集成,让您能够构建功能齐全的应用。
基本集成包括:
- 数据存储
- Cloud Run 集成了 Cloud SQL(代管式 MySQL、PostgreSQL 和 SQL Server)、Memorystore(代管式 Redis 和 Memcached)、Firestore、Spanner、Cloud Storage 等。如需查看完整列表,请参阅数据存储区。
- 日志记录和错误报告
- 容器日志由 Cloud Logging 自动注入。如果日志中存在异常,则 Error Reporting 会汇总异常,然后通知您。以下语言受支持:Go、Java、Node.js、PHP、Python、Ruby 和 .NET。
- 服务身份
- 每个 Cloud Run 修订版本都与一个服务账号相关联,并且 Google Cloud 客户端库会以透明的方式使用此服务账号向 Google Cloud API 进行身份验证。
- 持续交付
- 如果您将源代码存储在 GitHub、Bitbucket 或 Cloud Source Repositories 中,则可以将 Cloud Run 配置为自动部署新的提交。
- 专用网络
- Cloud Run 实例可以通过无服务器 VPC 访问通道连接器访问 Virtual Private Cloud (VPC) 网络中的资源。这是您的服务与 Compute Engine 虚拟机或基于 Compute Engine 的产品(例如 Google Kubernetes Engine 或 Memorystore)连接的方式。
- Google Cloud API
- 服务的代码以透明的方式向 Google Cloud API 进行身份验证。示例包括 AI 和机器学习 API,例如 Cloud Vision API、Speech-to-Text API、AutoML Natural Language API、Cloud Translation API 等。
- 后台任务
- 如果您希望将代码安排在稍后运行或返回 Web 请求后立即运行,Cloud Run 可与 Cloud Tasks 完美配合,从而提供可伸缩且可靠的异步执行功能。
如需查看可与 Cloud Run 完美配合使用的所有 Google Cloud 服务的列表,请参阅连接到 Google Cloud 服务。
服务或作业必须封装在容器映像中
为了让您的服务或作业能够部署到 Cloud Run,您必须将其封装在容器映像中。如果您对容器不熟悉,请参阅下面简要的概念性简介。
容器映像是一个软件包,其中包含服务运行所需的一切。它包括构建工件、资源、系统软件包和(可选)运行时。这使容器化应用本质上具有可移植性,即在容器可以运行的任何位置运行。构建工件的示例包括已编译的二进制文件或脚本文件,运行时的示例包括 Node.js JavaScript 运行时或 Java 虚拟机 (JVM)。
高级从业人员很重视 Cloud Run 不会给其代码运行带来额外负担这一事实:您可以在 Cloud Run 上运行任何二进制文件。对于用户(包括希望获得更多便利或希望将应用容器化委托给 Google 的专家),Cloud Run 会与开源 Google Cloud Buildpack 集成,从而提供基于源代码的部署。