1. Serverless 概述
1.1 什么是 Serverless
Serverless(无服务器计算)是一种云原生架构模式,它允许开发者专注于编写业务代码,而无需管理底层服务器、运行时环境或基础设施容量。云服务提供商负责自动分配计算资源、执行代码并按实际消耗计费。
“Serverless”并非真的没有服务器,而是服务器对开发者完全透明——你不再需要关心“我的应用跑在哪台机器上”。
核心认知: Serverless 不是“无服务器”,而是“服务器由平台托管,开发者零运维”。
1.2 核心特征
Serverless 架构由三个不可分割的核心特征构成,它们共同定义了这种范式的本质:
| 核心特征 | 定义 | 对开发者的影响 |
|---|---|---|
| 事件驱动 | 函数由外部事件触发执行,如 HTTP 请求、文件上传、数据库变更、消息队列消息等。 | 代码天然解耦,每个函数只响应一个事件,便于独立开发与测试。 |
| 按需付费 | 只为实际执行的计算时间付费,精确到毫秒级;空闲时不产生费用。 | 大幅降低闲置成本,尤其适合间歇性、突发性工作负载。 |
| 自动扩缩容 | 平台根据请求量自动创建或销毁函数实例,从 0 到数千并发瞬间完成。 | 无需预置资源,无需配置弹性策略,系统自动适配流量波动。 |
关键指标: 在传统架构中,即使服务没有请求,服务器也在持续产生费用;Serverless 架构下,空闲时费用趋近于零,扩缩容延迟通常在 100ms–500ms 级别。
1.3 事件驱动架构示意
下图展示了 Serverless 事件驱动模型的核心流程:事件源产生事件,触发函数执行,函数处理后返回结果或调用下游服务。
1.4 与传统架构对比
为了更直观地理解 Serverless 的优势与局限,下表从多个维度对比了传统单体架构、容器化架构与 Serverless 架构:
| 对比维度 | 传统单体架构 | 容器化架构 | Serverless 架构 |
|---|---|---|---|
| 基础设施管理 | 手动配置服务器、网络、存储 | 管理容器编排集群(如 K8s) | 完全托管,零运维 |
| 扩缩容方式 | 手动或基于阈值自动扩缩,分钟级 | 自动扩缩,秒级 | 自动扩缩,毫秒级,支持从 0 开始 |
| 计费模型 | 按固定资源包月/包年 | 按容器实例运行时长计费 | 按实际执行次数 × 执行时长(毫秒) |
| 部署粒度 | 整个应用作为一个部署单元 | 每个容器一个服务 | 每个函数一个部署单元 |
| 冷启动 | 无(进程常驻) | 低(容器预热) | 存在冷启动延迟(100ms–1s) |
| 适合场景 | 稳定、长周期运行的大型系统 | 微服务、需要环境一致性的应用 | 事件处理、API 后端、定时任务、数据处理 |
| 调试与测试 | 本地模拟完整环境 | 本地容器化测试 | 依赖模拟器或云环境,本地调试较复杂 |
注意: Serverless 并非银弹。对于长时间运行(如超过 15 分钟)、高并发且对延迟极度敏感、或需要大量本地状态的应用,传统容器化架构可能更合适。选择架构时需结合业务场景综合评估。
1.5 架构演进对比图
下面的 SVG 图从部署与运维视角,直观对比传统架构与 Serverless 架构在职责边界上的差异:
1.6 何时选择 Serverless
根据上述对比,以下场景特别适合采用 Serverless 架构:
- 间歇性或不可预测的工作负载: 如定时任务、Webhook 处理、IoT 数据上报。
- 事件驱动的数据处理管道: 如图片转码、日志分析、实时流处理。
- 轻量级 API 后端: 移动端或前端应用的 RESTful 接口。
- 快速原型与 MVP: 无需预置基础设施,快速验证业务想法。
- 弹性需求极高的场景: 秒杀、抢购、突发流量,平台自动扩缩至数千并发。