事件驱动应用
在 AWS 上开发应用
Ricardo Sueiras
Principal Technologist
什么是事件?
- 消息是在组件间发送的工作单元。
- 事件记录已经发生的事情。
- 服务通过发布事件进行通信。
- 其他服务独立地对这些事件做出反应。
- 解耦可减少依赖并提升可扩展性。
事件生产者
- 当发生操作时,生产者创建并发布事件。
- AWS 服务和自定义应用都能产生事件。
- 将文件上传到 Amazon S3 就是一个例子。
- 随后 Amazon S3 会发出对象创建事件。
事件消费者
- 消费者异步接收并处理事件。
- 事件源使用不同的投递模型。
- 推送式:事件实时投递。
- 轮询式:消费者轮询时再获取事件。
事件源映射
- AWS Lambda 是常见的事件消费者。
- 它会自动轮询源并成批获取记录。
调优 Lambda 事件源映射
- 调优事件源映射以提升吞吐量。
- 调整批大小以控制每次调用的记录数。
- 为失败记录配置重试控制。
- 在受支持的源上使用部分批响应。
ReportBatchItemFailures 可避免重处理已成功的记录。
Amazon EventBridge
- EventBridge 在服务与应用间路由事件。
- 它实现动态路由而无需紧耦合服务。
- 应用将其事件发布到 EventBridge。
- 路由规则决定每个事件的目标。
EventBridge 能力
- EventBridge 提供多种路由能力。
- 规则可将一个事件广播到多个目标。
- 定时规则免去维护 cron 服务器。
- 计划支持
rate()、at() 和 cron() 表达式。
- Pipes 提供点对点集成。
- Pipes 还支持过滤与转换。
事件总线
- 不同事件总线可优化事件路由方式。
- 默认总线接收来自 AWS 服务的事件。
- 自定义总线承载应用特定事件。
- 合作伙伴总线接收第三方提供商的事件。
- 规则位于每个总线与其目标之间。
架构发现
- 生产者与消费者常常独立演进。
- 理解事件结构至关重要。
- 架构发现可捕获传入事件的结构。
- 用它检查事件负载。
- 用它校验集成。
- 用它为受支持语言生成绑定。
架构注册表
- 架构注册表存储您的事件架构。
- 它帮助开发者理解结构并生成绑定。
事件过滤
- 过滤可减少不必要的处理。
- 用 JSON 事件模式定义匹配。
- 模式仅匹配您需要的特定事件。
- 下游系统仅处理相关事件。
事件排序
- 事件顺序并非总能保证。
- 某些服务可能乱序处理事件。
- 使用顺序控制显式保证序列。
事件归档与回放
- EventBridge 可归档并在后续回放事件。
- 回放事件以从故障中恢复。
- 回放事件以测试新消费者。
- 回放事件以重建下游系统。
错误处理
- 事件驱动应用必须安全处理错误。
- 失败情况包括重复事件、
- 尽可能将消费者设计为幂等。
DLQ 与目标路由
- 使用 DLQ 隔离反复失败的事件。
- 在 EventBridge 中,DLQ 按规则目标配置,而非按函数。
- Lambda Destinations 可扩展该路由。
- Destinations 可路由成功与失败结果。
测试与验证事件
- 测试事件驱动应用可验证路由。
- 也可验证事件过滤。
- 也可验证重试。
- 并确认分布式系统中的处理。
- 使用 AWS SAM 生成示例测试事件。
- 示例事件复现精确的 JSON 输出。
测试要点
- SAM 允许您在部署前本地测试。
- 验证事件模式匹配。
- 验证重试行为。
- 验证限流场景。
- 验证重复事件投递。
- 验证幂等消费者行为。
Preparing Video For Download...