秒懂Elasticsearch选举原理

2019-09-08 23:08发布


早期 es 版本有 split brain 问题,俗称脑裂。ES 采用的是一种 P2P 的 gossip 选举方式,Gossip 算法因为 Cassandra 而名声大噪。

背景:

Gossip 算法, 灵感来自办公室八卦, 只要一个人八卦一下, 在有限的时间内所有人都会知道该八卦的信息,

这种方式也与病毒传播类似, 因为 Gossip 有众多的别名"闲话算法"、"疫情传播算法"、"病毒感染算法"、"谣言传播(Rumor-Mongering)算法".

但 Gossip 并不是一个新东西, 之前的泛洪查找、路由算法都归属于这个范畴, 不同的是 Gossip 给这类算法提供了明确的语义、具体实施方法及收敛性证明.

特点:

Gossip 算法又被称为反熵(Anti-Entropy), 熵是物理学上的一个概念, 代表杂乱无章, 而反熵就是在杂乱无章中寻求一致,

这充分说明了 Gossip 的特点:在一个有界网络中, 每个节点都随机地与其他节点通信, 经过一番杂乱无章的通信,

最终所有节点的状态都会达成一致. 每个节点可能知道所有其他节点, 也可能仅知道几个邻居节点,

只要这些节可以通过网络连通, 最终他们的状态都是一致的, 当然这也是疫情传播的特点.

要注意到的一点是, 即使有的节点因宕机而重启, 有新节点加入, 但经过一段时间后,

这些节点的状态也会与其他节点达成一致, 也就是说, Gossip 天然具有分布式容错的优点.

本质:

Gossip 是一个带冗余的容错算法, 更进一步, Gossip 是一个最终一致性算法。

虽然无法保证在某个时刻所有节点状态一致, 但可以保证在”最终“所有节点一致, ”最终“是一个现实中存在, 但理论上无法证明的时间点。

因为 Gossip 不要求节点知道所有其他节点, 因此又具有去中心化的特点, 节点之间完全对等, 不需要任何的中心节点。

实际上 Gossip 可以用于众多能接受“最终一致性”的领域:失败检测、路由同步、Pub/Sub、动态负载均衡。

但 Gossip 的缺点也很明显, 冗余通信会对网路带宽、CPU 资源造成很大的负载, 而这些负载又受限于通信频率, 该频率又影响着算法收敛的速度。

总结:

Gossip 是一种去中心化、容错而又最终一致性的绝妙算法, 其收敛性不但得到证明还具有指数级的收敛速度。

使用 Gossip 的系统可以很容易的把 Server 扩展到更多的节点, 满足弹性扩展轻而易举。

唯一的缺点是收敛是最终一致性, 不适应那些强一致性的场景, 比如 2PC。

原文地址:https://my.oschina.net/weiweiblog/blog/2875693


登录 后发表评论
0条评论
还没有人评论过~