APP下载

分散式原理:一文了解 Gossip 协议_节点

消息来源:baojiabao.com 作者: 发布时间:2024-04-24

报价宝综合消息分散式原理:一文了解 Gossip 协议_节点

gossip 是什么

gossip 协议(gossip protocol)又称 epidemic 协议(epidemic protocol),是基于流行病传播方式的节点或者程式之间资讯交换的协议,在分散式系统中被广泛使用,比如我们可以使用 gossip 协议来确保网络中所有节点的资料一样。

从 gossip 单词就可以看到,其中文意思是八卦、流言等意思,我们可以想象下绯闻的传播(或者流行病的传播);gossip 协议的工作原理就类似于这个。gossip 协议利用一种随机的方式将资讯传播到整个网络中,并在一定时间内使得系统内的所有节点资料一致。Gossip 其实是一种去中心化思路的分散式协议,解决状态在丛集中的传播和状态一致性的保证两个问题。

gossip 优势

可扩充套件性(Scalable)

gossip 协议是可扩充套件的,一般需要 O(logN) 轮就可以将资讯传播到所有的节点,其中 N 代表节点的个数。每个节点仅传送固定数量的讯息,并且与网络中节点数目无法。在资料传送的时候,节点并不会等待讯息的 ack,所以讯息传送失败也没有关系,因为可以通过其他节点将讯息传递给之前传送失败的节点。系统可以轻松扩充套件到数百万个程式。

容错(Fault-tolerance)

网络中任何节点的重启或者宕机都不会影响 gossip 协议的执行。

健壮性(Robust)

gossip 协议是去中心化的协议,所以丛集中的所有节点都是对等的,没有特殊的节点,所以任何节点出现问题都不会阻止其他节点继续传送讯息。任何节点都可以随时加入或离开,而不会影响系统的整体服务质量(QOS)

最终一致性(Convergent consistency)

Gossip 协议实现资讯指数级的快速传播,因此在有新资讯需要传播时,讯息可以快速地传送到全域性节点,在有限的时间内能够做到所有节点都拥有最新的资料。

gossip 协议的型别

前面说了节点会将资讯传播到整个网络中,那么节点在什么情况下发起资讯交换?这就涉及到 gossip 协议的型别。目前主要有两种方法:

Anti-Entropy

Anti-Entropy 的主要工作方式是:每个节点周期性地随机选择其他节点,然后通过互相交换自己的所有资料来消除两者之间的差异。Anti-Entropy 这种方法非常可靠,但是每次节点两两交换自己的所有资料会带来非常大的通讯负担,以此不会频繁使用。

Anti-Entropy 使用“simple epidemics”的方式,所以其包含两种状态:susceptible 和 infective,这种模型也称为 SI model。处于 infective 状态的节点代表其有资料更新,并且会将这个资料分享给其他节点;处于 susceptible 状态的节点代表其并没有收到来自其他节点的更新。

Rumor-Mongering

Rumor-Mongering 的主要工作方式是:当一个节点有了新的资讯后,这个节点变成活跃状态,并周期性地联络其他节点向其传送新资讯。直到所有的节点都知道该新资讯。因为节点之间只是交换新资讯,所有大大减少了通讯的负担。

Rumor-Mongering 使用“complex epidemics”方法,相比 Anti-Entropy 多了一种状态:removed,这种模型也称为 SIR model。处于 removed 状态的节点说明其已经接收到来自其他节点的更新,但是其并不会将这个更新分享给其他节点。

因为 Rumor 讯息会在某个时间标记为 removed,然后不会传送给其他节点,所以 Rumor-Mongering 型别的 gossip 协议有极小概率使得更新不会达到所有节点。

一般来说,为了在通讯代价和可靠性之间取得折中,需要将这两种方法结合使用。

gossip 协议的通讯方式

不管是 Anti-Entropy 还是 Rumor-Mongering 都涉及到节点间的资料互动方式,节点间的互动方式主要有三种:Push、Pull 以及 Push&Pull。

gossip 演算法实现

Gossip 协议是按照流言传播或流行病传播的思想实现的,所以,Gossip 协议的实现演算法也是很简单的,下面分别是 Anti-Entropy 和 Rumor-Mongering 的实现虚拟码。

gossip 在工程上的使用

gossip 协议可以支援以下需求:

在下面的工程上使用到了 gossip 协议。

2019-01-26 08:57:00

相关文章