论文地址:一致性、可用性和融合性——Mahajan、Alvisi和Dahlin,2014年

    我们在之前的论文中已经看到,最终一致性的经典定义允许一些无用的模型,比如所有节点由于返回一个常量值而变得一致。Mahajan等人。用符合我们常识预期的趋同定义来堵住这些漏洞。

    然后问题变成:如果你想要一致性、可用性和收敛性,我们能做的最好的是什么?

    我们研究了容错分布式系统一致性的极限。特别是,我们确定一致性、可用性和收敛性之间的基本权衡。

    因果一致性遵循“先于发生”图的约束;实时因果一致性添加了时间不能向后移动的附加约束。本文表明,可以实现实时因果一致性,而且不能做得更好。

    在一个总是可用的单向收敛系统中不能提供比实时因果一致性(RTC)强的一致性,而在一个总是可用的单向收敛系统中可以提供RTC。

    还有一个关于拜占庭模型(可以容忍故意发送错误消息、丢弃消息等恶意节点的模型)的很好的讨论。大多数现实世界的系统都不能容忍拜占庭式的失败模式(所以大多数现实世界的系统在这个级别上都容易受到敌人的攻击)。

    Mahajan等人。展示一个他们称之为有界Fork-Join因果一致性(BFJC)的模型,该模型在拜占庭式的失败面前可以被证明是可以实现的,并且他们相信在这种情况下可以给出最有力的保证。

    BFJC可以通过始终可用的单向收敛实现来实现。它可以通过扩展RTC实现的四个关键方法来实现…

    它们是什么?

    历史记录编码和更新签名
    根据本地历史记录检查收到的更新
    拒绝来自已知故障节点的更新(除非另一方已被骗接受它们)
    广播证明您没有接受任何错误的更新

    详情见论文。

    作为应用程序开发人员或系统设计人员,这一切意味着什么?首先,尝试使用CRDTs等技术对问题域进行建模,这些技术在<强一致性模型下是安全的。我相信使用cqr等方法可以在这方面取得很大进展。第二,如果这是不可能的,您需要设计您的应用程序,至少以这样的方式来容忍因果一致性所允许的不一致。即,独立并发更新的协调方法。