处理事件生命周期:重试、DLQ 与目的地

使用 AWS Lambda 构建无服务器应用

Claudio Canales

Senior DevOps Engineer

事件生命周期一览

  • Lambda 调用您的处理器。
  • 处理器要么成功,要么失败。
  • 失败时,由重试与路由决定后续。

事件生命周期流程

使用 AWS Lambda 构建无服务器应用

失败出现的两种方式

同步

  • 调用方等待并接收错误响应。

异步

  • 先确认调用方。
  • Lambda 在后台重试。
  • 失败处理取决于调用模式。

同步 vs 异步失败路径

使用 AWS Lambda 构建无服务器应用

重试是常态

  • 重试往往是特性,而非缺陷。
  • 瞬时失败可能下次尝试成功。
  • 重试会造成重复处理;处理器必须应对。

重试重拨类比

使用 AWS Lambda 构建无服务器应用

随时间的重试

  • 重试可修复瞬时问题。
  • 但同一事件可能被多次运行。
  • 需要幂等性与清晰的错误处理。

重试尝试时间线

使用 AWS Lambda 构建无服务器应用

重试何时危险

  • 当工作非幂等时,重试有风险。
  • 例:扣款、发送邮件。
  • 使用幂等键与安全更新,避免重复造成损害。

幂等性目标

使用 AWS Lambda 构建无服务器应用

DLQ(死信队列)

  • 重试后仍失败事件的安全去处。
  • 通常为 SQS 队列,AWS 的托管消息队列。
  • 检查负载,修复问题,然后重新驱动。

DLQ 失物招领类比

使用 AWS Lambda 构建无服务器应用

DLQ 与目的地

DLQ 失物招领类比

  • 捕获重试后仍失败的事件。
  • 用于调查。

目的地路由图

  • 按成功或失败路由结果。
  • 明确构建成功与失败路径。
使用 AWS Lambda 构建无服务器应用

目的地:成功与失败路由

  • 成功时,将结果发送到 onSuccess
  • 失败时,将详情发送到 onFailure
  • 使下一步明确。

目的地路由图

使用 AWS Lambda 构建无服务器应用

调优重试策略

  • 调整 Lambda 重试次数。
  • 限制事件最大年龄,避免处理陈旧数据。
  • 更多重试提可靠性,但会增重复与延迟。

重试策略控制

使用 AWS Lambda 构建无服务器应用

最大事件年龄:到期日

  • 最大事件年龄是一种过期策略。
  • 事件过旧时,处理可能无意义。
  • 取舍:更少延迟事件,更及时行为。

事件年龄到期类比

使用 AWS Lambda 构建无服务器应用

可观测性:看哪里

  • 日志回答发生了什么。
  • 指标回答发生频率。
  • 告警帮助快速发现峰值。

日志 vs 指标

使用 AWS Lambda 构建无服务器应用

如何处理失败事件

  • 检查负载与错误。
  • 修复根因。
  • 重新驱动事件,并监控错误与吞吐。

失败事件恢复循环

使用 AWS Lambda 构建无服务器应用

要点回顾

  • 可靠性来自重试、路由与可观测性。
  • 同步错误返回给调用方。
  • 异步错误需重试加 DLQ 或目的地。
  • 保持失败可见。

可靠性公式图

使用 AWS Lambda 构建无服务器应用

让我们来练习!

使用 AWS Lambda 构建无服务器应用

Preparing Video For Download...