具有必须配对的异步输入的 AWS 事件驱动批处理

AWS Event Driven Batch w/ Asynchronous Inputs That must be paired

我有数据进入两个 DynamoDB 表。我们称它们为 Widgets 和 Kerfuffles。每个 Widget "has a" 个 Kerfuffle,但一个 Kerfuffle 可以属于多个 Widget。现在通常,我会说我可以使用 DDB Streams 启动 lambda 以将我的 Widget-Kerfuffle 对发布到 SNS。然而,Widgets 和它们的 Kerfuffles 不一定一起出现。事实上,Kerfuffle 可能会在 Widget 之前或之后 5-10 分钟到达。

所以我似乎不能只在 Widget 或正在创建的 Kerfuffle 上有一个 lambda 触发器,因为另一半可能不存在(而且我也不想发送重复的 Widgets)。

关于如何处理这个问题有什么建议吗?

打字很难。让 widget = A 和 kerfuffle = B.

  1. 实时:您处理新 AB 的通知。对于每个 A 通知,您检查是否存在 B。如果没有停止。否则,处理 A。对于每个 B 通知,您 收集所有存在的 A 匹配它 ,并处理它们。请注意,如果你想避免多次处理 A,如果它们触发非常接近它们的 B 并且两个过程都成功,你需要在此处进行某种锁定。

  2. 近实时:每隔一段时间(每 t 分钟),找出所有 A 未被处理的。处理所有具有匹配 B 的那些,并将那些 A 标记为已处理。

权衡:

方法一:

  • 您处理了一堆实际上无关紧要的通知,因为您无法对还没有 BA 采取行动。
  • 你增加了处理两个独立流的复杂性,这会相互干扰,除非你保持单线程处理。

方法二:

  • 您延迟处理 t 分钟。这可能无关紧要或 极其不切实际,具体取决于您的应用程序。