6

S3 FAQ 提到“所有区域中的 Amazon S3 存储桶为新对象的 PUTS 提供写后读一致性,并为覆盖 PUTS 和 DELETES 提供最终一致性。” 但是,我不知道获得最终一致性需要多长时间。我试图搜索这个,但在 S3 文档中找不到答案。

情况:

我们的网站由 7 个步骤组成。当用户在每个步骤中单击保存时,我们希望将一个 json 文档(包含所有 7 个步骤的信息)保存到 Amazon S3。目前我们计划:

  1. 创建一个 S3 存储桶来存储所有 json 文档。
  2. 当用户保存第 1 步时,我们在 S3 中创建一个新项目。
  3. 当用户保存第 2-7 步时,我们会覆盖现有项目。
  4. 用户保存一个步骤并刷新页面后,他应该可以看到他刚刚保存的信息。即我们要确保我们总是在写后读。

完整的 json 文档(全部 7 个步骤完成)大约 20 KB。用户单击保存按钮后,我们可以将页面冻结一段时间,并且在保存完成之前他们无法进行其他更改。

问题:

  1. AWS S3 保存和加载项目需要多长时间?(我们可以在将文档保存到 S3 时冻结我们的网站)
  2. 是否有根据项目大小计算保存/加载时间的功能?
  3. 如果我选择另一个 S3 区域,保存/加载时间会有所不同吗?如果是的话,哪个是西雅图最好的地区?
4

2 回答 2

13

我想添加到@error2007s 的答案。

AWS S3 保存和加载项目需要多长时间?(我们可以在将文档保存到 S3 时冻结我们的网站)

这不仅是您在任何地方都找不到确切的时间- 实际上没有确切的时间。这就是“最终一致性”的全部含义:最终将实现一致性。你不知道什么时候。

如果有人给你一个系统达到一致性需要多长时间的上限,那么你就不会再称它为“最终一致”了。这将是“在 X 时间内保持一致”。


现在的问题变成了“我如何处理最终的一致性?” (而不是试图“打败它”)

要真正找到该问题的答案,您需要首先了解您真正需要什么样的一致性,以及S3的最终一致性究竟会如何影响您的工作流程。

根据您的描述,我知道您将总共向 S3 写入 7 次,每一步执行一次。对于第一次写入,正如您正确引用了常见问题解答一样,之后的任何读取都将获得高度一致性。对于所有后续写入(实际上是“替换”原始对象),您可能会观察到最终的一致性 - 也就是说,如果您尝试读取覆盖的对象,您可能会获得最新版本,或者您可能会获得旧版本. 在这种情况下,这就是 S3 上的“最终一致性”。

您可以考虑一些替代方案:

  • 不要在每一步都写入 S3;相反,将每个步骤的数据保留在客户端,然后在第 7 步之后仅将 1 个单个对象写入 S3。这样,只有 1 次写入,没有“覆盖”,因此没有“最终一致性”。对于您的特定场景,这可能会也可能不会,您需要对此进行评估。

  • 或者,为每个步骤写入具有不同名称的 S3 对象。例如,类似:在第 1 步之后,将其保存到bruno-preferences-step-1.json;然后,在第 2 步之后,将结果保存到bruno-preferences-step-2.json; 依此类推,然后将最终的首选项文件保存到bruno-preferences.json,或者甚至bruno-preferences-step-7.json,让您自己可以灵活地在将来添加更多步骤。请注意,这里的想法是避免覆盖,这可能会导致最终的一致性问题。使用这种方法,你只写新对象,你永远不会覆盖它们。

  • 最后,您可能需要考虑Amazon DynamoDB。它是一个 NoSQL 数据库,您可以直接从浏览器或服务器安全地连接到它。它为您提供复制、自动扩展、负载分配(就像 S3 一样)。您还可以选择告诉 DynamoDB 您想要执行强一致性读取(默认为最终一致性读取;您必须更改参数才能获得强一致性读取)。DynamoDB 通常用于“小”记录,20kB 肯定在范围内——截至今天,记录的最大大小为 400kB。您可能想查看以下内容:DynamoDB 常见问题:Amazon DynamoDB 的一致性模型是什么?

于 2016-06-06T23:26:45.260 回答
2

AWS S3 保存和加载项目需要多长时间?(我们可以在将文档保存到 S3 时冻结我们的网站)

你不会在任何地方找到准确的时间。如果你问 AWS,他们会给你大概的时间。您的文件为 20 KB,因此根据我使用 S3 的经验,时间将或多或少 60-90 秒。

是否有根据项目大小计算保存/加载时间的功能?

不,没有任何函数可以用来计算。

如果我选择另一个 S3 区域,保存/加载时间会有所不同吗?如果是的话,哪个是西雅图最好的地区?

对于西雅图美国西俄勒冈州将毫无问题地工作。

你也可以看看这个实验进行比较https://github.com/andrewgaul/are-we-consistent-yet

于 2016-06-06T22:21:30.713 回答