【问题标题】:How does immutable data make eventual consistency trivial?不可变数据如何使最终的一致性变得微不足道?
【发布时间】:2017-10-21 07:58:09
【问题描述】:

我一直在阅读 Nathan Marz 的 article,了解如何使用 Lambda 架构克服 CAP 定理,但我不明白不可变数据如何降低最终一致性的复杂性。

以下段落摘自文章:

关键是数据是不可变的。不可变数据意味着没有更新之类的东西,因此一条数据的不同副本不可能变得不一致。这意味着没有分歧值、矢量时钟或读取修复。从查询的角度来看,一条数据要么存在,要么不存在。该数据上只有数据和功能。您无需执行任何操作来强制执行最终一致性,并且最终一致性不会妨碍对系统的推理。

想象以下示例:我有一个分布式只插入数据库,其中包含两个节点 A 和 B,并且都保存记录 [timestamp=1; id=1; value=10]。然后同时,对节点 A 进行插入,导致 [timestamp=2; id=1; value=20] 和对节点 B 的读取以获取 id=1 的记录。

与具有更新可能性的数据库相比,该示例解决最终一致性问题的复杂性如何?

【问题讨论】:

    标签: immutability distributed-system eventual-consistency cap-theorem lambda-architecture


    【解决方案1】:

    我不是 100% 我是对的,但我还是会尽力解释。

    考虑一个示例 - 您有 2 个接受写入/读取的数据库,通过网络链接连接。链接断开,导致网络分区。我们希望我们的系统是 CAP 可用的,因此我们接受两个数据库中的写入/读取。

    使用可变数据结构时:假设连接到第一个数据库的客户端想要将记录 X 的值更新为 A,而另一个连接到第二个数据库的客户端想要将该值更新为 B。由于我们的系统可用,我们接受两个数据库中的两个写入,但是一旦网络分区消失,我们将不得不解决冲突。这将导致其中一个更新丢失。

    使用不可变数据结构,您不会更新数据而是插入,因此在网络分区消失后两次写入都会存在。您仍然需要某种时间同步,以保持可能非常棘手的操作顺序(请参阅 Sebastien Diot 文章中的评论)。

    【讨论】:

      猜你喜欢
      • 2021-01-03
      • 2020-12-13
      • 2013-03-11
      • 1970-01-01
      • 2014-04-11
      • 1970-01-01
      • 2018-06-25
      • 2015-11-30
      • 1970-01-01
      相关资源
      最近更新 更多