啥是Gossip协议? (上)

简介: 啥是Gossip协议? (上)

你好呀,我是歪歪。

元旦的时候我看到一个特别离谱的谣言啊,具体是什么内容我就不说了,我怕脏了大家的眼睛。

但是,我看到一个群里传的那叫一个绘声绘色,大家讨论的风生水起的,仿佛大家就在现场似的。

这事吧本来我呵呵一笑也就过了。但是隔了一会我突然大腿一拍:这是个素材啊。

网络异常,图片无法展示
|

我可以和大家聊一个共识算法呀。

说到共识算法,大家首先想到的应该都是 Raft、Paxos、Zab 算法这类理解起来比较困难的强一致性算法。

但是还有一个弱一致性的共识算法比较好理解,Gossip 协议。

Gossip,先看这个单词,圈起来,要考的啊,这是一个六级词汇,也是考研单词,意思是“流言蜚语”。

网络异常,图片无法展示
|

接下来就带你简单的看看这个“流言蜚语”到底是怎么回事。


Gossip 协议


Gossip 协议最早提出的时间得追溯到 1987 年发布的一篇论文:《Epidemic Algorithms for Replicated Database Maintenance》

http://bitsavers.trailing-edge.com/pdf/xerox/parc/techReports/CSL-89-1_Epidemic_Algorithms_for_Replicated_Database_Maintenance.pdf

我第一次看到这个论文的名字的时候,我都懵逼了:这也没有 Gossip 的关键词呢。

主要是 Epidemic Algorithms 这两个单词,我又恰好认识。

Algorithms,算法,没啥说的。

Epidemic 是啥?

紧扣当下时事:

网络异常,图片无法展示
|

所以 Epidemic Algorithms 翻译过来就是流行病算法。

因此 Gossip 的学名应该是又叫做“流行病算法”,只是大家更喜欢叫它 Gossip 而已。毕竟,虽不喜欢听点儿“小道消息”呢?

网络异常,图片无法展示
|

说论文之前,先简单定个基调。

你觉得一致性协议最基础、最核心、最重要的一个动作是什么?

是不是数据更新?

为了保证各个节点的数据的一致性,必然就涉及到数据的更新操作。

所以,在论文的开篇介绍部分描述了三种方法来进行数据的更新:

网络异常,图片无法展示
|

  • Direct mail(直接邮件)
  • Anti-entropy(反熵)
  • Rumor mongering(传谣)


Direct mail(直接邮寄)


废话先不说了,直接上个图:

网络异常,图片无法展示
|

上面这图啥意思呢?

就是一共八个小圆点,假设每个都代表一个服务器,它们之间都是平等的关系,不存在中心节点、主从什么的关系。

其中最上面的红色节点表示该节点有数据变更了,于是把变更的数据直接通知给剩下的节点。

如果其他的节点上发生了数据变更也是同样的道理。

可以简单的理解为一个循环遍历,每发生一次数据变更,为了保持数据的一致性,就得进行一次循环遍历。

这个方案的优点很明显:简单、粗暴、直接。

但是缺点和优点一样明显,我们看看论文里面怎么说:

网络异常,图片无法展示
|

主要看 but 的部分:

首先不完全可靠,因为这个要求每个站点都必须知道所有站点的存在。但是实际情况是有的站点并不总是知道所有其他站点。

然后,信息(mail)有时会丢失,一旦丢失,就连最终一致性也保证不了,整个凉凉。

其实 Direct mail(直接邮寄)并不是论文里面主要讨论的方案,把它写在第一个起一个抛砖引玉的作用。

主要聊聊 Anti-entropy(反熵)和 Rumor-Mongering(传谣)这两个方案。

先定个整体的基调:

  • Anti-entropy(反熵),是传播节点上的所有的数据
  • Rumor-Mongering(传谣),是传播节点上的新到达的、或者变更的数据

说白了,一个是全量,一个是增量。


