`

分布式架构——Gossip 协议详解

阅读更多
起源
Gossip protocol 也叫 Epidemic Protocol (流行病协议)。Gossip protocol在1987年8月由施乐-帕洛阿尔托研究中心发表ACM上的论文
《Epidemic Algorithms for Replicated Database Maintenance》中被提出。原本用于分布式数据库中节点同步数据使用,后被广泛用于数据库复制、信息扩散、集群成员身份确认、故障探测等。
 
Gossip协议是基于六度分隔理论(Six Degrees of Separation)哲学的体现,简单的来说,一个人通过6个中间人可以认识世界任何人。数学公式是:
n表示复杂度,N表示人的总数,W表示每个人的联系宽度。依据邓巴数,即每个人认识150人,其六度就是1506 =11,390,625,000,000(约11.4万亿)。
 
基于六度分隔理论,任何信息的传播其实非常迅速,而且网络交互次数不会很多。比如Facebook在2016年2月4号做了一个实验:研究了当时已注册的15.9亿使用者资料,发现这个神奇数字的“网络直径”是4.57,翻成白话文意味着每个人与其他人间隔为4.57人。
 
原理
Gossip协议执行过程:
种子节点周期性的散播消息 【假定把周期限定为 1 秒】。
被感染节点随机选择N个邻接节点散播消息【假定fan-out(扇出)设置为6,每次最多往6个节点散播】。
节点只接收消息不反馈结果。
每次散播消息都选择尚未发送过的节点进行散播。
收到消息的节点不再往发送节点散播:A -> B,那么B进行散播的时候,不再发给 A。
 
Goosip 协议的信息传播和扩散通常需要由种子节点发起。整个传播过程可能需要一定的时间,由于不能保证某个时刻所有节点都收到消息,但是理论上最终所有节点都会收到消息,因此它是一个最终一致性协议。
 
Gossip协议是一个多主协议,所有写操作可以由不同节点发起,并且同步给其他副本。Gossip内组成的网络节点都是对等节点,是非结构化网络。
 
消息类型
Gossip 协议的消息传播方式有两种:Anti-Entropy(反熵传播)和Rumor-Mongering(谣言传播)。
反熵传播是以固定的概率传播所有的数据。所有参与节点只有两种状态:Suspective(病原)、Infective(感染)。这种节点状态又叫做simple epidemics(SI model)。过程是种子节点会把所有的数据都跟其他节点共享,以便消除节点之间数据的任何不一致,它可以保证最终、完全的一致。缺点是消息数量非常庞大,且无限制;通常只用于新加入节点的数据初始化。
 
谣言传播是以固定的概率仅传播新到达的数据。所有参与节点有三种状态:Suspective(病原)、Infective(感染)、Removed(愈除)。这种节点状态又叫做complex epidemics(SIR model)。过程是消息只包含 update,谣言消息在某个时间点之后会被标记为 removed,并且不再被传播。缺点是系统有一定的概率会不一致,通常用于节点间数据增量同步。
 
通信方式
Gossip 协议最终目的是将数据分发到网络中的每一个节点。根据不同的具体应用场景,网络中两个节点之间存在三种通信方式:推送模式、拉取模式、Push/Pull。
Push: 节点 A 将数据 (key,value,version) 及对应的版本号推送给 B 节点,B 节点更新 A 中比自己新的数据
Pull:A 仅将数据 key, version 推送给 B,B 将本地比 A 新的数据(Key, value, version)推送给 A,A 更新本地
Push/Pull:与 Pull 类似,只是多了一步,A 再将本地比 B 新的数据推送给 B,B 则更新本地
 
如果把两个节点数据同步一次定义为一个周期,则在一个周期内,Push 需通信 1 次,Pull 需 2 次,Push/Pull 则需 3 次。虽然消息数增加了,但从效果上来讲,Push/Pull 较好,理论上一个周期内可以使两个节点完全一致。直观上,Push/Pull 的收敛速度也是最快的。
 
总结
综上所述,我们可以得出Gossip是一种去中心化的分布式协议,数据通过节点像病毒一样逐个传播。因为是指数级传播,整体传播速度非常快,很像现在美国失控的2019-nCoV(新冠)一样。它具备以下优势:
扩展性:允许节点的任意增加和减少,新增节点的状态 最终会与其他节点一致。
容错:任意节点的宕机和重启都不会影响 Gossip 消息的传播,具有天然的分布式系统容错特性。
去中心化:无需中心节点,所有节点都是对等的,任意节点无需知道整个网络状况,只要网络连通,任意节点可把消息散播到全网。
一致性收敛:消息会以“一传十的指数级速度”在网络中传播,因此系统状态的不一致可以在很快的时间内收敛到一致。消息传播速度达到了 logN。
简单
 
同样也存在以下缺点:
消息延迟:节点随机向少数几个节点发送消息,消息最终是通过多个轮次的散播而到达全网;不可避免的造成消息延迟。
消息冗余:节点定期随机选择周围节点发送消息,而收到消息的节点也会重复该步骤;不可避免的引起同一节点消息多次接收,增加消息处理压力。
 
Gossip协议由于以上的优缺点,所以适合于AP场景的数据一致性处理,常见应用有:P2P网络通信、Apache Cassandra、Redis Cluster、Consul。
 
from : http://distributedsystem.dataguru.cn/article-15753-1.html
分享到:
评论

相关推荐

    分布式计算——原理、算法和系统

    2. **Gossip协议**:一种去中心化的信息传播算法,用于节点间状态的同步和更新,常见于P2P网络和分布式数据库。 3. **一致性哈希**:为解决分布式系统中节点动态增减带来的数据重新分布问题,一致性哈希通过特定...

    2020分布式系统导论Gossip

    分布式系统导论中的Gossip协议是一种在大规模网络中传播信息的有效方法,尤其适用于容错性和扩展性要求高的环境。Gossip协议借鉴了社会学中消息传播的模式,通过节点之间的随机交互来传播和更新信息,使得整个网络...

    基于分布式共识的Gossip 算法及时间同步研究.pdf

    Gossip算法,也称作流言算法,是一种在分布式系统中广泛应用的通信协议。它模拟了流言传播的过程,即每个节点通过与它所选择的节点进行信息交换,以达到信息在整个网络中传播的目的。Gossip算法具有良好的扩展性和...

    基于Gossip协议的p2p成员管理协议.pdf

    ### 基于Gossip协议的P2P成员管理协议详解 #### 一、引言与背景 随着互联网分布式应用的迅速发展,可靠且可扩展的组通信机制变得尤为重要。传统上,网络级别的可靠组播协议(如SRM或RMTP)依赖于IP组播技术。然而...

    Go-vegamcache是一个使用gossip协议构建的分布式内存中golang缓存库

    Go-vegamcache是一个专为Golang开发的分布式内存缓存库,其核心特性是采用了gossip协议来实现数据的同步和复制。这种协议在分布式系统中被广泛使用,因为它具有自我修复、高可用和扩展性强的特点。让我们深入探讨...

    声明式自愈系统,高可用分布式架构设计.pdf

    例如,Paxos和Raft是用于分布式一致性的重要算法,而2PC则常用于分布式事务处理,Gossip协议则适用于大规模、去中心化的系统中进行信息传播和状态同步。 声明式自愈系统的设计原则强调有一个统一的状态持久化接口,...

    一个 Java 版的 Gossip 协议实现.rar

    一个 Java 版的 Gossip 协议实现。 Gossip 算法又被称为反熵(Anti-Entropy),熵是物理学上的一个概念,代表杂乱无章,而反熵就是在杂乱无章中寻求一致,这充分说明了 Gossip 的特点:在一个有界网络中,每个节点...

    R-gossip:分布式负载均衡效率优化算法.pdf

    Gossip算法是一种基于概率的分布式系统一致性协议,它通过节点间周期性的交换信息,以达成系统内各节点间数据一致的状态。 R-gossip算法设计: 为了提高负载均衡的效率,文章提出了一种基于gossip算法改进的算法...

    电信设备-基于Gossip通信协议和Raft选举算法的优化方法.zip

    在电信设备领域,为了实现高效、可靠的分布式系统,Gossip通信协议和Raft选举算法是两种重要的技术。本文将深入探讨这两种技术,并介绍基于这两种协议的优化方法。 首先,Gossip通信协议是一种去中心化的消息传播...

    学习spring的很好的参考资料——Spring Gossip

    此为很有人气的Gossip的学习笔记,里面深入浅出的讲解了关于spring框架的知识与学习心得,是理解spring的不可多得的好资料。 此资料为html形式,每个知识点单独列为一张html页面,阅读很方便,不需要pdf格式下的阅读...

    分布式系统作业-难度5.zip

    在本题中,学生们被分配了一项2021年东北大学的分布式系统作业,其核心是利用Gossip协议实现一个去中心化的平均数计算机制。这个任务的难度被评为5级,暗示了它可能涉及复杂的概念和技术。 首先,我们来理解Gossip...

    gossip:Gossip协议的Go实现

    Gossip协议的Go实现。 概述 该软件包提供了最终一致的内存中数据存储的实现。 数据存储值使用推挽式八卦协议进行交换。 // Create a gossiper g := NewGossiper("<ip>:<port>", "<unique>", "<peer>") // Add ...

    SP.rar_gossip_gossip network_gossip协议

    该机制基于gossip模式,节点和随机选择的对等体交换信息,并按照特定的P2P应用需求来重新安排拓扑,本协议非常的高效和鲁棒,能够处理节点持续的加入和离开系统的流,且即使现存的所有SP移除也能修复。

    吉林大学精品课件——分布式计算系统

    5. **分布式算法**:如选举算法(如Paxos、Raft)、分布式一致性算法(如Gossip协议、Chubby锁服务)等,都是分布式计算中的核心算法。 6. **容错与恢复**:通过备份、冗余和故障检测机制,分布式系统能应对硬件...

    网络游戏-分布式网络中基于gossip算法的单目标DOA估计系统及估计方法.zip

    2. 分布式网络结构的设计,包括节点间的通信协议和数据同步策略; 3. 单目标DOA估计的具体数学模型和计算步骤; 4. 如何通过Gossip算法实现局部信息交换和全局DOA估计的收敛; 5. 实验结果分析,可能包括仿真和真实...

    分布式消息中间件Corgi应用架构演进.pdf

    为了提高容错性,Corgi 2.x引入了更复杂的一致性协议——Gossip协议。Gossip协议是一种去中心化的通信协议,它允许节点间以随机的方式传播信息,从而达到数据的最终一致性。此外,Corgi 2.x还引入了元数据管理(如...

    分布式中间件架构设计.pdf

    在Corgi 1.x中,采用了主从复制的模式,而在2.x中,引入了更先进的Gossip协议,提高了系统的健壮性和扩展性。Corgi支持多种功能,如元数据管理(topic、group等)、检查点、事务处理、消息和事件(生产和消费)。...

    大规模分布式存储系统:原理解析与架构实战,分布式服务框架原理与实践_李林锋著

    5. 数据分布与一致性:包括Gossip协议、Chubby锁服务等实现分布式一致性的方式。 另一方面,《分布式服务框架原理与实践》聚焦于服务间的通信与协调,这在微服务架构中尤为重要。书中的内容可能涵盖: 1. 服务发现...

    浅析redis cluster介绍与gossip协议

    Gossip协议是一种分布式系统中常见的节点间通信机制,用于传播和同步集群的状态信息。在Redis Cluster中,每个节点都持有完整的集群元数据副本,并通过Gossip协议进行通信。当节点状态或元数据发生变化时,节点会将...

Global site tag (gtag.js) - Google Analytics