什么是无服务器?

无服务器计算是应用开发领域的一种范式转变,使开发者可以专注于编写代码,而无需操心基础架构。与传统计算相比,它具有众多优势,包括无需管理服务器、无需提前预配、可以自动扩缩,并且只需为使用的资源付费。这些优势使得无服务器模式非常适合无状态 HTTP 应用、Web 应用、移动应用、物联网后端、批量与流式数据处理、聊天机器人等使用场景。


GCP 无服务器计算产品组合

Cloud Functions

无服务器函数和事件

Cloud Functions

事件驱动型计算平台,可轻松连接并扩展 Google 及第三方云服务,并可构建规模能够从零扩大到全球范围的应用。

了解详情 
App Engine 标准环境

无服务器 HTTP 应用

App Engine 标准环境

适用于 Web 和 API 后端的全托管式无服务器应用平台。使用常用的开发语言,而无需操心基础架构管理。

了解详情 
Cloud Run

无服务器容器

Cloud Run

一个无服务器计算平台,供您运行可通过 HTTP 请求调用的无状态容器。Cloud Run 是一种只需按实际用量付费的全托管式平台,也可用作 GKE 插件。

了解详情 

哪种无服务器计算平台适合您?

无服务器方案

* App Engine 标准环境支持 Node.js、Python、Java、Go、PHP

* Cloud Functions 支持 Node.js、Python、Go

使用场景

Web 应用

Web 应用

App Engine 标准环境适合 Node.js、Python、PHP、Java 和 Go 环境中运行的只需极少运维工作的 Web 应用。您可以使用任何语言库以标准、惯用的方式编写应用。快捷的部署速度以及可扩缩的响应能力使得 App Engine 标准环境非常适合峰值工作负载。

异步后端处理

异步后端处理

Cloud Functions 可响应云端数据事件,并执行轻量级处理工作,例如调整上传到 Cloud Storage 的图片大小,或在 Firestore 数据库中的值被修改后对数据进行验证。

移动后端

移动后端

对于移动应用的传统 REST API 后端而言,App Engine 标准环境是一个可监控、更新和扩缩托管环境的应用平台;您只需要编写移动后端服务代码。Firebase 提供了一套功能强大的后端服务,这些服务可直接集成到您的移动应用中,其中包括实时 NoSQL 数据库、身份验证、托管、文件存储等。Firebase 可与 Cloud Functions 相集成,这有助于您轻松地连接其他 Google Cloud Platform 服务。

API

API

如果您要构建简单的 API(可通过 HTTP 或 Cloud Pub/Sub 访问的一小组函数),建议您使用 Cloud Functions。它专为突发性工作负载而设计,其编程范式(函数)有助于确保小规模的后端代码井井有条。如果要构建更复杂的 API(例如,具有大量处理路径的 REST API),则建议您使用 App Engine 标准环境,因为它可以更轻松地组织众多函数。如果您要使用 Cloud Endpoints 来进行 API 管理,建议您使用适用于 Python 2.7 和 Java 8 的 App Engine 标准环境,因为该环境支持 Cloud Endpoints。

定期操作

定期操作

Cloud Scheduler 可以发送预先安排好的 HTTP 请求,以便按预定的时间表触发操作。它还可以专门定向到 App Engine 或 HTTP 端点(例如 Cloud Functions 和 Cloud Run)。

快速原型设计与 API 拼接

快速原型设计与 API 拼接

对于涉及快速原型设计和/或需要拼接多个 API 和服务的小型项目或“黑客马拉松”项目,建议您使用 Cloud Functions。其编程范式让您可以快速开发小型应用和/或用来拼接现有 API 和服务的“粘合代码”。

运行与提供商无关的容器

运行与提供商无关的容器

Docker 容器是一种行业标准,可在任何云端或本地环境运行。Cloud Run 能够以无服务器请求/响应模式运行容器。建议您使用 Cloud Run;不过,如果您需要 GPU 等自定义硬件或 Kubernetes 集群,则可以在您的 Google Kubernetes Engine 集群中运行 Cloud Run on GKE。

混合运行无服务器工作负载和有状态工作负载

混合运行无服务器工作负载和有状态工作负载

借助 Cloud Run on GKE,您可以轻松地混合运行无服务器工作负载和有状态工作负载。例如,您可以从 Marketplace 将 MongoDB 部署到 GKE 集群中,以用作无服务器工作负载的文档存储区。GKE 可让您灵活地在集群中运行任何工作负载,同时您可以使用 Cloud Run 来部署无服务器工作负载。

产品比较

App Engine 标准环境 Cloud Functions Cloud Run(测试版)1 Cloud Run on GKE(测试版)1
部署工件 应用 函数 容器 容器
缩减至零 检查 检查 检查 Pod2
免费层级 检查 检查 检查
Websocket 检查
语言 Java、Node.js、Python、Go、PHP Node.js、Python、Go 不限 不限
访问权限控制 Oauth 2.0、CICP、Firebase 身份验证、Google 登录、Users API 调用方 IAM 权限 调用方 IAM 权限、CICP、Google 登录、Firebase 身份验证 仅限集群,仅限 VPC
HTTP/2 和 gRPC 检查
自定义网域 检查 检查 检查
请求超时 1 分钟3 9 分钟 15 分钟 15 分钟
GPU 和 TPU 检查
VPC 连接 检查测试版1 计划中 检查

1. 测试版软件没有服务等级协议 (SLA)

2. Cloud Run on GKE 可将 Pod 数缩减至零。每个集群的节点数不能缩减至零。即使系统未处理请求,仍会对这些节点收费。

3. 自动扩缩:HTTP 请求的时限为 60 秒。

高级提示与最佳做法

下面列出了您可能需要考虑的其他一些因素。

如果您的架构中包含非自动扩缩组件或非无服务器组件,则自动扩缩的组件可能会使这些组件过载。您可以使用一个 Cloud Pub/Sub 主题,并在 Cloud Functions 中设置 max_instances 属性,以便将对非自动扩缩组件的调用排入队列。
许多 GCP 产品都有一个免费层级,可涵盖轻量级低流量应用的大部分(如果不是全部)资源用量。您可以轻松地使用 Cloud Functions 来配置计费限额。
如需了解详情,请参阅此教程
Cloud Functions 被设计为每个实例只能处理一个请求,这样可确保每个请求都可充分使用该实例分配到的计算资源和内存。这可能会拖慢 Cloud Functions 的扩缩速度。而对于 App Engine 标准环境、Cloud Run 和 Cloud Run on GKE,每个实例可以处理多个并发请求。由于每个实例可以处理更多的流量,因此这些服务可以更快速地进行扩缩,但每个实例中的所有请求必须共享资源。
Cloud Run 兼容 Knative 开源 API 和运行时环境。因此您可以在 Cloud Run、Cloud Run on GKE 和您自己的 Kubernetes 集群之间转移无服务器工作负载。您甚至可以先在 Cloud Run 上运行工作负载,并在需要特定 GKE 功能(例如自定义机器类型或 VPC 访问权限)时转而使用 Cloud Run on GKE。