Anti-entropy(反熵)


部分同学可能对“反熵”这个词感到莫名其妙哈,其实主要是不了解啥是“熵”。

其实说白了,“熵”的通俗理解就是“混乱程度”。

比如你的房间,如果你不去整理那么各自物品的摆放就会越来越混乱,也就是越来越“熵”。而你整理房间的这个操作就是“反熵”。

这个东西你可以简单的先这样理解,我一时半会也给你说不清楚,这东西要聊下去的话得上升到宇宙和哲学的高度。

我主要怕你听不懂。

网络异常,图片无法展示
|



每个服务器有规律地随机选择另一个服务器,这二者通过交换各自的内容来抹平它们之间的所有差异,这种方案是非常可靠的。

(but 开始了)但需要检查各自服务器的全量内容,言外之意就是数据量略大,因此不能使用太频繁。

实验表明,反熵虽然可靠,但传播更新的速度比直接邮件慢得多。

如果不同步,那么两者之间的数据差异越来越大,也就是越来越熵。

同步的目的是缩小差异,达到最终一致性,这就是反熵。

定义就是这么个定义。


Rumor mongering(传谣)


比起反熵,传谣从字面上就很好理解了。

比如我是一个大学生,并不能完全认识整个学校的人。但是学校里面的同学之间都有千丝万缕的联系。

假设有一天,我刚好碰见校花一个人走在路上,我就上去和她讨论了一下计算机领域里面的共识算法等相关问题,关于这些问题我们进行了深入的讨论并且交换了彼此的理解和看法。

咱这边就是说,整个过程是越讨论越激烈,不知道怎么走着走着就走到了情人坡。

应该每个大学都有一个叫做情人坡的地方吧。

然后被别的妹子看见了。她就给她闺蜜说:你知道歪歪吗?对,就是大一新生,那个大帅比。我那会看到他和校花在情人坡那边溜达。

然后一传十、十传百。这个消息全校师生都知道了。

“歪歪和校花在情人坡那边溜达”这个消息就通过 gossip 的传谣模式,达到了最终一致性。

“传谣”和“反熵”的差别在于只传递新信息或者发生了变更的信息,而不需要传递全量的信息。

比如上面的这个例子中,只需要同步“歪歪和校花在情人坡那边溜达”这个最新的消息就行。

而不需要同步“歪歪是谁,校花是谁,情人坡在哪”等等这些之前大家早就达成一致性的信息。

image.png

simple epidemics:单纯性传染病

在这种模式下,包含两种状态:infective(传染性) 和 susceptible(易感染)。

处于 infective 状态的节点代表其有数据更新,需要把数据分享(传染)给其他的节点。

处于 susceptible 状态的节点代表它还没接受到其他节点的数据更新(没有被感染)。

所以,后面我提到“感染”的时候,你应该要知道我是从这里看到的,不是胡编的。

关于“传谣”和“反熵”,再借用周志明老师《凤凰架构》里面的正经一点的描述,是这样的:

http://icyfenix.cn/distribution/consensus/gossip.html

达到一致性耗费的时间与网络传播中消息冗余量这两个缺点存在一定对立,如果要改善其中一个,就会恶化另外一个。

由此,Gossip 设计了两种可能的消息传播模式:反熵(Anti-Entropy)和传谣(Rumor-Mongering),这两个名字都挺文艺的。

熵(Entropy)是生活中少见但科学中很常用的概念,它代表着事物的混乱程度。

反熵的意思就是反混乱,以提升网络各个节点之间的相似度为目标,所以在反熵模式下,会同步节点的全部数据,以消除各节点之间的差异,目标是整个网络各节点完全的一致。

但是,在节点本身就会发生变动的前提下,这个目标将使得整个网络中消息的数量非常庞大,给网络带来巨大的传输开销。

