Serverless 事件驱动架构:Lambda / Step Functions / EventBridge / Saga
Serverless 不只是「不用管服务器」——核心是事件驱动 + 异步编排。这篇是 AWS Lambda + Step Functions + EventBridge + SQS/SNS 的实战组合,以及 Saga 补偿、事件溯源、冷启动优化、PlantUML 时序图画异步链路。
Serverless 全景(AWS)
1 | 事件源 计算 存储/下游 |
Lambda 函数架构
1 | @startuml |
冷启动优化:
- Provisioned Concurrency——预热实例,无冷启动
- 减少部署包大小——Lambda Layer 分离依赖
- SnapStart (Java)——冷启动 < 200ms
- 避免 VPC——VPC ENI 慢,没必要时 Lambda 不放 VPC
- 连接复用——RDS Proxy / DynamoDB SDK 都支持连接池
API Gateway + Lambda 同步调用
1 | @startuml |
API Gateway 超时比 Lambda 短——长任务用异步。
SQS + Lambda 异步解耦
1 | @startuml |
优势:
- 削峰——SQS 缓冲突发请求
- 重试——Lambda 失败,SQS 自动 retry (可见性超时)
- DLQ——多次失败进 Dead Letter Queue
- 解耦——Producer / Consumer 独立部署
EventBridge 总线模式
1 | @startuml |
EventBridge 优势:
- 解耦——发送方不知道谁订阅
- 多目标并行——一个事件触发多个下游
- 跨账号——事件可以跨 AWS account 路由
- SaaS 集成——直接对接 Datadog / Zendesk / PagerDuty
Step Functions 编排长流程
1 | @startuml |
Step Functions 状态机文件(ASL):
1 | { |
优势:
- 可视化——状态机图直接看流程
- 自动 retry——内置 retry 策略
- 错误处理——Catch block 显式处理失败
- 长任务——最长 1 年,支持 wait state
Saga 模式(分布式事务补偿)
1 | @startuml |
Saga 两种实现:
- 编排式(Orchestration)——中央协调器(Step Functions)调用每个 service
- 编舞式(Choreography)——每个 service 监听事件,自己决定下一步
事件溯源(Event Sourcing)
1 | @startuml |
事件溯源 vs 传统 CRUD:
| 传统 CRUD | 事件溯源 | |
|---|---|---|
| 存储 | 当前状态 | 状态变更事件序列 |
| 历史 | 丢失 | 完整 |
| 审计 | 难 | 内置 |
| 调试 | 看当前 + log | 重放事件 |
SNS Fan-Out + SQS 队列扇出
1 | @startuml |
Fan-Out 优势:消息发给多个下游,各自独立消费,不影响。
DynamoDB Streams 触发 Lambda
1 | @startuml |
典型用法:
- 实时索引到 OpenSearch——搜索
- 数据湖 ETL——分析
- 跨区域复制——DR
- 缓存失效——同步 Redis
冷启动优化实战
1 | @startuml |
冷启动基准(典型场景):
- Node.js: 100-300ms
- Python: 200-500ms
- Java: 1-3s (无 SnapStart); 200ms (有 SnapStart)
- .NET: 1-2s
Lambda 调用链可视化(用 PlantUML)
1 | @startuml |
X-Ray / CloudWatch ServiceLens 自动画这种调用链,PlantUML 用于文档化设计。
实战踩坑
- Lambda 单实例并发限制——账户默认 1000,爆量时 throttling。申请提配额或用 SQS 削峰。
- Lambda 超时——同步调用 API Gateway 29s,异步最长 15min。长任务用 Step Functions。
- Step Functions 状态机太大——超过 200 个 state 编译慢。拆成多个 state machine,用 nested execution。
- EventBridge rule 配额——每个 bus 默认 300 rules。跨 bus 路由或合并 rule。
- DLQ 没配置——失败消息无限重试。每个 SQS/EventBridge target 配 DLQ。
- DynamoDB Stream 24h 后丢——超长 lag 数据丢失。用 Kinesis Data Stream 替代。
- 冷启动突袭——白天冷启动延迟大,Provisioned Concurrency 预热。
- VPC Lambda 网络费用——NAT Gateway 数据传出按 GB 收,很贵。VPC Endpoint 走内网,或者 Lambda 不放 VPC。
- 异步调用无响应——Lambda 异步 invoke 不返回结果。用 Destination 配置成功/失败后处理。
决策树
1 | 任务是什么? |
最小 Serverless 起步:API Gateway + Lambda + DynamoDB。加异步:加 SQS。加工作流:加 Step Functions。加解耦:加 EventBridge。
记住:Serverless 不是万能——长任务用 Fargate/EC2,本地开发用 docker-compose。Lambda 是 glue 不是 application server。
- 标题: Serverless 事件驱动架构:Lambda / Step Functions / EventBridge / Saga
- 作者: puml.online
- 创建于 : 2026-07-30 17:50:00
- 更新于 : 2026-08-14 21:34:29
- 链接: https://puml.online/blog/plantuml-serverless-event-driven/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。