AWS Lambda

无需管理服务器即可运行代码的无服务器计算服务,采用基于请求数和执行时间的完全按量计费模式

概述

AWS Lambda 是一项无需预置或管理服务器即可运行代码的无服务器计算服务。以 S3 文件上传、API Gateway HTTP 请求、DynamoDB 数据变更等 200 多项 AWS 服务的事件为触发器自动执行函数。支持 Python、Node.js、Java、Go、.NET 等主流运行时,也可通过容器镜像部署。永久提供每月 100 万次请求和 40 万 GB 秒的免费额度,小规模应用可实质免费运行。执行时间上限为 15 分钟,内存最大可设置为 10 GB。

同步、异步与事件源映射的选型

Lambda 有三种调用模型,需根据工作负载特性选择。同步调用的典型场景是通过 API Gateway 的 HTTP 请求,调用方等待响应。延迟直接影响用户体验,因此抑制冷启动很重要。异步调用用于 S3 事件通知或 SNS 主题触发,Lambda 将事件放入队列后依次处理。失败时自动重试最多 2 次,仍然失败则可发送到死信队列 (SQS 或 SNS)。事件源映射是从 SQS 队列或 Kinesis 流批量获取消息的方式,通过调整批量大小和批量窗口来控制吞吐量与成本的平衡。并发执行数默认为每区域 1,000,通过提升请求可扩展到数万。

冷启动的原因与对策

冷启动是函数执行环境新建时产生的数百毫秒到数秒延迟。原因在于运行时初始化、部署包展开、函数代码外的初始化处理 (如建立数据库连接)。最可靠的对策是预置并发 (Provisioned Concurrency),预先预热指定数量的执行环境可完全消除冷启动。但等待期间也会计费,因此合理做法是仅限于延迟要求严格的场景 (如持续有流量的 API 后端)。Java 运行时可使用 SnapStart 功能,从已初始化的快照恢复可将冷启动时间缩短最多 90%。Azure Functions 也面临类似的冷启动问题,但没有 SnapStart 等效功能,主要对策是 Premium 计划的常时预热。此外 Azure Functions 按量计费计划的执行时间上限默认为 10 分钟,而 Lambda 允许 15 分钟。无服务器开发书籍 (Amazon) 详细介绍了这类性能调优的实践案例。

与 Step Functions 的联动及部署策略

对于单个 Lambda 函数无法完成的工作流,Step Functions 非常有效。可定义将多个 Lambda 函数以顺序控制、并行执行、条件分支、错误处理方式编排的状态机,重试策略和超时也可声明式配置。例如图片上传后「生成缩略图 → 提取元数据 → 写入数据库 → 发送通知」作为一系列工作流管理是典型场景。部署推荐使用 AWS SAM 或 Serverless Framework 进行 IaC 管理。在 SAM 模板中统一定义 Lambda 函数、API GatewayDynamoDB 表,纳入 CI/CD 管道可实现从代码变更到部署的自动化。利用函数版本控制和别名,还可实现金丝雀部署或蓝绿部署。

共有するXB!