Cloud Run 是 Google Cloud 提供的全托管无服务器平台,允许您在无需操心基础设施管理的情况下部署应用。它具有极强的灵活性,是从个人项目到企业级项目等多种场景的理想之选。
在本文中,我将为您介绍 Cloud Run 是什么、如何工作、能解决哪些使用场景,以及它与其他无服务器解决方案的比较。我还会一步步带您部署您的第一个 Cloud Run 应用!
在开始之前:如果您完全是云计算新手,建议先学习我们的 Introduction to Cloud Computing 课程。该课程会拆解云计算基础,解释诸如可扩展性与延迟等关键术语,并介绍像 GCP 这类提供商的云工具优势。
What is Cloud Run?
Cloud Run 是一个无服务器的容器执行平台,可让您在不必担心基础设施管理的情况下部署应用程序。
在传统的基于服务器的部署中,您通常需要配置并维护虚拟机。Cloud Run 的工作方式略有不同,它将这些细节抽象掉,提供一个全托管的环境。
它基于 Knative(一个开源的 Kubernetes 平台,用于支持无服务器工作负载)构建,这意味着您的应用会根据需求自动扩缩。当流量增加时,Cloud Run 会启动更多实例来处理;当流量下降时,它会缩容,甚至可以缩到 0,这样在应用未实际运行时,您无需支付任何费用。
Cloud Run 不仅成本高效,而且非常灵活。只要能在容器中运行,您就可以部署任意语言、任意框架或二进制程序。无论是常见技术如 Node.js、Python、Go、Java,还是小众技术都可以。实际上,这意味着 Cloud Run 能为后端服务、API、AI 工作负载、Web 应用,甚至是定时批处理任务提供动力。
以上是一个概览。接下来我们更深入地看一下 Cloud Run 的关键特性。
Key Features of Cloud Run
我们刚刚提到了几个特性,下面是 Cloud Run 主要功能的完整概述。
与语言和框架无关
Cloud Run 最大的优势之一是不会将您绑定到某种特定语言或框架。只要您的应用能在容器中运行,就可以部署。如果您的团队技术栈多样,您可以在所有服务中统一使用 Cloud Run——一套工具统筹全局!
自动扩缩
Cloud Run 会根据流量进行横向、动态扩缩。当应用收到更多请求时,Cloud Run 会自动启动更多实例;当需求下降时,它会缩容,必要时甚至缩到 0。
内置安全与合规
Cloud Run 为所有已部署服务自动提供 HTTPS、由 Google 管理的服务身份用于安全认证、用于私有网络的 VPC 连接,以及内置的合规认证,如 SOC 2、ISO 27001 和 HIPAA(适用于医疗保健应用)。简单来说,安全合规方面您可以放心。
与 Google Cloud 服务集成
由于 Cloud Run 是 Google Cloud 生态的一部分,它能与其他 GCP 服务良好协作。您可以轻松将其连接到 Cloud SQL 作为数据库、使用 Pub/Sub 进行数据流处理、将文件存储在 Cloud Storage,或与 BigQuery、Firebase 以及 AI/ML 服务搭配使用。
按需 GPU 支持
对于 AI 工作负载,Cloud Run 现已支持按需 GPU。对于机器学习推理、视频处理和科学计算,这是一大提升,因为它允许您在无需管理底层硬件的情况下运行任何 GPU 加速的工作负载。
Cloud Run Functions:函数即服务(FaaS)模型
如果您不想管理完整的容器,Cloud Run Functions 提供一种简化的、事件驱动的方式来运行小型、单一用途的函数。它类似于 AWS Lambda 或 Google Cloud Functions,但运行在 Cloud Run 的基础设施之上。
How Cloud Run Works: Step-by-Step
本节我将带您将一个简单应用部署到 Cloud Run。我会引导您完成将应用容器化、部署到 Cloud Run,并根据需求自动扩缩的全过程。
我们将使用 Docker 将应用容器化,但并非必须。最后会有更多说明。
Step 1: Set up your environment
在部署任何内容之前,您需要安装以下工具:
Google Cloud SDK :这是一个命令行界面(CLI),可让您与包括 Cloud Run 在内的 Google Cloud 服务交互。您可以从此处 安装。
Docker :如果您的应用尚未容器化,您需要使用 Docker 来打包应用。从这里 安装 Docker。
Google Cloud Project :请确保您已设置好一个 Google Cloud 项目。可在 Google Cloud 控制台 中创建。
Step 2: Write your application code
现在,让我们编写一个简单的 “Hello World” Node.js 应用。
为您的应用创建一个目录:
mkdir hello-world-app
cd hello-world-app技术支持
在该目录下创建一个 index.js 文件,并写入以下内容:
const http = require('http');
const requestListener = (req, res) => {
res.writeHead(200);
res.end('Hello, Cloud Run!');
};
const server = http.createServer(requestListener);
server.listen(8080, () => {
console.log('Server is running on port 8080');
});技术支持
创建一个 package.json 来定义应用的依赖:
{
"name": "hello-world-app",
"version": "1.0.0",
"main": "index.js",
"dependencies": {}
}技术支持
应用准备就绪后,我们将继续将其容器化。
Step 3: Containerize the application
创建 Dockerfile 以定义容器镜像
在项目目录中创建名为 “Dockerfile” 的文件,并写入以下内容:
# Use the official Node.js image as a base
FROM node:16-alpine
# Set the working directory inside the container
WORKDIR /usr/src/app
# Copy package.json and install dependencies (if any)
COPY package*.json ./
# Copy the rest of the application code
COPY . .
# Expose port 8080 for Cloud Run
EXPOSE 8080
# Start the app
CMD ["node", "index.js"]技术支持
构建 Docker 镜像
运行以下命令来构建 Docker 镜像:
docker build -t gcr.io/your-project-id/hello-world-app .技术支持
注意: 将 your-project-id 替换为您的 Google Cloud 项目 ID。
本地测试镜像
您可以通过运行以下命令在本地测试 Docker 容器:
docker run -p 8080:8080 gcr.io/your-project-id/hello-world-app技术支持
在浏览器中访问 http://localhost:8080 以验证应用是否正在运行。
Step 4: Push the image to Google Artifact Registry
为您的项目启用 Artifact Registry
如果您尚未启用 Artifact Registry,请运行以下命令
gcloud services enable artifactregistry.googleapis.com技术支持
注意:您需要启用结算功能才能完成此步骤!
在 Artifact Registry 中创建存储库
在 Artifact Registry 中创建一个新的 Docker 存储库:
gcloud artifacts repositories create hello-world-repo \
--repository-format=docker \
--location=us-central1技术支持
为 Artifact Registry 配置 Docker 身份验证
配置 Docker 以使用 Artifact Registry 进行身份验证:
gcloud auth configure-docker us-central1-docker.pkg.dev技术支持
为 Artifact Registry 标记 Docker 镜像
使用 Artifact Registry 存储库 URL 为 Docker 镜像打标签:
docker tag gcr.io/your-project-id/hello-world-app us-central1-docker.pkg.dev/your-project-id/hello-world-repo/hello-world-app技术支持
将镜像推送到 Artifact Registry
将已标记的 Docker 镜像推送到您的 Artifact Registry 存储库:
docker push us-central1-docker.pkg.dev/your-project-id/hello-world-repo/hello-world-app技术支持
Step 5: Deploy to Cloud Run
当镜像推送到 Artifact Registry 后,您可以直接从 Artifact Registry 将其部署到 Cloud Run 。
使用以下命令将镜像部署到 Cloud Run:
gcloud run deploy hello-world-app \
--image us-central1-docker.pkg.dev/your-project-id/hello-world-repo/hello-world-app \
--platform managed \
--region us-central1 \
--allow-unauthenticated技术支持
hello-world-app :这是您的 Cloud Run 服务名称。
us-central1-docker.pkg.dev/your-project-id/hello-world-repo/hello-world-app :存储在 Artifact Registry 中的镜像 URL。
--platform managed :确保使用 Cloud Run 的全托管平台(而非 GKE 集群)。
--region us-central1 :指定 Cloud Run 部署服务的区域。
--allow-unauthenticated :允许公共访问服务。如需限制访问,可相应调整该标志。
运行该命令后,Cloud Run 将部署您的容器化应用,并提供用于访问的 URL。
就这样!到 GCP 控制台查看一下,您应该能看到新实例。
Step 6: Clean up
为避免持续产生费用,请在测试完成后删除服务。
1. 删除 Cloud Run 服务
运行以下命令删除已部署的 Cloud Run 服务:
gcloud run services delete hello-world-app --region us-central1技术支持
这会移除 Cloud Run 实例,但不会删除容器镜像。
2. 删除 Artifact Registry 镜像
要从 Artifact Registry 移除镜像,先列出镜像:
gcloud artifacts docker images list us-central1-docker.pkg.dev/your-project-id/hello-world-repo技术支持
然后使用以下命令删除镜像:
gcloud artifacts docker images delete us-central1-docker.pkg.dev/your-project-id/hello-world-repo/hello-world-app --delete-tags技术支持
至此,您的 Artifact Registry 也清理完成。
3. 删除 Artifact Registry 存储库(如不再需要)
如果您想彻底移除 Artifact Registry 存储库,请运行:
gcloud artifacts repositories delete hello-world-repo --location=us-central1技术支持
只有在您完全不再需要该存储库时才执行此步骤,否则可以将其复用于后续部署。
4.(可选)删除 Google Cloud 项目
如果这是一个测试项目且您已不再需要它,可以删除整个项目以移除所有相关资源:
gcloud projects delete your-project-id技术支持
Source deployments
还记得我说并不总是需要手动将应用容器化吗?
Cloud Run 现已支持源代码部署,这意味着它可以使用 Cloud Build 从您的源代码为您构建容器。
您可以使用以下命令:
gcloud run deploy hello-world-app \
--source . \
--region us-central1 \
--allow-unauthenticated技术支持
Cloud Build 会自动检测您的应用语言(Node.js、Python、Go、Java 等),为您构建容器镜像并存储到 Artifact Registry。随后 Cloud Run 会像您手动创建容器一样部署该镜像。对于使用受支持语言的简单应用(如 Node.js、Python、Go、Java 等),我强烈建议使用这种方式,但如果您需要对容器进行完全控制(例如自定义依赖、操作系统级调整、多步构建),则不建议使用。
Tips to Use Cloud Run efficiently
将应用部署到 Cloud Run 相当简单,但要让它高效运行则需要进行一些微调。我在最初使用时经历了不少试错,以下是我的经验:
1. 冷启动确实存在
尤其当您的容器镜像较大时更明显。镜像越小,服务启动越快。使用 distroless 等精简基础镜像能显著改善。如果您构建的是 Python 应用,试试官方镜像的 slim 版本。或者,如果您对成本不太敏感,可以将最小实例数设置为 1。
2. 最值得调优的变量是请求并发数
Cloud Run 允许每个实例同时处理多个请求,但默认值(每个容器 80 个请求)往往并不最优。对于 CPU 密集型任务,我发现将并发数降至 1 或 2 会顺畅得多。相反,API 通常可以承受更高的并发。并发数越高,所需的实例数量就越少,因而成本也越低,所以务必多做实验,找出您的应用的最佳平衡点。
3. 一定要设置实例上限!
当有人(比如我)做压测并发起一堆请求时,这非常有用。我已经踩过这个坑了,您就别再踩了。请务必设置最大实例数。
4. 确保只有合适的人能访问您的实例
默认情况下,任何拥有 URL 的人都可以访问 Cloud Run 服务,这对于快速演示很棒,但对于生产环境则未必合适。如果您的应用不该公开访问,请使用 IAM 权限进行加固。
5. Cloud Logging 和 Cloud Trace 会成为您的好伙伴
如果您习惯通过 SSH 登录虚拟机来调试问题,那这次可能会失望。Cloud Run 的日志会直接流向 Google Cloud 控制台,您可以在那儿查看一切。请确保为应用添加结构化日志,这会让排障变得容易得多。
Cloud Run Use Cases
我们已经谈到过一些 Cloud Run 的使用场景,比如运行 Web 应用、API 或定时任务,但显然还有更多。
视频与图像分析
您可以部署图像识别模型,为社交媒体平台实时处理上传的图片,或在视频上传时进行转码。当内容走红、需求激增时,Cloud Run 能通过自动扩缩应对峰值;而在需求较低时,仍能确保成本效率。
来源: Google Cloud
实时流处理
想象您在构建一个监控在线市场用户行为的系统。通过处理来自 Pub/Sub 或 BigQuery 的事件流 ,您可以基于用户行为即时触发操作,如发送推送通知或实时分析趋势。Cloud Run 会在高峰期自动扩容以处理传入事件,在流量减少时缩容。
来源: Google Cloud
实时文件处理
一个场景是在大型企业中进行实时日志文件分析。每当日志文件上传到 Cloud Storage,Cloud Run 就会触发一个容器来解析文件、运行分析并存储结果,同时还能根据文件大小和处理任务的复杂度动态扩缩。
来源: Google Cloud
无服务器 IoT 后端
Cloud Run 非常适合处理 IoT 应用的后端服务。例如,在一个从数千个传感器采集环境数据的 IoT 方案中,Cloud Run 可以实时处理来自各设备的输入数据。
来源: Google Cloud
Google Cloud Run 定价
Cloud Run 采用按需付费模式,这意味着只有在应用实际运行时消耗的计算资源才会计费。当您的应用未处理请求时,它可以缩容至 0,从而避免不必要的成本。
定价拆解
截至 2025 年 3 月,Cloud Run 的收费主要基于两个因素:
资源 费用 免费额度 CPU $0.000018 每 vCPU-秒 240,000 vCPU-秒/月 内存 $0.000002 每 GiB-秒 450,000 GiB-秒/月
上述定价适用于基于实例的计费,但在基于请求的计费下工作方式有所不同。不同区域的价格与免费额度也略有差异,请查阅Google Cloud 官方页面 获取准确数字。页面还提供价格计算器帮助您核算成本,并提供承诺使用折扣。
小提示:与同一区域内的其他 Google Cloud 服务之间的流量是免费的,因此在进行数据交换时,尽量使用 Cloud Storage、Cloud SQL 或 Pub/Sub,而非外部服务。
Cloud Run 与 Cloud Run Functions 的比较
Google 提供两种无服务器计算选项:Cloud Run 和 Cloud Run Functions (此前称为 Cloud Functions)。两者都能让您在无需管理基础设施的情况下运行代码,但还是略有不同。
特性 Cloud Run Cloud Functions 执行模型 运行完整的容器化应用 运行独立函数(FaaS 模型) 运行时控制 任意语言、任意框架、自定义二进制 预定义运行时(Node.js、Python、Go 等) 状态 无状态,但可在一次请求内维持连接 无状态,面向事件驱动工作负载 伸缩 按容器实例扩缩 按函数调用扩缩 触发方式 HTTP 请求、Pub/Sub、事件驱动 事件驱动(Pub/Sub、Cloud Storage、HTTP 等) 冷启动 可通过预热实例将其降至最小 扩容时可能有明显延迟 最佳适用 API、微服务、后端服务、AI 工作负载 轻量的事件驱动函数、自动化
何时使用 Cloud Run
✅ 您需要对运行时和依赖进行完全控制。
✅ 您在运行处理持续请求的 Web 服务、API 或微服务。
✅ 您希望以最小改动部署现有的容器化应用。
✅ 您需要后台处理或长时间运行的任务(如 AI 推理、批处理作业)。
何时使用 Cloud Run Functions
✅ 您需要简单的事件驱动函数,可在 Pub/Sub 消息或 Cloud Storage 上传等事件上触发。
✅ 您在处理短时操作,如发送通知、处理小型任务或进行数据转换。
✅ 您不想管理容器,更偏好为 JavaScript、Python、Go 等提供的预构建运行时。
两者并不一定非此即彼,您也可以组合使用!例如,您的 Cloud Run 后端可以触发 Cloud Run Functions 来异步处理发送邮件或图像处理等特定任务。
与其他 Google Cloud 服务的比较
我们已经对 Cloud Run 与 Cloud Run Functions 做了相当深入的比较,但还有另外两个值得一提的 Google Cloud 服务:GKE 和 App Engine。
特性 Cloud Run Google Kubernetes Engine (GKE) App Engine 管理类型 全托管无服务器 自管的 Kubernetes 集群 全托管的平台即服务 伸缩 自动扩缩,可缩至 0 通过 Kubernetes 手动或自动扩缩 自动扩缩(但不能缩至 0) 部署 部署容器(任意语言) 通过 Kubernetes 部署容器 部署代码(支持特定运行时) 使用场景 API、微服务、Web 应用、批处理作业、AI 复杂应用、大规模微服务、ML 工作负载 Web 应用、移动后端、API 支持语言 任意(基于容器) 任意(基于容器) 支持特定运行时
显然其中还有更多细微差别,但简而言之:如果您需要全托管、容器化、自动扩缩且灵活的方案,选 Cloud Run。如果您要以最小配置构建 Web 应用,选 App Engine。而如果您需要对 Kubernetes 集群进行全面控制以构建大规模、复杂应用,则选择 GKE。
Conclusion
现在您已经全面了解 Cloud Run,不妨尝试启动您的第一个实例,或查看其他 Google Cloud 服务,找到最适合您的控制与自动化程度 !
Cloud Run 是 Google Cloud 提供的全托管无服务器平台,允许您在无需操心基础设施管理的情况下部署应用。它具有极强的灵活性,是从个人项目到企业级项目等多种场景的理想之选。
在本文中,我将为您介绍 Cloud Run 是什么、如何工作、能解决哪些使用场景,以及它与其他无服务器解决方案的比较。我还会一步步带您部署您的第一个 Cloud Run 应用!
在开始之前:如果您完全是云计算新手,建议先学习我们的 Introduction to Cloud Computing 课程。该课程会拆解云计算基础,解释诸如可扩展性与延迟等关键术语,并介绍像 GCP 这类提供商的云工具优势。
What is Cloud Run?
Cloud Run 是一个无服务器的容器执行平台,可让您在不必担心基础设施管理的情况下部署应用程序。
在传统的基于服务器的部署中,您通常需要配置并维护虚拟机。Cloud Run 的工作方式略有不同,它将这些细节抽象掉,提供一个全托管的环境。
它基于 Knative(一个开源的 Kubernetes 平台,用于支持无服务器工作负载)构建,这意味着您的应用会根据需求自动扩缩。当流量增加时,Cloud Run 会启动更多实例来处理;当流量下降时,它会缩容,甚至可以缩到 0,这样在应用未实际运行时,您无需支付任何费用。
Cloud Run 不仅成本高效,而且非常灵活。只要能在容器中运行,您就可以部署任意语言、任意框架或二进制程序。无论是常见技术如 Node.js、Python、Go、Java,还是小众技术都可以。实际上,这意味着 Cloud Run 能为后端服务、API、AI 工作负载、Web 应用,甚至是定时批处理任务提供动力。
以上是一个概览。接下来我们更深入地看一下 Cloud Run 的关键特性。
Key Features of Cloud Run
我们刚刚提到了几个特性,下面是 Cloud Run 主要功能的完整概述。
与语言和框架无关
Cloud Run 最大的优势之一是不会将您绑定到某种特定语言或框架。只要您的应用能在容器中运行,就可以部署。如果您的团队技术栈多样,您可以在所有服务中统一使用 Cloud Run——一套工具统筹全局!
自动扩缩
Cloud Run 会根据流量进行横向、动态扩缩。当应用收到更多请求时,Cloud Run 会自动启动更多实例;当需求下降时,它会缩容,必要时甚至缩到 0。
内置安全与合规
Cloud Run 为所有已部署服务自动提供 HTTPS、由 Google 管理的服务身份用于安全认证、用于私有网络的 VPC 连接,以及内置的合规认证,如 SOC 2、ISO 27001 和 HIPAA(适用于医疗保健应用)。简单来说,安全合规方面您可以放心。
与 Google Cloud 服务集成
由于 Cloud Run 是 Google Cloud 生态的一部分,它能与其他 GCP 服务良好协作。您可以轻松将其连接到 Cloud SQL 作为数据库、使用 Pub/Sub 进行数据流处理、将文件存储在 Cloud Storage,或与 BigQuery、Firebase 以及 AI/ML 服务搭配使用。
按需 GPU 支持
对于 AI 工作负载,Cloud Run 现已支持按需 GPU。对于机器学习推理、视频处理和科学计算,这是一大提升,因为它允许您在无需管理底层硬件的情况下运行任何 GPU 加速的工作负载。
Cloud Run Functions:函数即服务(FaaS)模型
如果您不想管理完整的容器,Cloud Run Functions 提供一种简化的、事件驱动的方式来运行小型、单一用途的函数。它类似于 AWS Lambda 或 Google Cloud Functions,但运行在 Cloud Run 的基础设施之上。
How Cloud Run Works: Step-by-Step
本节我将带您将一个简单应用部署到 Cloud Run。我会引导您完成将应用容器化、部署到 Cloud Run,并根据需求自动扩缩的全过程。
我们将使用 Docker 将应用容器化,但并非必须。最后会有更多说明。
Step 1: Set up your environment
在部署任何内容之前,您需要安装以下工具:
Step 2: Write your application code
现在,让我们编写一个简单的 “Hello World” Node.js 应用。
为您的应用创建一个目录:
在该目录下创建一个 index.js 文件,并写入以下内容:
创建一个 package.json 来定义应用的依赖:
应用准备就绪后,我们将继续将其容器化。
Step 3: Containerize the application
创建 Dockerfile 以定义容器镜像
在项目目录中创建名为 “Dockerfile” 的文件,并写入以下内容:
构建 Docker 镜像
运行以下命令来构建 Docker 镜像:
注意:将 your-project-id 替换为您的 Google Cloud 项目 ID。
本地测试镜像
您可以通过运行以下命令在本地测试 Docker 容器:
在浏览器中访问 http://localhost:8080 以验证应用是否正在运行。
Step 4: Push the image to Google Artifact Registry
为您的项目启用 Artifact Registry
如果您尚未启用 Artifact Registry,请运行以下命令
注意:您需要启用结算功能才能完成此步骤!
在 Artifact Registry 中创建存储库
在 Artifact Registry 中创建一个新的 Docker 存储库:
为 Artifact Registry 配置 Docker 身份验证
配置 Docker 以使用 Artifact Registry 进行身份验证:
为 Artifact Registry 标记 Docker 镜像
使用 Artifact Registry 存储库 URL 为 Docker 镜像打标签:
将镜像推送到 Artifact Registry
将已标记的 Docker 镜像推送到您的 Artifact Registry 存储库:
Step 5: Deploy to Cloud Run
当镜像推送到 Artifact Registry 后,您可以直接从 Artifact Registry 将其部署到 Cloud Run。
使用以下命令将镜像部署到 Cloud Run:
运行该命令后,Cloud Run 将部署您的容器化应用,并提供用于访问的 URL。
就这样!到 GCP 控制台查看一下,您应该能看到新实例。
Step 6: Clean up
为避免持续产生费用,请在测试完成后删除服务。
1. 删除 Cloud Run 服务
运行以下命令删除已部署的 Cloud Run 服务:
这会移除 Cloud Run 实例,但不会删除容器镜像。
2. 删除 Artifact Registry 镜像
要从 Artifact Registry 移除镜像,先列出镜像:
然后使用以下命令删除镜像:
至此,您的 Artifact Registry 也清理完成。
3. 删除 Artifact Registry 存储库(如不再需要)
如果您想彻底移除 Artifact Registry 存储库,请运行:
只有在您完全不再需要该存储库时才执行此步骤,否则可以将其复用于后续部署。
4.(可选)删除 Google Cloud 项目
如果这是一个测试项目且您已不再需要它,可以删除整个项目以移除所有相关资源:
Source deployments
还记得我说并不总是需要手动将应用容器化吗?
Cloud Run 现已支持源代码部署,这意味着它可以使用 Cloud Build 从您的源代码为您构建容器。
您可以使用以下命令:
Cloud Build 会自动检测您的应用语言(Node.js、Python、Go、Java 等),为您构建容器镜像并存储到 Artifact Registry。随后 Cloud Run 会像您手动创建容器一样部署该镜像。对于使用受支持语言的简单应用(如 Node.js、Python、Go、Java 等),我强烈建议使用这种方式,但如果您需要对容器进行完全控制(例如自定义依赖、操作系统级调整、多步构建),则不建议使用。
Tips to Use Cloud Run efficiently
将应用部署到 Cloud Run 相当简单,但要让它高效运行则需要进行一些微调。我在最初使用时经历了不少试错,以下是我的经验:
1. 冷启动确实存在
尤其当您的容器镜像较大时更明显。镜像越小,服务启动越快。使用 distroless 等精简基础镜像能显著改善。如果您构建的是 Python 应用,试试官方镜像的 slim 版本。或者,如果您对成本不太敏感,可以将最小实例数设置为 1。
2. 最值得调优的变量是请求并发数
Cloud Run 允许每个实例同时处理多个请求,但默认值(每个容器 80 个请求)往往并不最优。对于 CPU 密集型任务,我发现将并发数降至 1 或 2 会顺畅得多。相反,API 通常可以承受更高的并发。并发数越高,所需的实例数量就越少,因而成本也越低,所以务必多做实验,找出您的应用的最佳平衡点。
3. 一定要设置实例上限!
当有人(比如我)做压测并发起一堆请求时,这非常有用。我已经踩过这个坑了,您就别再踩了。请务必设置最大实例数。
4. 确保只有合适的人能访问您的实例
默认情况下,任何拥有 URL 的人都可以访问 Cloud Run 服务,这对于快速演示很棒,但对于生产环境则未必合适。如果您的应用不该公开访问,请使用 IAM 权限进行加固。
5. Cloud Logging 和 Cloud Trace 会成为您的好伙伴
如果您习惯通过 SSH 登录虚拟机来调试问题,那这次可能会失望。Cloud Run 的日志会直接流向 Google Cloud 控制台,您可以在那儿查看一切。请确保为应用添加结构化日志,这会让排障变得容易得多。
Cloud Run Use Cases
我们已经谈到过一些 Cloud Run 的使用场景,比如运行 Web 应用、API 或定时任务,但显然还有更多。
视频与图像分析
您可以部署图像识别模型,为社交媒体平台实时处理上传的图片,或在视频上传时进行转码。当内容走红、需求激增时,Cloud Run 能通过自动扩缩应对峰值;而在需求较低时,仍能确保成本效率。
来源:Google Cloud
实时流处理
想象您在构建一个监控在线市场用户行为的系统。通过处理来自 Pub/Sub 或 BigQuery 的事件流,您可以基于用户行为即时触发操作,如发送推送通知或实时分析趋势。Cloud Run 会在高峰期自动扩容以处理传入事件,在流量减少时缩容。
来源:Google Cloud
实时文件处理
一个场景是在大型企业中进行实时日志文件分析。每当日志文件上传到 Cloud Storage,Cloud Run 就会触发一个容器来解析文件、运行分析并存储结果,同时还能根据文件大小和处理任务的复杂度动态扩缩。
来源:Google Cloud
无服务器 IoT 后端
Cloud Run 非常适合处理 IoT 应用的后端服务。例如,在一个从数千个传感器采集环境数据的 IoT 方案中,Cloud Run 可以实时处理来自各设备的输入数据。
来源:Google Cloud
Google Cloud Run 定价
Cloud Run 采用按需付费模式,这意味着只有在应用实际运行时消耗的计算资源才会计费。当您的应用未处理请求时,它可以缩容至 0,从而避免不必要的成本。
定价拆解
截至 2025 年 3 月,Cloud Run 的收费主要基于两个因素:
上述定价适用于基于实例的计费,但在基于请求的计费下工作方式有所不同。不同区域的价格与免费额度也略有差异,请查阅Google Cloud 官方页面获取准确数字。页面还提供价格计算器帮助您核算成本,并提供承诺使用折扣。
小提示:与同一区域内的其他 Google Cloud 服务之间的流量是免费的,因此在进行数据交换时,尽量使用 Cloud Storage、Cloud SQL 或 Pub/Sub,而非外部服务。
Cloud Run 与 Cloud Run Functions 的比较
Google 提供两种无服务器计算选项:Cloud Run 和 Cloud Run Functions(此前称为 Cloud Functions)。两者都能让您在无需管理基础设施的情况下运行代码,但还是略有不同。
何时使用 Cloud Run
何时使用 Cloud Run Functions
两者并不一定非此即彼,您也可以组合使用!例如,您的 Cloud Run 后端可以触发 Cloud Run Functions 来异步处理发送邮件或图像处理等特定任务。
与其他 Google Cloud 服务的比较
我们已经对 Cloud Run 与 Cloud Run Functions 做了相当深入的比较,但还有另外两个值得一提的 Google Cloud 服务:GKE 和 App Engine。
显然其中还有更多细微差别,但简而言之:如果您需要全托管、容器化、自动扩缩且灵活的方案,选 Cloud Run。如果您要以最小配置构建 Web 应用,选 App Engine。而如果您需要对 Kubernetes 集群进行全面控制以构建大规模、复杂应用,则选择 GKE。
Conclusion
现在您已经全面了解 Cloud Run,不妨尝试启动您的第一个实例,或查看其他 Google Cloud 服务,找到最适合您的控制与自动化程度!