Elasticsearch选举原理

早期 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。算法

相关文章
相关标签/搜索