如何解决AWS上的最终一致性问题

时间:2017-09-11 08:54:55

标签: amazon-web-services amazon-s3 amazon-dynamodb amazon-dynamodb-streams

我正在开发一个管理文档的项目(例如:创建,读取,维护不同的版本等等),我的计划是使用以下AWS架构。

enter image description here

创建/更新文档时,它将通过API Gateway S3代理保存到启用版本的s3存储桶。 S3 put事件将触发lambda以获取最新版本和所有版本ID并将其保存到DynamoDB。一旦将其保存在DynamoDB表中,它将通过DynamoDB流在Elasticsearch中编入索引。

我的计划是将Elasticsearch用于所有搜索查询。我将从DynamoDB加载最新文档。由于每个记录都有S3版本ID,我也可以从S3查询旧版本。

由于我的架构很大程度上依赖于最终的一致性,即(S3到DynamoDB和DynamoDB到Elastic Search),我担心在创建文档后查询Elasticsearch或查询DynamoDB时,我不会获得最新的文档数据。

我们非常感谢任何改进建议。

谢谢!

2 个答案:

答案 0 :(得分:3)

正如您所说,您的应用程序架构有多个点,其中使用了最终的一致性。

如果您的应用程序业务案例绝对要求在查询数据时获得绝对最新版本,那么您的架构选择很糟糕,例如,您应该考虑使用RDS持久性。

如果没有,那么您只需设计系统的其余部分,请记住,获得完整的PUT并不能保证查询会立即返回数据。提供如何做到这一点的指示很大程度上取决于您的应用程序,并且不可能一概而论。

答案 1 :(得分:1)

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

因此,您的问题需要花费更多时间来访问弹性搜索服务器。

如果您想要更加一致的描述当前状态的东西(因为这是您最终会遇到的问题)而没有任何延迟,您需要更改工具。