【问题标题】:How to keep data consistent? (Amazon S3 and ElasticSearch)如何保持数据一致? (Amazon S3 和 ElasticSearch)
【发布时间】:2016-08-19 09:47:00
【问题描述】:

想象一个文件上传到 Amazon S3 并且成功后文件的位置(和元数据)存储在 ElasticSearch 的记录中。好的,没关系。

但是,如果其中一个请求失败,您如何确保数据一致性(ACID?)... 例如,如果 ElasticSearch 服务不可用

  • 必须删除 S3 上的文件
  • 但是如果 S3 上的删除失败怎么办

这会导致不一致的状态。

那么问题是如何让这些实例保持同步?

想法是:

  • 如果存在不一致的状态并且用户请求 ElasticSearch 记录但没有找到任何内容,则删除 S3 中的记录。 (嗯)
  • 批处理作业以搜索数据库中的不一致并删除它们。
  • 在数据库中的事务中运行两个请求,如果一个失败 -> 回滚并稍后重试(队列、作业 = Overkill?)

【问题讨论】:

    标签: amazon-web-services elasticsearch amazon-s3 acid data-consistency


    【解决方案1】:

    在这种情况下,ACID 是不可能的,因为您使用的是最终一致的系统。

    您的第三个建议最接近最佳实践。

    此系统的参考架构是将对象写入 AWS S3,然后使用 S3 Bucket 通知到 AWS Lambda 执行对 Elasticsearch 的写入。如果在来自 S3->Lambda->Elasticsearch 的通知阶段写入失败,请使用死信 SQS 队列收集损坏的作业,然后使用 CloudWatch Events->Lambda 按照定时计划定期刷新队列。

    【讨论】:

      猜你喜欢
      • 2018-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-24
      • 1970-01-01
      • 2016-11-07
      • 1970-01-01
      相关资源
      最近更新 更多