首页 > 解决方案 > 您将如何在分布式系统中编写强读写一致性?

问题描述

最近,S3宣布了强大的 read-after-write 一致性。我很好奇如何编程。它不违反CAP定理吗?

在我看来,最简单的方法是等待复制发生然后返回,但这会导致性能下降。

AWS 表示没有性能差异。这是如何实现的?

另一个想法是亚马逊有一个巨大的索引表,可以跟踪所有 S3 对象及其存储位置(我相信是三重复制)。它需要在每次 PUT/DELTE 时更新此索引。这在技术上可行吗?

标签: amazon-web-servicesamazon-s3distributed-systemcap-theorem

解决方案


正如上面 Martin 所指出的,有一个指向 Reddit 的链接讨论了这个。来自 u/ryeguy 的最高回复给出了这个答案:

如果我不得不猜测,s3 在返回成功之前会同步写入存储节点集群,然后将其异步复制到其他节点,以获得更强的持久性和可用性。曾经存在从尚未收到文件更改的节点读取的风险,这可能会给您一个过时的文件。现在他们添加了逻辑,因此查找路由器知道更新传播了多远,并且可以避免将读取路由到陈旧的副本。

我只是从我的屁股中抽出所有这些,不知道 s3 是如何在幕后实际构建的,但考虑到持久性和可用性保证以及这一变化不会降低它们的事实,它一定是沿着这些思路。

欢迎更好的答案。


推荐阅读