Merkel Tree与反熵修复(Anti-entropy re

2022-11-06  本文已影响0人  夕午wuw

最近在阅读分布式系统的书籍,看到Cassandra、Dynamo等数据库都有使用Merkel Tree进行反熵修复的内容,但书中并没有具体介绍反熵修复的概念,只是说明了其应用:

1.Merkel Tree到底是什么

我第一眼看到采用Merkel Tree来进行反熵修复的时候,完全不理解这句话什么意思。那么我们就一步一步进行拆解,首先搞清楚Merkel Tree是什么,再来看什么是反熵修复。

1.1 Merkel Tree

Merkel Tree

Merkel树是一种二叉树,准确说是一种二叉哈希树。树中有两种节点,分别是叶子节点(leaf node)和内部节点(inner node);根节点是一个特殊的内部节点,没有父亲。所有的内部节点都仅仅只包含孩子节点的哈希值,而每个叶子节点则对应一个数据块,存放数据块的哈希值。
Merkel树可以很好的展示加密承诺这个概念,数据块是承诺的原始部分,而根节点就是承诺。用户可以通过检验根节点快速进行数据验证,而无需通过所有的数据块进行逐一计算。

1.2 Merkel Tree的应用

Merkel树最常见与P2P下载软件与区块链中。

2. 反熵修复是什么

2.1 信息熵

每条信息中包含的信息的平均值,而信息的基本作用就是消除人们对事物的不确定性。一个系统越是有序,他的信息熵就越低;反之,一个系统越是混乱无序,信息熵就越高。因此信息熵也是系统有序化程度的一个度量。一个系统总是自发地向着熵增发展,而数据系统的存在就是为了使数据有序,这是一个熵减过程。因此,使系统从无序的状态变回有序的状态,就是反熵修复。

2.2 Gossip协议与Anti-Entropy

在Paxos为代表的分布式共识系统中,系统着重提供数据一致性、数据容错。而Gossip协议的系统着重考虑网络分区时的可用性、系统可拓展性,至于数据一致性,仅仅提供一种“宽松的一致性”即:最终一致性。Gossip协议被应用于以太坊网络、Cassandra数据库、Dynamo数据库、Docker Multi-host网络。
Gossip的设计目的是想在众多节点的数据系统中达成数据最终一致性。这样的分布式数据系统面领着很多困难和挑战。

而Gossip协议采用了如下设计思路:

Replace complex deterministic algorithms for replicated database consistency with simple randomized algorithms that require few guarantees from the underlying communication system

其实就是采用一种随机性的算法,来替代一个确定性的算法。并且乐观的希望这个随机性的算法可以实现一个最终一致性(最终这个词用的很妙,毕竟100年后实现一致性也算最终一致性)。采用随机性算法的好处是可以大幅减少数据系统的约束,不需要提供太多保证。
Gossip协议的雏形来自于这篇经典论文EPIDEMIC ALGORITHM FOR REPLICATED DATABASE MAINTENANCE,将信息更新的过程比瘟疫的传播。也正是在这篇论文中,作者第一次提出了Anti-entropy这一概念

 FOR SOME s1 belong to S DO
   ResolveDifference[S,s1)
 END LOOP

假设每个数据系统集合都定期执行Anti-entropy这一过程。每次执行,先随机选择集合S中的s1,s1再随机选取集合S中的任意其他节点,不断解决两两之间的数据冲突,最终整个集合中的对象都会达成数据一致性。接下来的一系列图就展示了一次反熵的过程。


反熵过程1 反熵过程2 反熵过程3 反熵过程4 反熵过程5 反熵过程6

反熵有一个非常明显的缺点:操作代价昂贵。每次ResolveDifference操作都需要对比两个完整的数据库副本(意味着对数据库所有条目都进行逐一比较)。论文中提出了一种优化方案,每个数据库副本都维护一个数据库内容的校验和。但这样的方式也会大量计算开销,并且执行反熵的时候只能直观的看出数据有不同,但不知道到底哪里的数据不同,最后还是得对数据库条目进行逐一比较。

2.3 Cassandra的反熵修复

对于Cassandra数据库来说,反熵修复其实就是指各个副本间的数据同步,来保证每个副本的数据都是最新的
上面那篇论文发布时,并没有Merkel Tree这个概念,因此我们视反熵为一个昂贵的操作过程。但是由于现在LSM Tree与Merkel Tree的存在,ResolveDifference操作的开销大大减少。下面就是Cassandra数据库中反熵修复的过程。

上一篇 下一篇

猜你喜欢

热点阅读