Page 1 of 1

DynamoDB TTL 设置为 3 天

Posted: Sat Mar 22, 2025 9:53 am
by Aklima@444
下游 Webhook 工作器/处理器
因此,Lambda 函数一直在延迟时间的情况下将消息推送到 SQS 并更新 DynamoDB 中的行。下游工作者做什么?他们的角色相当简单:

延迟计时器到期后,当前窗口的所有消息都会在队列中可见。
工作人员读取所有这些并提取消息属性,即 DynamoDB 键
查询 DynamoDB 中的键,并执行“消息 ID 字段是否等于当前正在读取的消息 ID”的简单比较
如果 DynamoDB 中的 ID 与当前消息 ID 不匹配,我们将删除该消息
如果我们无法与 DynamoDB 通信,或者由于某种原因密钥不存在,代码中会提供保护措施。我们将聚合记录的 这样如果我们在处理队列时遇到问题,或者由于 阿尔及利亚 WhatsApp 数据 任何原因需要让下游工作器离线,就可以留出一些时间。

我知道您在想什么……如果消息将被丢弃,为什么还要将它们写入 SQS?最初的计划是将 webhook 正文写入 DynamoDB,并只向 SQS 写入一条指向主键的消息。然而,在计算了支持此功能所需的 DynamoDB 写入吞吐量的成本后,我们选择继续发布到 SQS 并丢弃不再需要处理的消息。

另一个反对将整个正文发布到 DynamoDB 的因素是,有些平台只发送项目 ID 的变化,而其他平台则发送项目的完整正文。这可能会导致多兆字节的正文大于 DynamoDB 的最大项目大小 400K。

多兆字节的正文 webhook 也给 SQS 带来了问题,因为 SQS 的最大消息大小为 256K。我们收到的这种大型钩子并不多(不到 0.02%),因此我们将正文精简到最基本的要素(ID 和一些元数据),并向下游处理器发出信号,告知它们需要直接从平台备份此项目。

这是聚合 webhook 的主要架构。不过,我们还发现了一些其他非常重要的好处。让我们来看看这些好处。