事件驱动应用

在 AWS 上开发应用

Ricardo Sueiras

Principal Technologist

什么是事件?

 

事件 vs 消息

  • 消息是在组件间发送的工作单元。
  • 事件记录已经发生的事情。
  • 服务通过发布事件进行通信。
  • 其他服务独立地对这些事件做出反应。
  • 解耦可减少依赖并提升可扩展性。
在 AWS 上开发应用

事件生产者

 

事件生产者

  • 当发生操作时,生产者创建并发布事件。
  • AWS 服务和自定义应用都能产生事件。
  • 将文件上传到 Amazon S3 就是一个例子。
  • 随后 Amazon S3 会发出对象创建事件。
在 AWS 上开发应用

事件消费者

 

事件消费者

  • 消费者异步接收并处理事件。
  • 事件源使用不同的投递模型。
  • 推送式:事件实时投递。
  • 轮询式:消费者轮询时再获取事件。
在 AWS 上开发应用

事件源映射

  • AWS Lambda 是常见的事件消费者。
  • 它会自动轮询源并成批获取记录。

 

事件源映射

在 AWS 上开发应用

调优 Lambda 事件源映射

  • 调优事件源映射以提升吞吐量。
  • 调整批大小以控制每次调用的记录数。
  • 为失败记录配置重试控制。
  • 在受支持的源上使用部分批响应。
  • ReportBatchItemFailures 可避免重处理已成功的记录。

 

事件源映射

在 AWS 上开发应用

Amazon EventBridge

  • EventBridge 在服务与应用间路由事件。
  • 它实现动态路由而无需紧耦合服务。
  • 应用将其事件发布到 EventBridge。
  • 路由规则决定每个事件的目标。

 

EventBridge

在 AWS 上开发应用

EventBridge 能力

 

功能

  • EventBridge 提供多种路由能力。
  • 规则可将一个事件广播到多个目标。
  • 定时规则免去维护 cron 服务器。
  • 计划支持 rate()at()cron() 表达式。
  • Pipes 提供点对点集成。
  • Pipes 还支持过滤与转换。
在 AWS 上开发应用

事件总线

 

事件总线

  • 不同事件总线可优化事件路由方式。
  • 默认总线接收来自 AWS 服务的事件。
  • 自定义总线承载应用特定事件。
  • 合作伙伴总线接收第三方提供商的事件。
  • 规则位于每个总线与其目标之间。
在 AWS 上开发应用

架构发现

 

事件架构与注册表

  • 生产者与消费者常常独立演进。
  • 理解事件结构至关重要。
  • 架构发现可捕获传入事件的结构。
  • 用它检查事件负载。
  • 用它校验集成。
  • 用它为受支持语言生成绑定。
在 AWS 上开发应用

架构注册表

  • 架构注册表存储您的事件架构。
  • 它帮助开发者理解结构并生成绑定。

 

事件架构与注册表

在 AWS 上开发应用

事件过滤

  • 过滤可减少不必要的处理。
  • 用 JSON 事件模式定义匹配。
  • 模式仅匹配您需要的特定事件。
  • 下游系统仅处理相关事件。

 

事件过滤

在 AWS 上开发应用

事件排序

  • 事件顺序并非总能保证。
  • 某些服务可能乱序处理事件。
  • 使用顺序控制显式保证序列。

 

事件排序

在 AWS 上开发应用

事件归档与回放

 

归档与回放

  • EventBridge 可归档并在后续回放事件。
  • 回放事件以从故障中恢复。
  • 回放事件以测试新消费者。
  • 回放事件以重建下游系统。
在 AWS 上开发应用

错误处理

 

错误处理

  • 事件驱动应用必须安全处理错误。
  • 失败情况包括重复事件、
    • 处理失败、
    • 消费者不可用。
  • 尽可能将消费者设计为幂等。
在 AWS 上开发应用

DLQ 与目标路由

 

错误处理

  • 使用 DLQ 隔离反复失败的事件。
  • 在 EventBridge 中,DLQ 按规则目标配置,而非按函数。
  • Lambda Destinations 可扩展该路由。
  • Destinations 可路由成功与失败结果。
在 AWS 上开发应用

测试与验证事件

  • 测试事件驱动应用可验证路由。
  • 也可验证事件过滤。
  • 也可验证重试。
  • 并确认分布式系统中的处理。
  • 使用 AWS SAM 生成示例测试事件。
  • 示例事件复现精确的 JSON 输出。

 

测试

在 AWS 上开发应用

测试要点

  • SAM 允许您在部署前本地测试。
  • 验证事件模式匹配。
  • 验证重试行为。
  • 验证限流场景。
  • 验证重复事件投递。
  • 验证幂等消费者行为。

 

测试

在 AWS 上开发应用

让我们一起练习吧!

在 AWS 上开发应用

Preparing Video For Download...