而传谣模式是以传播消息为目标,仅仅发送新到达节点的数据,即只对外发送变更信息,这样消息数据量将显著缩减,网络开销也相对较小。


一个网站


摊牌了,其实我是看到了这个网站,才决定写这篇文章的。

因为这个网站里面直接有非常仿真的动画模拟 gossip 协议的同步过程,一个动图胜过千言万语。

地址先放在这里,大家可以自己访问玩儿一下:

https://flopezluis.github.io/gossip-simulator/

先给你看一眼它的工作过程:


image.png

甭管看没看懂吧,这玩意至少看起来很厉害的样子。

接下来就给你介绍一下它是怎么玩的:image.png先我们看这里的 Nodes 和 Fanout。

Nodes 其实很好理解,就是节点数,这里的 40 就代表下面的小圆圈的个数,比如我今年 18 岁,那么我把它改成 18 它就是这样

image.png

image.png

image.png

这段话里面就解释了,什么是 Fanout。同时也简单的介绍了 gossip 协议的基本工作原理。

它说 gossip 协议在概念上非常简单,编码也非常简单。它们背后的基本想法是这样的:

一个节点想与网络中的其他节点分享一些信息。然后,它定期从节点集合中随机选择一个节点并交换信息,收到信息的节点也做同样的事情。

该信息定期发送到 N 个目标,N 被称为扇出(Fanout)。

所以,前面的 Fanout=4,含义就是某个节点,每次会把自己想要分享的信息同步给集群中的另外 4 个节点。

在模拟器中体现出来应该是这样的:

image.png



目录
相关文章
|
7月前
|
算法 网络协议 网络架构
计算机网络-网络层:IP协议
【2月更文挑战第1天】
92 0
|
网络协议 应用服务中间件 网络性能优化
SIP协议是什么?
1,SIP是类似于HTTP的基于文本的协议。 2,SIP可以减少应用特别是高级应用的开发时间。由于基于IP协议的SIP利用了IP网络,有关系统方面问题请找博主,看他名字一起交流学习。固定网运营商也会逐渐认识到SIP技术对于他们的深远意义 SIP(SessionInitiationProtocol,会话发起协议)是由IETF推出的一种用于建立、修改和终止多媒体会话的应用层控制协议。这些多媒体会话包括Internet多媒体会议、远程教育、Internet电话等。SIP侧重于将SIP网络电话作为互联网上的一个应用,所以SIP继承了互联网协议简单、开放、灵活的特点,既保证了对用户和会话的可管理性,
|
7月前
|
网络协议 网络架构
网络层 IP协议(1)
网络层 IP协议(1)
50 0
|
7月前
|
域名解析 存储 网络协议
IP协议(2) 和 数据链路层协议基础
IP协议(2) 和 数据链路层协议基础
34 0
|
网络协议 算法 数据安全/隐私保护
网络层——IP协议(二)
网络层——IP协议
93 0
|
网络协议 算法 网络安全
【计算机网络】网络层IP协议
【计算机网络】网络层IP协议
106 0
|
网络协议 网络安全 网络架构
网络层——IP协议(一)
网络层——IP协议
111 0
|
网络协议 算法 网络架构
IP协议与以太网
本文主要介绍在TCP/IP五层协议模型中位于网络层和数据链路层的协议,在网络层主要是IP协议,而数据链路层的协议主要为以太网。
276 0
IP协议与以太网
|
域名解析 网络协议 算法
计算机网络【IP协议与以太网】
计算机网络【IP协议与以太网】
计算机网络【IP协议与以太网】
|
搜索推荐 安全 小程序
SIP协议特点
下一代网络的一个重要目标是建立一个可管理的、高效的、可不断扩展的业务平台。SIP作为应用层信令协议很好地满足了这一系列要求。sip具有很强的包容性,它既可以用于建立(如音频、视频、多方通话等)各种会话,也可以被用来传送即时消息和文件,这得益于它对HTTP等协议的吸收借鉴。