“强一致性”与“写后读一致性”

Yas*_*ala 5 amazon-s3 amazon-web-services amazon-dynamodb

为什么 AWS 在 DynamoDB 中说“强一致性”而在 S3 中说“写后读一致性”?这两个意思是一样的吗?

Mic*_*bot 16

这两个术语本质上是同一个东西,从某种意义上说,先读后写是一种强一致性。

值得注意的区别在于,DynamoDB 的强一致性包括先读后更新和先读后删除,以及先读后写。S3 只提供先读后写……所以我们可以说先读后写是强一致性的一个子集。

在 S3 中,一切最终都与一个例外一致:如果您创建了一个对象并且您之前没有尝试过获取该对象(例如在创建之前检查该对象是否已经存在),那么在创建它之后获取该对象将始终返回您创建的对象。这就是 S3 中的先读后写一致性,它在所描述的情况下始终可用——您不必要求 S3 对新对象进行强一致性写后读,因为它始终提供。

S3 中的任何其他操作都没有这种一致性保证。例子:

  • 获取一个不存在的对象,得到一个 404,然后创建它,然后立即尝试再次获取它。您可能会收到,但您可能会在短时间内继续收到 404。
  • 在 S3 中创建一个对象,然后获取存储桶中的对象列表。新对象可能不会立即出现在列表中。
  • 下载一个对象,将其删除,然后再次尝试下载。你可能会在短时间内成功。你最终会得到一个 404。
  • 下载一个对象,然后覆盖它。重新下载。您可能会得到新对象,也可能会在短时间内得到旧对象。您不会得到损坏或不完整的对象,但您可能会得到旧的或新的。

所有这些都是S3 一致性模型的方面,它们是性能优化的结果。

DynamoDB 也针对性能进行了优化,因此,出于同样的原因,它默认为最终(非强)一致性……但如果需要,您可以在 DynamoDB 中指定强一致性读取。这些带有警告:

  • 如果存在网络延迟或中断,强一致性读取可能不可用。在这种情况下,DynamoDB 可能会返回服务器错误 (HTTP 500)。

  • 强一致性读取可能比最终一致性读取具有更高的延迟。

  • 全局二级索引不支持强一致性读取。

  • 强一致性读取比最终一致性读取使用更多的吞吐量

https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.ReadConsistency.html


小智 7

对于那些在 2020 年 12 月及以后看到这篇文章的人来说,更新 \xe2\x80\x93 AWS S3 现在可以自动为 GET、PUT 和 LIST 操作以及更改对象标签、ACL 或元数据的操作提供强一致性。存储桶配置具有最终一致性模型。

\n