【问题标题】:DynamoDB replication using Stream + Lambda使用 Stream + Lambda 进行 DynamoDB 复制
【发布时间】:2018-07-17 10:42:30
【问题描述】:

我正在尝试使用 Stream + Lambda 设置 DynamoDB 表复制。 我想知道我应该如何处理失败。 例如,我有表 A 和表 B,我想将任何更新从表 A 复制到表 B。

我可以使用 Stream + Lambda 设置触发器。 编写 lambda 函数以从表 A 获取事件并写入表 B 非常简单。

但是,我不确定应该如何处理这些故障。 在 lambda 函数中,如果由于某种原因写入表 B 失败,我该怎么办?我可以重试,但如果所有重试都失败了怎么办?

【问题讨论】:

    标签: lambda amazon-dynamodb replication


    【解决方案1】:

    您可以使用全局表(参考https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GlobalTables.html)进行多区域、多主复制。一切都由 DynamoDB 负责。

    【讨论】:

      【解决方案2】:

      您可以将新字段添加到表 B(“版本”)。 'version' 字段将是记录添加的时间。

      如果更新B表失败,可以将失败的事件保存到某个MySql表或RDS中。

      你应该持有一个查询备份表的进程,如果备份事件'version'字段大于表B上的'version'事件,则更新记录。

      您还可以使用内置的 aws 功能“cross region dynamodb replication

      【讨论】:

      • 感谢指点。我查看了跨区域 dynamodb 复制,它没有解释如何解决故障.. “跨区域 dynamodb 复制”是否保证数据一致性?
      • 它正在为您解决故障
      • 如果我需要进行双向同步,“跨区域 dynamodb 复制”是否仍然有效?例如)写入表A复制到表B并写入表B复制到表A。不可能同时更新记录。
      【解决方案3】:

      使用 DynamoDB 流 + Lambda,您可以免费重试,直到流数据过期,DynamoDB 流为 24 小时。如果您的 lambda 失败,无论出于何种原因,它都会在下一次调用时重试处理失败的批处理。有关详细信息,请参阅本文的最后一段。 https://docs.aws.amazon.com/lambda/latest/dg/retries-on-errors.html。所以你不需要在你的 lambda 代码中实现重试。

      只需将您的流批处理大小设置为一个相当大的数字,例如 100,以允许批处理包含新更新和以前失败的更新(如果有)。

      我不希望 lambda 经常失败。即使他们这样做,您免费获得的重试机制也应该处理它。所以我不会费心对其进行修复。相反,我会监控 lambda 并在 lambda 持续失败而没有成功执行 15 或 20 分钟时触发警报。

      【讨论】:

        猜你喜欢
        • 2018-11-20
        • 2017-09-06
        • 1970-01-01
        • 2014-08-13
        • 2019-07-27
        • 1970-01-01
        • 1970-01-01
        • 2020-02-06
        • 1970-01-01
        相关资源
        最近更新 更多