1. Serverless 概述

1.1 什么是 Serverless

Serverless(无服务器计算)是一种云原生架构模式,它允许开发者专注于编写业务代码,而无需管理底层服务器、运行时环境或基础设施容量。云服务提供商负责自动分配计算资源、执行代码并按实际消耗计费。

“Serverless”并非真的没有服务器,而是服务器对开发者完全透明——你不再需要关心“我的应用跑在哪台机器上”。

核心认知: Serverless 不是“无服务器”,而是“服务器由平台托管,开发者零运维”。

1.2 核心特征

Serverless 架构由三个不可分割的核心特征构成,它们共同定义了这种范式的本质:

核心特征 定义 对开发者的影响
事件驱动 函数由外部事件触发执行,如 HTTP 请求、文件上传、数据库变更、消息队列消息等。 代码天然解耦,每个函数只响应一个事件,便于独立开发与测试。
按需付费 只为实际执行的计算时间付费,精确到毫秒级;空闲时不产生费用。 大幅降低闲置成本,尤其适合间歇性、突发性工作负载。
自动扩缩容 平台根据请求量自动创建或销毁函数实例,从 0 到数千并发瞬间完成。 无需预置资源,无需配置弹性策略,系统自动适配流量波动。
关键指标: 在传统架构中,即使服务没有请求,服务器也在持续产生费用;Serverless 架构下,空闲时费用趋近于零,扩缩容延迟通常在 100ms–500ms 级别。

1.3 事件驱动架构示意

下图展示了 Serverless 事件驱动模型的核心流程:事件源产生事件,触发函数执行,函数处理后返回结果或调用下游服务。

Serverless 事件驱动架构图 事件源 HTTP 请求 对象存储上传 消息队列 触发 函数计算 执行业务逻辑 自动扩缩容 毫秒级计费 输出 目标服务 数据库写入 消息队列 HTTP 响应 事件驱动模型 事件源 → 函数计算 → 目标服务,三者完全解耦,各自独立扩缩

1.4 与传统架构对比

为了更直观地理解 Serverless 的优势与局限,下表从多个维度对比了传统单体架构、容器化架构与 Serverless 架构:

对比维度 传统单体架构 容器化架构 Serverless 架构
基础设施管理 手动配置服务器、网络、存储 管理容器编排集群(如 K8s) 完全托管,零运维
扩缩容方式 手动或基于阈值自动扩缩,分钟级 自动扩缩,秒级 自动扩缩,毫秒级,支持从 0 开始
计费模型 按固定资源包月/包年 按容器实例运行时长计费 按实际执行次数 × 执行时长(毫秒)
部署粒度 整个应用作为一个部署单元 每个容器一个服务 每个函数一个部署单元
冷启动 无(进程常驻) 低(容器预热) 存在冷启动延迟(100ms–1s)
适合场景 稳定、长周期运行的大型系统 微服务、需要环境一致性的应用 事件处理、API 后端、定时任务、数据处理
调试与测试 本地模拟完整环境 本地容器化测试 依赖模拟器或云环境,本地调试较复杂
注意: Serverless 并非银弹。对于长时间运行(如超过 15 分钟)、高并发且对延迟极度敏感、或需要大量本地状态的应用,传统容器化架构可能更合适。选择架构时需结合业务场景综合评估。

1.5 架构演进对比图

下面的 SVG 图从部署与运维视角,直观对比传统架构与 Serverless 架构在职责边界上的差异:

传统架构 vs Serverless 架构职责对比 传统架构 应用代码 运行时环境 操作系统 服务器硬件 网络 / 存储 / 安全 ← 开发者管理全部 → Serverless 架构 应用代码(函数) 云平台托管 运行时环境(自动管理) 操作系统(自动管理) 服务器硬件(自动管理) 网络 / 存储 / 安全(自动管理) ← 开发者只关注代码 →

1.6 何时选择 Serverless

根据上述对比,以下场景特别适合采用 Serverless 架构:

  • 间歇性或不可预测的工作负载: 如定时任务、Webhook 处理、IoT 数据上报。
  • 事件驱动的数据处理管道: 如图片转码、日志分析、实时流处理。
  • 轻量级 API 后端: 移动端或前端应用的 RESTful 接口。
  • 快速原型与 MVP: 无需预置基础设施,快速验证业务想法。
  • 弹性需求极高的场景: 秒杀、抢购、突发流量,平台自动扩缩至数千并发。