AWS S3保存和加载项目需要多长时间?

EV3*_*EV3 5 amazon-s3 data-consistency amazon-web-services

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区域,保存/加载时间会不同吗?如果是这样哪个是西雅图最好的地区?

Bru*_*eis 9

我想添加@ 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的一致性模型是什么?