如何保持数据一致? (Amazon S3和ElasticSearch)

时间:2016-08-19 09:47:00

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

想象一下将文件上传到Amazon S3,并且在成功时,文件(和元数据)的位置存储在ElasticSearch中的记录中。好的很好。

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

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

这会导致状态不一致。

所以问题是如何让这些实例保持同步?

想法是:

  • 如果状态不一致且用户请求ElasticSearch记录并且未找到任何内容,则会删除S3中的记录。 (meeh)
  • 批量作业以搜索数据库中的不一致并将其删除。
  • 在数据库中的事务中运行两个请求,如果一个请求失败 - >回滚并稍后重试(queue,jobs = Overkill?)

1 个答案:

答案 0 :(得分:0)

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

您的第三个建议是最接近最佳做法。

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