3

我工作的一个项目来管理的文件(如:创建,读取,维护不同版本等...),我的计划是使用以下AWS架构。如何解决最终一致性问题在AWS上

enter image description here

在创建文件/更新它将被保存在通过API网关代理S3版本启用S3桶。 S3 put事件将触发一个lambda获取最新版本和所有版本ID并将其保存到DynamoDB。一旦将其保存在DynamoDB表中,它将通过DynamoDB流在Elasticsearch中索引。

我的计划是对所有搜索查询使用Elasticsearch。我将从DynamoDB中加载最新的文档。由于每个记录都有S3版本ID,我也可以从S3查询旧版本。由于我的架构依赖于最终的一致性(即S3到DynamoDB和DynamoDB到弹性搜索),我担心在创建文档后查询Elasticsearch或查询DynamoDB时,我不会获取最新的文档数据。

任何改进建议将不胜感激。

谢谢!

回答

3

如您所说,您的应用程序体系结构有多个使用最终一致性的点。

如果您的应用程序的业务案例绝对需要在查询数据时,你得到的绝对是最新版本,那么你的架构选择是不好的,你应该,例如,可以考虑使用RDS持久性来代替。

如果没有,那么你只设计您的系统保持其余记住,获取已完成PUT不保证查询立即返回数据。指导如何做到这一点,取决于你的应用程序,不可能通用化。

1

由于您使用dynamodb流,你dynamodb插入将达到您的弹性搜索服务,而是延迟。如果写入失败,则由客户端发出重试。 此外,您还必须记住触发dynamodb流的时间以及弹性搜索索引所需的时间(加上s3事件)。

所以你的问题与需要达到弹性搜索服务器的时间做更多。

如果你想描绘的当前状态(因为这是你最终会与问题),而不需要更改的工具的任何延误更多的东西是一致的。