亚马逊文档(http://docs.aws.amazon.com/AmazonS3/latest/dev/Introduction.html#ConsistencyModel)声明:
“Amazon S3为所有地区的S3存储桶中的新对象的PUTS提供了写后读写一致性,但有一点需要注意。”
忽略警告,这意味着在PUT之后为新对象发出GET的客户端可以保证获得正确的结果。我的问题是,如果GET是从不同的客户端而不是PUT的那个客户端发出的,那么保证是否也适用(假设GET当然按照时间顺序跟随PUT)?换句话说,读写后一致性只是读写一致性还是适用于所有客户端?
我怀疑答案是它在全球范围内有效,但无法找到明确的答案。
答案 0 :(得分:7)
是的,这将是一致的。
客户的概念'是无关紧要的,因为每个API调用都是独立的。
us-east-1
区域(以前称为US-Standard
)以前没有写入后读写一致性,但它是now provided in all regions。
答案 1 :(得分:6)
我总是假设你一样,即写后读取适用于所有客户端,而不仅仅是执行写操作的客户端。
这篇博客文章似乎证实了它(它的价值),但我也没有在AWS官方文档中找到任何明确的答案:
https://shlomoswidler.com/2009/12/read-after-write-consistency-in-amazon.html
什么是Read-After-Write一致性?
写后读写一致性稍微收紧一点,保证 立即可见所有客户的新数据。使用read-after-write 一致性,新创建的对象或文件或表行 立即可见,没有任何延迟。
答案 2 :(得分:2)
截至 2020 年 12 月 1 日 (https://aws.amazon.com/blogs/aws/amazon-s3-update-strong-read-after-write-consistency/),S3 确实提供了强读后写一致性。但是,仍然不清楚来自不同客户端(发送 PUT 请求的客户端除外)的 GET 是否会看到更新的结果。该博客提到,“你写的就是你会读到的,LIST 的结果将准确反映桶中的内容。”
此外,在分布式系统文献中,还有“读取您自己的写入”一致性模型,并且“写入后跨客户端一致读取”是最终目标(并不是说这是不可能的)。
我怀疑 S3 对于来自不同客户端的读取最终是一致的。我觉得 AWS 在这一点上应该更清楚。