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



S3常见问题解答提到"所有Regions中的AmazonS3 bucket为新对象的PUTS提供了读写一致性,并为覆盖PUTS和DELETES提供了最终的一致性。"然而,我不知道需要多长时间才能获得最终的一致。我试着搜索这个,但在S3文档中找不到答案。

情况:

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

  1. 创建一个S3存储桶来存储所有json文档
  2. 当用户保存步骤1时,我们在S3中创建一个新项目
  3. 当用户保存步骤2-7时,我们覆盖现有项目
  4. 用户保存步骤并刷新页面后,应该能够看到刚刚保存的信息。我们想确保我们总是一次又一次地阅读

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

问题:

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

我想添加到@error2007s的答案中。

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

这不仅是因为你在任何地方都找不到的确切时间——实际上没有这样的确切时间。这就是"最终一致性"的意义所在:一致性最终会实现。你不知道什么时候。

如果有人给了你一个系统实现一致性所需时间的上限,那么你就不会再称之为"最终一致"了。它将"在X时间内保持一致"。


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

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

根据你的描述,我知道你总共会给S3写7次,每走一步就写一次。在第一篇文章中,当您正确地引用了常见问题解答时,您可以在之后的任何阅读中获得很强的一致性。对于所有后续的写入(实际上是"替换"原始对象),您可能会观察到最终的一致性——也就是说,如果您尝试读取覆盖的对象,您可能得到最新的版本,也可能得到旧的版本。在这个场景中,这就是S3上所谓的"最终一致性"。

几个备选方案供您考虑:

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

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

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

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

您在任何地方都找不到确切的时间。如果你问AWS,他们会给你大约的时间。你的文件是20 KB,所以根据我从S3使用的经验,时间将或多或少是60-90秒。

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

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

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

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

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

相关内容

  • 没有找到相关文章

最新更新