目标
- Gossip 协议的概念
- Gossip 协议的数据传输方式
任务实现
在分布式网络中,网络节点是否具有高扩展性,节点的可用性,数据如何进行传播,且在一个不稳定的分布式网络环境中,如何保证数据的实时同步,是所有开发人员都需要关注并解决的问题。
8.1.1 认识 Gossip协议(Gossip Protocol)
Gossip由来
Gossip 协议取自人类的"八卦"概念,两个人只要愿意,可以随时互相交换信息。Gossip 协议最初是在 1987 年由 Alan Demers 发明的,他当时是 Xerox 的 Palo Alto 研究中心的研究员,专门研究在不可信网络环境中路由信息的方式。
Gossip作用
Gossip是一种去中心化的分布式协议,用于实现节点或者进程之间的信息交换,通常被用在大型的无中心化网络环境中,并且假设网络环境不太稳定,是分布式系统中被广泛使用的一种最终一致性协议。
Gossip协议是在网络中的某个节点将指定的数据发送到网络内的一组其他节点。数据通过节点像病毒一样逐个传播。最终,数据传播到系统中的每个节点。从而实现在大型分布式系统中可靠地进行数据的传播。
简单的理解,Gossip是一种网络通信协议, 这种协议类似于人类中的谣言传播。一个人A第一次听到谣言,然后打电话给某人B以分享谣言。一旦他们挂了电话,B打电话给第三个人C,A与B分享谣言的同时,也在联系D分享谣言。这个过程一直持续到每个人都知道这个谣言。这种方式可方便地在一个网络中的所有节点之间快速传播数据。
Gossip协议所具备的特征如下:
-
Gossip 协议本质上是概率性的,节点选择其网络内随机通信的目标节点。
-
扩展性高:发送方节点向固定数量的接收方节点发送消息,与网络中的总节点数量无关。
-
低延迟:如果确认信息未到达接收节点,发送节点不会等待确认。
-
不需要故障检测或特定恢复操作,因为节点没有特定的角色,接收信息失败的节点不会阻止其他节点继续发送消息。
-
实现容错:因为节点从其它不同的节点接收消息的副本。
Gossip协议类型:
-
传播协议/谣言协议(Dissemination Protocols / Rumor-Mongering Protocols):
通过网络中的泛洪代理来工作,节点收到广播的数据后直接转发给所有的邻居节点;此方式可以提高网络的健壮性,但是容易造成广播风暴。
-
反熵协议(Anti-Entropy Protocols):用于修复复制数据,通过比较复制和协调差异进行操作;Hyperledger Fabric中的数据同步就是使用此方式实现。
-
计算聚合的协议(Protocols that Compute Aggregates):通过对网络中节点的信息进行采样,并将这些值组合起来得到系统范围内的值,从而计算出网络范围内的集合 ;之后将建立一种全面的信息流模式。
8.1.2 Gossip数据传输(Gossip Messaging)
Gossip 协议最终的目的是将数据分发到网络中的每一个节点,那么在不同的具体应用场景中如何保证网络中的每一个节点都能够接收到对应的数据且在不稳定的网络环境中保持数据的实时同步,Gossip数据分发协议实现了两种数据传输方式:
-
推送方式(Push-based):
1.1 网络中的某个节点随机选择N个节点作为数据接收对象
1.2 该节点向其选中的N个节点传输相应的信息
1.3 接收到信息的节点处理它接收到的数据
1.4 接收到数据的节点再从第一步开始重复执行
-
拉取方式(Pull-based):
2.1 某个节点周期性地选择随机N个节点询问有没有最新的信息
2.2 收到请求的节点回复请求节点其最近未收到的信息