处理事件生命周期:重试、DLQ 与目的地
使用 AWS Lambda 构建无服务器应用
Claudio Canales
Senior DevOps Engineer
事件生命周期一览
- Lambda 调用您的处理器。
- 处理器要么成功,要么失败。
- 失败时,由重试与路由决定后续。
失败出现的两种方式
同步
异步
- 先确认调用方。
- Lambda 在后台重试。
- 失败处理取决于调用模式。
重试是常态
- 重试往往是特性,而非缺陷。
- 瞬时失败可能下次尝试成功。
- 重试会造成重复处理;处理器必须应对。
随时间的重试
- 重试可修复瞬时问题。
- 但同一事件可能被多次运行。
- 需要幂等性与清晰的错误处理。
重试何时危险
- 当工作非幂等时,重试有风险。
- 例:扣款、发送邮件。
- 使用幂等键与安全更新,避免重复造成损害。
DLQ(死信队列)
- 重试后仍失败事件的安全去处。
- 通常为 SQS 队列,AWS 的托管消息队列。
- 检查负载,修复问题,然后重新驱动。
目的地:成功与失败路由
- 成功时,将结果发送到
onSuccess。
- 失败时,将详情发送到
onFailure。
- 使下一步明确。
调优重试策略
- 调整 Lambda 重试次数。
- 限制事件最大年龄,避免处理陈旧数据。
- 更多重试提可靠性,但会增重复与延迟。
最大事件年龄:到期日
- 最大事件年龄是一种过期策略。
- 事件过旧时,处理可能无意义。
- 取舍:更少延迟事件,更及时行为。
可观测性:看哪里
- 日志回答发生了什么。
- 指标回答发生频率。
- 告警帮助快速发现峰值。
如何处理失败事件
- 检查负载与错误。
- 修复根因。
- 重新驱动事件,并监控错误与吞吐。
要点回顾
- 可靠性来自重试、路由与可观测性。
- 同步错误返回给调用方。
- 异步错误需重试加 DLQ 或目的地。
- 保持失败可见。
让我们来练习!
使用 AWS Lambda 构建无服务器应用
Preparing Video For Download...