无主复制系统-读修复和反熵

Posted JavaEdge.

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无主复制系统-读修复和反熵相关的知识,希望对你有一定的参考价值。

复制模型应确保所有数据最终复制到所有副本。在一个失效节点重新上线后,如何追上错过的写入?Dynamo风格的数据存储系统常用机制:

① 读修复(Read repair)

当客户端并行读取多副本时,可检测到过期的返回值。如图-10,User 2345获得来自R3的版本6,而从副本1、2得到版本7。客户端判断可知:副本3是过期值,然后将新值写入该副本。这适用于读密集场景。

② 反熵过程(Anti-entropy process)

一些数据存储有后台进程,不断查找副本之间数据差异,将任何缺少的数据从一个副本复制到另一个副本。不同于基于主节点复制的复制日志,该反熵过程不保证任何特定顺序的复制写入,并且会引入明显的同步滞后。

并非所有系统都实现了这俩方案。如Voldemort目前无反熵过程。若无反熵过程,由于【读修复】只在发生读取时才可能执行修复,那些很少访问的数据可能在某些副本中已丢失而无法再检测到,从而降低写的持久性。

以上是关于无主复制系统-读修复和反熵的主要内容,如果未能解决你的问题,请参考以下文章

无主复制系统-读写quorum

无主复制系统-Quorum一致性的局限性

无主复制系统-节点故障时写DB

“nodetool repair”操作有多贵?

快速无主的安全

_swift_abortRetainUnowned 将 @objc 类捕获为无主时