【问题标题】:Troubleshoot DynamoDB to Elastic Search排查 DynamoDB 到 Elastic Search 的问题
【发布时间】:2021-09-03 03:47:41
【问题描述】:

假设我在 DynamoDB 上有一个数据库,我目前正在使用流和 lambda 函数将该数据发送到 Elasticsearch。

事情是这样的,假设数据已成功保存在 DynamoDB 上,有没有办法让我 100% 确定数据也已保存在 Elasticsearch 上?

考虑到我有一个函数可以在 DDB 上保存该数据,有没有办法让我在返回状态代码答案之前与 DDB 触发的 lambda 函数进行通信,这样我就可以在返回之前收到确认?

我想这样做是为了同时从我的函数和 lambda 函数返回 ok。

【问题讨论】:

    标签: node.js amazon-web-services elasticsearch aws-lambda amazon-dynamodb


    【解决方案1】:

    这看起来不是解决此问题的正确方法。我们通常将 DynamoDB Streams + Lambda 用于本质上是异步的操作,并且当我们不必将此 Lambda 执行的状态传达给客户端时。

    所以我建议以下两种最接近您想要实现的方法-

    1. 使操作完全同步。即,在同一个调用中执行 DynamoDB 插入和 ElasticSearch 插入(没有任何 Ddb Stream 和 Lambda 触发器)。这将确保您将两次写入的正确状态返回给客户端。此外,如果 ES 插入失败,您可以选择恢复 Ddb 写入,然后将完整状态返回为失败。

    2. 第一种方法显然增加了函数的延迟。所以你可以继续你原来的方法,但要让客户知道。它将按如下方式工作 -

    • 客户端调用您的 API。
    • API 将记录插入 Ddb 并返回给客户端。
    • 客户端收到状态并向用户显示一条消息,表明他们的请求正在处理中。
    • 然后客户端开始通过另一个 API 轮询 ES 插入的状态。
    • 同时,Ddb流触发ES insert Lambda fn,完成ES写入。
    • 客户端上的轮询器获知成功插入 ES 并向用户显示最终成功消息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-01
      • 1970-01-01
      • 2016-03-04
      • 2021-02-04
      • 2020-03-11
      相关资源
      最近更新 更多