我们的前端应用程序将用户操作发送到 API 网关后面的 lambda 函数,然后该函数将这些操作存储在 dynamodb 中。
然后我们使用 dynamodb 流来触发一个单独的 lambda 函数,该函数将在 dynamodb 中解析这些操作并决定用户的操作是否应该导致发送任何通知(我们称之为通知事件)。
例如,如果用户在我们的应用程序中发表评论,我们将在 dynamodb 中存储“CREATED_COMMENT”操作,然后通过 dynamodb 流触发新的 lambda。然后新的 lambda 可能会创建一个“电子邮件通知事件”,我们可能会将其发送给像 customer.io 这样的电子邮件提供商
但是,我们的用户告诉我们,他们太频繁地收到电子邮件,因此我们希望开始发送电子邮件摘要,将一段时间内的多个操作汇总到一封电子邮件中,而不是为每个操作发送一封电子邮件。
我们的想法是使用诸如 AWS EventBridge、Kinesis、Step Functions 甚至 DynamoDB 流之类的东西来重新发送 dynamodb 流操作,然后将新流的事件配置为按电子邮件地址分组,并为这些事件进行去抖动例如10分钟。如果用户随后执行了新操作,则该用户的流将继续收集另外 10 分钟的操作,直到该用户在 10 分钟内没有新操作。一旦发生这种情况,流将“释放”所有收集到的 Action 并调用 lambda 函数。然后我们的 lambda 函数将生成电子邮件通知事件并将其发送到例如客户.io.
但是,我们一直无法在上述任何 AWS 流服务中找到此类分组和去抖动刷新配置。对于消化(或汇总)这样常见的事情,难道不应该有一种无服务器方法来做到这一点而不必编写我们自己的排队服务吗?
最佳答案
对我来说,答案似乎是使用诸如 SQS 之类的工具。 SQS 将允许您将消息累积到一个队列中,然后每 x 分钟您就可以使用 Lambda 函数读取队列以针对计划事件执行此操作。您不需要由 SQS 触发 Lambda,并且仍然可以从 Lambda 内部“手动”读取队列。
关于amazon-web-services - 如何在按 key 分组的 AWS 上对事件进行去抖动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62544781/