您将如何在分布式系统中编写强读后写一致性?

oky*_*eni 9 distributed-system amazon-s3 amazon-web-services cap-theorem

最近,S3宣布了强读写一致性。我很好奇如何编程。它不违反CAP定理吗?

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

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

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

小智 -2

我们的假设在云系统中不起作用。风险分析过程涉及的因素很多,如可用性、一致性、容灾、备份机制、维护负担、收费等,而且我们在设计时仅参考定理。我们可以通过合并多个来创建我们自己的。所以我想分享AWS提供的链接,它详细说明了这个过程。

https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-consistent-view.html

当您创建启用了一致视图的集群时,Amazon EMR 使用 Amazon DynamoDB 数据库来存储对象元数据并跟踪与 Amazon S3 的一致性。您必须向 EMRFS 角色授予访问 DynamoDB 的权限。如果一致性视图确定 Amazon S3 在文件系统操作期间不一致,它会根据您可以定义的规则重试该操作。默认情况下,DynamoDB 数据库具有 400 个读取容量和 100 个写入容量。您可以根据 EMRFS 跟踪的对象数量和同时使用元数据的节点数量来配置读/写容量设置。您还可以配置其他数据库和操作参数。除了 Amazon EMR 的费用之外,使用一致视图还会产生 DynamoDB 费用,这些费用通常很小。