S3 FAQ提到:“所有地区的S3存储桶都为新对象的放置提供读写一致性,并为覆盖、放置和删除提供最终的一致性。”然而,我不知道需要多长时间才能得到最终的一致性。我试图搜索这个,但是在S3文档中找不到答案。
形势:
我们有一个由7个步骤组成的网站。当用户在每个步骤中单击“保存”时,我们希望将一个json文档(包含所有7个步骤的信息)保存到Amazon上。目前,我们计划:
完整的json文档(所有7个步骤都已完成)大约为20 KB。用户单击“保存”按钮后,可以将页面冻结一段时间,在保存完成之前,他们无法进行其他更改。
问题:
发布于 2016-06-06 23:26:45
我想添加到@error2007的答案。
AWS S3保存和加载一个项需要多长时间?(当文档保存到S3时,我们可以冻结我们的网站)
这不仅是因为你在任何地方都找不到确切的时间--实际上也没有确切的时间。这正是“最终一致性”的意义所在:一致性最终会实现。你不知道什么时候。
如果有人给了你一个系统需要多长时间才能达到一致性的上限,那么你就不再称之为“最终一致”了。这将是“在X时间内一致的”。
现在的问题是,“我如何处理最终的一致性?”(而不是试图“打败它”)
要真正找到这个问题的答案,您需要首先了解您真正需要什么样的一致性,以及S3的最终一致性将如何影响您的工作流程。
根据您的描述,我知道您将总共写7次给S3,每一步都写一次。对于第一次写入,正如您正确引用常见问题一样,在此之后的任何读取都具有很强的一致性。对于所有后续的写入(它们实际上是“替换”原始对象),您可能会观察到最终的一致性--也就是说,如果您试图读取覆盖对象,您可能会得到最新版本,或者您可能会得到一个旧版本。在这个场景中,这就是S3上所谓的“最终一致性”。
有几个供你考虑的备选方案:
bruno-preferences-step-1.json;然后,在步骤2之后,将结果保存到bruno-preferences-step-2.json;等等,然后将最终首选项文件保存到bruno-preferences.json,甚至bruno-preferences-step-7.json,为自己提供在将来添加更多步骤的灵活性。请注意,这里的想法是避免覆盖,这可能导致最终的一致性问题。使用这种方法,您只编写新的对象,而不会覆盖它们。发布于 2016-06-06 22:21:30
AWS S3保存和加载一个项需要多长时间?(当文档保存到S3时,我们可以冻结我们的网站)
你在任何地方都找不到确切的时间。如果你问AWS,他们会给你大约的时间。您的文件是20 KB,因此根据我从S3使用的经验来看,时间将大致为60-90 Sec。
是否有根据项目大小计算节省/加载时间的函数?
不,没有任何函数可以用来计算这个。
如果选择另一个S3区域,保存/加载时间会有所不同吗?如果是的话,哪个是西雅图最好的地区?
对于美国西雅图,西俄勒冈州将没有任何问题。
您也可以看看这个实验,比较一下https://github.com/andrewgaul/are-we-consistent-yet。
https://stackoverflow.com/questions/37667611
复制相似问题