LawrencePeng's Blog

专注收集代码小精灵

CRDT:A Way to implement eventual consistency

  • BlahBlahBlah
    • 很多人都应该听过CAP Theorem,如果你没有,理解这篇文章可能有点费劲,推荐你看看。
    • 如果你选择了AP,那么你最终可能会面临的问题就是你要不要达到最终一致性了。
    • 如果你选择了否,那么这篇文章可能不对应你的场景了。
    • 如果你选择了是,那么如何实现最终一致性呢?这就导出了CRDT。
  • 原理
    • 有两类的CRDT。
    • CmRDT
      • 结点和结点传输的是符合交换律的操作,如果不符合幂等性,那么你可能需要依赖你的通讯机制能够达到extract one message delivered的要求。
      • Pure CmRDT可以减少所需要传输的metadata的大小。
    • CvRDT
      • 结点和结点传输的是状态,存在一个算子merge: (SA, SB) => SC,收到传输的状态就和自己存储的状态merge,这个算子必须满足交换律、结合律和幂等律,所以如果用抽象代数的角度形容地话,其使整个状态系统形成了一个半格。所以最终只要能接受到其他所有节点的新状态,那么永远能保证系统最终会收敛。这样也去除了对于CmRDT的底层通讯机制依赖,但是因为传递的是状态,所以最后传输可能有点大。虽然还有优化的可能性。
  • 例子我就不举了,大家G嫂一下就好了。