3

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

在此处输入图像描述

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

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

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

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

谢谢!

4

2 回答 2

4

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

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

如果没有,那么您只需设计系统的其余部分,记住完成PUT并不能保证查询立即返回数据。提供有关如何执行此操作的说明很大程度上取决于您的应用程序,并且不能一概而论。

于 2017-09-11T09:09:55.513 回答
1

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

因此,您的问题与到达弹性搜索服务器所需的时间有关。

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

于 2017-09-11T09:21:54.163 回答