concurrency - Amazon S3 是否保证写入顺序?

标签 concurrency amazon-s3 cloud

Amazon S3 提供“最终一致性”模型,您存储的数据最终对所有客户端可见。

我找不到任何关于是否保证写入顺序的官方信息。如果您正在构建一个客户端可能希望在其他人存储数据后立即读取数据的架构,这一点非常重要。

如果保留写入顺序,我可以通过让写入器存储保护(例如,特殊键)和写入操作的结束来轻松检查数据是否完整。

如果没有保证写入顺序,那么我有一个严重的问题,因为我无法确定我可以安全地读取数据。

我阅读了 Werner Vogel 的关于一致性的文章 (http://www.allthingsdistributed.com/2007/12/eventually_consistent.html),他指出没有单调写入一致性的系统是出了名的难以编程,但没有说明 S3 是否能保证这一点。

最佳答案

当亚马逊的目标是大规模可扩展性时,保证写入顺序将是非常愚蠢的。考虑以下情况:

  • 与 key K 关联的值 X 存在于 S3 中。
  • 客户端 1(香港):将值 A 写入 key K,由服务器 A
  • 提供服务
  • 客户端 2(堪萨斯城):将值 B 写入 key K,由服务器 B
  • 提供服务

    最终一致性保证了世界上任何地方的所有读者都将看到值 A 或值 B 或值 X,最终,所有读者将看到值 A 或 B,但不是混合。

    如果客户端 1 和客户端 2 同时发出它们的写入,那么保证写入顺序的唯一方法是沿着时间线将写入彼此关联。然而,跨大西洋时钟不会完全同步。这里真正的问题是写入顺序是什么意思,当世界两端的两个客户端在时间上靠得很近的时候发出写入。

    更新

    对于单个客户端也是如此。假设从 2 个位置提供一个值,并且单个客户端发出 2 个连续更新。如果两个写入都由同一个端点提供服务,那么您的顺序很可能会被保留。但是,没有什么可以阻止从第二个位置(路由、网络拆分等)满足读取。

    关于concurrency - Amazon S3 是否保证写入顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3184886/

    相关文章:

    amazon-s3 - 使用 OAI 限制存储桶策略时,具有 S3 源的 Cloudfront 返回 AccessDenied

    amazon-web-services - S3最后修改的时间戳,用于最终一致的覆盖PUT

    iphone - iPad/iPhone 应用程序之间的云同步

    java - 从 GAE 到 Cloudfoundry

    .net - BlockingCollection<> 中的元素顺序

    并发队列,C

    java - 与 db 的并发冲突语句

    MongoDB并发更新(带子集合)

    python - 通过 AWS Lambda 在 AWS Redshift 中插入数据

    云中的 Java 框架