【问题标题】:What does read-after-write consistency really mean on new object PUT in S3?写后读一致性对 S3 中的新对象 PUT 的真正含义是什么?
【发布时间】:2017-08-14 21:56:56
【问题描述】:

亚马逊文档 (http://docs.aws.amazon.com/AmazonS3/latest/dev/Introduction.html#ConsistencyModel) 指出:

“Amazon S3 为所有区域的 S3 存储桶中的新对象的 PUTS 提供了先读后写的一致性,但有一点需要注意。”

忽略警告,这意味着客户端在对新对象执行 PUT 之后发出 GET 可以保证获得正确的结果。我的问题是,如果 GET 是从不同的客户端而不是执行 PUT 的客户端发出的(当然假设 GET 按时间顺序跟随 PUT),该保证是否也适用?换句话说,写后读一致性只是读你写一致性还是适用于所有客户端?

我怀疑答案是它在全球范围内有效,但找不到明确的答案。

【问题讨论】:

  • 这个问题实际上比看起来更难,涉及光速和狭义相对论,不是开玩笑。问题是要确定一个客户端发出 GET before 还是 after 另一个客户端。问题是只能确定一个特定的精度限制,这取决于客户端之间的距离。不可能以任意精度及时订购他们的请求,例如他们可以互相“追随”。这就是为什么通常从一个客户或某个“大师”的角度来讨论并发性。
  • 嘿,你的问题已经有一段时间了,但在互联网上找不到太多。您是否能够确定这不是 read-after-your-write 事情?
  • 是的,我确实确认过,它确实适用于全球所有客户。
  • 那么这与最终一致性有何不同?

标签: amazon-web-services amazon-s3 eventual-consistency


【解决方案1】:

我一直认为你也是这样,即写后读适用于所有客户端,而不仅仅是执行写入的客户端。

这篇博文似乎证实了这一点(就其价值而言),但我也没有在 AWS 官方文档上找到任何明确的答案:

https://shlomoswidler.com/2009/12/read-after-write-consistency-in-amazon.html

什么是写后读一致性?

写后读的一致性稍微收紧了一些东西,保证 新数据对所有客户的即时可见性。写后读 一致性,新创建的对象或文件或表行将 立即可见,没有任何延迟。

【讨论】:

【解决方案2】:

是的,这将是一致的。

“客户端”的概念无关紧要,因为每个 API 调用都是独立的。

us-east-1 区域(以前称为US-Standard)以前没有读写一致性,但它是now provided in all regions

【讨论】:

    【解决方案3】:

    截至 2020 年 12 月 1 日 (https://aws.amazon.com/blogs/aws/amazon-s3-update-strong-read-after-write-consistency/) S3 确实提供了强读后写一致性。但是,仍然不清楚来自不同客户端(发送 PUT 请求的客户端除外)的 GET 是否会看到更新的结果。该博客提到,“你所写的就是你将读到的,而 LIST 的结果将准确反映存储桶中的内容。”

    在分布式系统文献中,还有“read-your-own-write”一致性模型,“写入后跨客户端的一致读取”是最终目标(并不是说不可能)。

    我怀疑 S3 对于来自不同客户端的读取最终是一致的。我觉得 AWS 在这一点上应该更清楚。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多