分布式协议,是分布式中的难点,很多程序员都难以理解什么是协议?作用是什么?为何要如此实现?以及其中的算法精髓,今天我们通过中国男篮的例子,来讲一讲,分布式协议中的Gossip协议。
首先,我们应该理解分布式协议是做什么的,分布式,意味着多机部署,那么,不同机器之间是如何进行通信的呢?我们将不同机器之间的交流称之为协议,主要用来分布式环境下不同机器之间的通信,保证集群下不同机器间的数据交流与数据一致性
Gossip协议,是一个比较简单的分布式协议,它的小名又叫留言传播,被广泛应用到各个系统当中,Redis官方多机部署方案中,亲儿子RedisCluster用的正是Gossip协议。
基本原理
在Gossip协议中,是怎么运作的呢?简单来说,就是当一个人得到新的消息之后(可以是发现新节点,也可以是发现某个机器挂了),就会随机向他的周边节点传播,最后整个集群都知道这个消息。好比中国男篮输球了,易建联空砍24分,大家开始纷纷对周边的人说,可以发朋友圈,可以大声咆哮,可以在群里抱怨,最后大家都知道了最终结果,这便是Gossip协议的基本原理。为了节约资源,一般Gossip的实现方法都是限定每隔单位时间,像其他人进行发送,好比你不会一下子对所有朋友都说中国男篮的消息,那样子对服务的压力就太大了,不能因为机器间的同步占用大量资源而无法保证机器正常服务。
最终一致性
在Gossip协议中,每个机器都能传播自己的最新消息,那么如何保证数据是正确的呢?答案是不能保证数据是每时每刻所有机器上面的数据都是对的,但是可以保证数据最终是对的,也就是最终一致性。好比中国男篮对波兰的比赛进行到第四节最后40秒,中国队领先3分,这个时候,有点节点就开始对外播报“稳了稳了,中国男篮挺进第二轮”。这条消息开始在集群里面进行传播,很快就有机器信以为真了。很快,又要机器发现了,周琦进攻犯规,并且连续失误,双方分差只差1分,悬了!并且将这条消息进行广播。这个时候之前收到中国队赢了的消息节点,慢慢的收到了这条消息,发现冲突了!怎么办!会进行版本号对比,在中国男篮的例子中,也就是对比比赛的时间,发现新的消息更新,把自己的状态更新为中国队悬了。同理,到了加时赛最后,有的机器开始开始广播“赵睿拼尽全力5犯,易建联错失绝杀”,整个集群都知道了,中国男篮输了,并且随着消息的扩散,最终整个集群都保持这个状态,这个时候有可能有的节点才刚刚收到“稳了稳了”的消息,但是通过版本号对比,抛弃了这个状态,从而保证集群最终状态的一致。
节点发现
Gossip协议是一个去中心化的协议,也就是说没有中心结点,如何理解这一点呢?那么当集群扩容的时候,其他机器是如何知道的呢?在Gossip协议中,每个机器都会维护者一个其他机器列表,就好比每个人心中,自己的好友,有哪些人也看球。到了昨天晚上,有人发了中国男篮输球了,周琦大魔王。这个时候,你会惊讶,原来这个人也看球,并且把他加到了看球列表中,下次有空的时候,你就会跟其他朋友说,某某某也是看球的,很快整个集群就知道了,新加入一台新的机器了。
节点移除
Gossip协议的一大重大作用,便是移除不可用的节点,我们来谈一谈RedisCluster中,Gossip协议是如何移除不可用节点的。当实例A发现实例B不可用的时候,就会对集群传播一条消息,说实例B不可用,当其他实例接收到这个消息时候,会对实例B进行探测,如果实例C发现实例B也不可用,也会跟着发出实例B不可用的信息。当集群里面,发出实例B不可用的数量超过一半的时候(多数派原则),就会发出一条新的消息,实例B确实不可用,进行主备切换!强制集群其他机器,断开实例B的连接,使用或者投票出实例B的Slave实例。
总结
Gossip协议,扩展性强,可以随便增减机器,容错率高,没有中心节点,又能保证最终一致性,关键是实现起来也是较为简单,所以被广泛的应用。
rel: http://dy.163.com/v2/article/detail/EO4VU41405318EGN.html
相关推荐
分布式系统导论中的Gossip协议是一种在大规模网络中传播信息的有效方法,尤其适用于容错性和扩展性要求高的环境。Gossip协议借鉴了社会学中消息传播的模式,通过节点之间的随机交互来传播和更新信息,使得整个网络...
Go-vegamcache是一个专为Golang开发的分布式内存缓存库,其核心特性是采用了gossip协议来实现数据的同步和复制。这种协议在分布式系统中被广泛使用,因为它具有自我修复、高可用和扩展性强的特点。让我们深入探讨...
### 基于Gossip协议的P2P成员管理协议详解 #### 一、引言与背景 随着互联网分布式应用的迅速发展,可靠且可扩展的组通信机制变得尤为重要。传统上,网络级别的可靠组播协议(如SRM或RMTP)依赖于IP组播技术。然而...
1. **Gossip协议**:一种去中心化的信息传播算法,常用于分布式系统中的状态同步和故障检测。 2. **Chubby锁服务**:Google开发的分布式锁服务,基于Paxos协议,提供高可用性和强一致性。 3. **MapReduce计算模型*...
Gossip协议是一种分布式消息传递算法,它通过节点间的随机通信来传播信息。传统Gossip协议的一个主要缺点是缺乏结构化,导致消息传播的效率不高且存在较高的重复率。为了解决这些问题,结构化Gossip算法(S-Gossip)...
8. **Gossip协议**:Gossip协议是一种去中心化的信息传播算法,通过节点之间的随机通信来传播和同步信息,只要有一个节点可用,服务就可以继续提供。 9. **Quorum机制**:Quorum机制决定了在分布式系统中达成共识所...
他在文中引用了一些参考文献,并且给出了一些Gossip算法在分布式系统中的具体应用场景,例如P2P网络中使用Gossip协议进行数据同步等。由于文档中存在OCR扫描错误和遗漏,因此在理解时需要结合上下文以及专业知识进行...
一个 Java 版的 Gossip 协议实现。 Gossip 算法又被称为反熵(Anti-Entropy),熵是物理学上的一个概念,代表杂乱无章,而反熵就是在杂乱无章中寻求一致,这充分说明了 Gossip 的特点:在一个有界网络中,每个节点...
Gossip算法是一种基于概率的分布式系统一致性协议,它通过节点间周期性的交换信息,以达成系统内各节点间数据一致的状态。 R-gossip算法设计: 为了提高负载均衡的效率,文章提出了一种基于gossip算法改进的算法...
在本题中,学生们被分配了一项2021年东北大学的分布式系统作业,其核心是利用Gossip协议实现一个去中心化的平均数计算机制。这个任务的难度被评为5级,暗示了它可能涉及复杂的概念和技术。 首先,我们来理解Gossip...
1. **混合通信**:将Gossip协议用于日常状态传播和故障检测,而Raft用于关键决策和一致性维护,这样既能保证高效的信息传播,又能确保关键操作的一致性。 2. **动态选举**:利用Gossip协议快速发现节点状态变化,...
5. 数据分布与一致性:包括Gossip协议、Chubby锁服务等实现分布式一致性的方式。 另一方面,《分布式服务框架原理与实践》聚焦于服务间的通信与协调,这在微服务架构中尤为重要。书中的内容可能涵盖: 1. 服务发现...
6. **Gossip协议**:Gossip协议是一种去中心化的信息传播算法,常用于分布式系统中的成员发现、状态同步和故障检测。其特点是简单、高效且适应大规模网络。 7. **MapReduce编程模型**:由Google提出的MapReduce是...
"分布式数据协议"这部分可能涉及一致性模型,如Paxos、Raft或Gossip协议,这些协议确保在分布式环境中数据的一致性和完整性。火炮可能实现了其中的一种或多种,以支持多节点间的协调和数据同步。 在"artillery-...
6. 分布式计算模型:可能包括MapReduce、Gossip协议等,这些模型为大规模数据处理提供了有效的框架。 7. 容错与恢复:在分布式系统中,节点故障是常态。书中会讲述如何设计容错机制,以及在发生故障后的恢复策略。 ...
Gossip协议是一种分布式系统中常见的节点间通信机制,用于传播和同步集群的状态信息。在Redis Cluster中,每个节点都持有完整的集群元数据副本,并通过Gossip协议进行通信。当节点状态或元数据发生变化时,节点会将...
此外,还可能涉及一致性算法,如Paxos、Raft和Gossip协议,以及NoSQL与NewSQL数据库的区别和选择。 在实际应用方面,分布式数据库常用于电商、社交网络、大数据分析等领域,解决大规模用户并发访问和海量数据分析的...
6. **Gossip协议**:这是一种基于对等网络的分布式信息传播协议,通过节点之间的随机交互更新状态,达到整个网络的一致性。这种协议在分布式系统中的成员管理和状态同步中广泛使用。 7. **MapReduce模型**:由...
2. 分布式网络结构的设计,包括节点间的通信协议和数据同步策略; 3. 单目标DOA估计的具体数学模型和计算步骤; 4. 如何通过Gossip算法实现局部信息交换和全局DOA估计的收敛; 5. 实验结果分析,可能包括仿真和真实...