amazon-web-services - 您将如何在分布式系统中编写强读写一致性?
问题描述
最近,S3宣布了强大的 read-after-write 一致性。我很好奇如何编程。它不违反CAP定理吗?
在我看来,最简单的方法是等待复制发生然后返回,但这会导致性能下降。
AWS 表示没有性能差异。这是如何实现的?
另一个想法是亚马逊有一个巨大的索引表,可以跟踪所有 S3 对象及其存储位置(我相信是三重复制)。它需要在每次 PUT/DELTE 时更新此索引。这在技术上可行吗?
解决方案
正如上面 Martin 所指出的,有一个指向 Reddit 的链接讨论了这个。来自 u/ryeguy 的最高回复给出了这个答案:
如果我不得不猜测,s3 在返回成功之前会同步写入存储节点集群,然后将其异步复制到其他节点,以获得更强的持久性和可用性。曾经存在从尚未收到文件更改的节点读取的风险,这可能会给您一个过时的文件。现在他们添加了逻辑,因此查找路由器知道更新传播了多远,并且可以避免将读取路由到陈旧的副本。
我只是从我的屁股中抽出所有这些,不知道 s3 是如何在幕后实际构建的,但考虑到持久性和可用性保证以及这一变化不会降低它们的事实,它一定是沿着这些思路。
欢迎更好的答案。
推荐阅读
- html - 错误类型错误:_co.getAdmin 不是函数
- c++ - 什么可能导致非阻塞套接字阻塞“recv”?
- python - Excel Writer Python为DataFrame中的每一行/索引单独工作表
- javascript - Firebase将项目添加到数组
- cout - 刚从 C++ 开始,不注册命令
- vim - 从每行中的每个文件路径中提取文件名并添加到它旁边
- django - Django模板标签左/右
- google-apps-script - Google Sheet Script:通过最后一行唯一值查找另一个工作表范围内单元格的行号,然后更新目标行的列
- python - 打字界面
- python - 腌制一个对于 RAM 来说太大的文件