实施部分批处理响应的最佳实践 - AWS 规范性指导

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

实施部分批处理响应的最佳实践

以下是为 Amazon SQS 事件源配置部分批处理响应的最佳实践:

注意

要跟踪使用部分批处理的应用程序的整体性能,需要使用代码级性能跟踪。配置部分批处理后,无论批处理的结果如何,Lambda 函数的调用几乎总是成功的。

避免 snowball 反模式

Lambda 和 Amazon SQS 无法控制上游微服务写入 Amazon SQS 队列的消息。如果存在无法处理的消息,Lambda 会将这些未处理的消息返回到源 Amazon SQS 队列,除非配置了单独的死信队列。然后,Lambda 函数会在接下来的每个 Amazon SQS 消息批处理中重试这些未处理的消息,失败后返回到队列进行重试。如果不存在死信队列,则返回到 Amazon SQS 队列的未处理消息数量最终会超过队列中的有效消息数量。

这种类型的 snowball 反模式(每次连续调用 Lambda 函数都会使问题变得更糟)可能会导致以下问题:

  • 用户体验不佳,因为任务处理时间比平时长得多,或者根本不处理

  • 成本增加,与 Amazon SQS 队列中呈指数增长的消息数量和消息重试次数成正比

  • 如果函数对其调用请求没有限制,则会降低应用程序或整个 AWS 账户的 Lambda 计算能力

为了避免在 Amazon SQS 中配置部分批处理响应时产生 snowball 反模式,最好再创建一个死信队列。这个单独的队列可以存储未成功处理的消息,并帮助您更好地管理应用程序未处理消息的生命周期。

有关说明,请参阅 Amazon SQS Developer Guide 中的 Configuring a dead-letter queue (console)