AWS Lambda - 如何识别重复消息

AWS Lambda - how to identify duplicate messages

由于 AWS Lambda 的几个触发器只能保证消息传递 "at least once"(QoS=1 的 SQS 和 IoT),我想知道识别重复消息并忽略它的最佳方法是什么。

我可以看到我目前收到了几条重复的消息,触发了我的 lambda 两次,结果导致噪音和无效数据。

在我的客户端中,我通过存储我处理过的消息 ID 列表来解决它,但在 Lambdas 中,我无处存储状态。

当然我可以维护一个已处理消息 ID 的数据库 table,但对我来说这似乎有点过分(并且可能会向 lambda 表达式添加额外的计费运行时间)。内存中一个简单的 key/value 存储服务就足够了。

你们还使用了哪些其他解决方案?

我知道您不想使用数据库,但 dynamodb 可以很好地处理这种事情。如果您有一些东西可以用作好的分区键,那么它的性能仍然会很高。它仍然会为您的 lambda 运行 时间增加非常少量的时间,当然,您需要为您的 dynamodb 容量和数据付费。我成功地使用它来丢弃重复的消息。

另一件可能值得研究的事情是 elasticache,它有 memcached 和 redis 版本。这会更快 - 如果性能是特别关注的 - 但不像 DynamoDB 那样持久。