技术圈的“绯闻女孩”:Gossip是如何把八卦秘密传遍全网的?
Gossip协议,中文可译为“流言蜚语”“闲话”或“八卦”,形象地描述了该协议的工作方式——类似于人类社会中的信息传播模式。Gossip协议最早由Xerox公司的Palo Alto研究中心(PARC)在一篇论文中提出,论文中将其称为八卦算法或病毒算法(Epidemic Algorithm),但最终“Gossip”这一名称被接受并沿用至今。
Gossip协议是一种去中心化的分布式协议,旨在实现多个节点之间的状态信息共享。其核心思想是通过随机选择节点进行信息交换,逐步将状态数据传播到整个系统。
在分布式系统中,元数据(Metadata)是描述系统状态的关键信息,例如节点负责的数据范围、主从关系、节点健康状态(是否故障)等。Gossip协议通过周期性的、轻量级的通信机制,确保这些元数据能够在节点间高效、可靠地同步。
Gossip 的基本工作模式
1)周期性活动: 每个节点定期(例如每秒)启动一轮Gossip。
2)随机对等选择: 节点从其已知的集群成员列表中随机选择一个或少数几个目标节点(通常是k个,k远小于总节点数N)。
3)信息交换: 节点向选中的目标节点发送其持有的部分或全部信息(例如,自身状态、已知的其他节点状态、元数据更新等),并从目标节点接收类似信息。
4)状态合并与更新: 节点根据接收到的信息更新本地状态。例如,如果收到的信息版本更新,则采纳新信息。
Gossip 的信息传播方式变体
Gossip协议主要是通过直接邮寄、反熵和谣言传播三种方式来实现数据的最终一致性。
直接邮寄
直接邮寄(Direct mail),当一个节点自身状态发生重要更新时(例如,它检测到一个新数据),它主动将这个更新推送给随机选择的邻居。这是信息快速传播的一种方式,但不保证送达。
如图所示:当节点A的数据更新时,会直接将新数据传给节点B、节点C,然后各个节点再更新自己的数据。

需要说明的是:当队列溢出或长时间无法访问其目的地时,消息可能会被丢弃,也就是说,只采用直邮的方式是无法实现最终一致性的。
反熵
反熵(Anti entropy/ Pull or Push-Pull style),中的熵是指混乱程度,在此处,熵可以理解成不同节点中数据的差异性。反熵就是指消除混乱程度,提升节点间数据的相似度,降低熵值。反熵主要有推、拉和推拉三种方式。

1)推方式,节点A定期选择节点B,将A的所有(或部分摘要)数据推送给B,让B修复其与A不一致的部分。

2)拉方式,节点A定期选择节点B,从B拉取其所有(或部分摘要)数据,修复A自身与B不一致的部分。

3)推拉方式,节点A选择节点B,双方交换数据并各自修复差异。这是最常见和鲁棒的方式。

反熵通过异步方式修复数据差异,可以实现“最终一致性”,但是,节点之间需要相互交换和比较数据,如果集群节点数比较多且动态变化,代价就成直线上升(比如k8s环境中检测节点故障,并动态维护集群节点状态)。因此,反熵方式适合节点数固定且有限的集群实现数据一致性。
谣言传播
谣言传播(Rumor mongering/ Hot-stuff Propagation),当一个节点有“新”信息(谣言)时,它会积极地向其他节点传播。如果一个节点收到了它之前未曾听闻的谣言,它也会变成一个活跃的传播者,继续向外散播。为了避免谣言无限传播,可以设置传播次数上限,或者当一个节点发现其大多数邻居都已经知道这个谣言时,它就停止主动传播,转为仅在被询问时才告知(即从“活跃”转为“被动”)。
// 定期执行,先随机选择集合S中的s1
// s1再随机选取集合S中的任意其他节点
// 不断解决两两之间的数据冲突
// 最终整个集合中的对象都会达成数据一致性
FOR SOME s1 belong to S DO
ResolveDifference[S,s1)
END LOOP
如图所示,当节点A有新数据时,会成为活跃节点,然后向集群中节点B,节点E传播该数据,节点C收到新数据之后也变成了活跃节点,然后向节点D传播新数据,这样其他节点都能更新到新数据。

未完待续
很高兴与你相遇!如果你喜欢本文内容,记得关注哦!!!
技术圈的“绯闻女孩”:Gossip是如何把八卦秘密传遍全网的?的更多相关文章
- 英语口语练习系列-C21-美式幽默
1. 基础词汇 1.1 back [bæk] n. 后背 on the back 靠着背 sleep on the back 仰着睡 back of the chair 椅子的后背 stab sb. ...
- 分布式的CAP理论
CAP是强一致性.可用性(实时可用).分区容忍性: Consistency(一致性). Availability(可用性).Partition tolerance(分区容错性) 一般来说 P 是前提. ...
- 分布式一致性协议之:Gossip(八卦)算法
Gossip算法因为Cassandra而名声大噪,Gossip看似简单,但要真正弄清楚其本质远没看起来那么容易.为了寻求Gossip的本质,下面的内容主要参考Gossip的原始论文:<<E ...
- Gossip算法
Gossip算法因为Cassandra而名声大噪,Gossip看似简单,但要真正弄清楚其本质远没看起来那么容易.为了寻求Gossip的本质,下面的内容主要参考Gossip的原始论文:<<E ...
- [Hyperledger] Fabric系统中 peer模块的 gossip服务详解
最近一直在看fabric系统中的核心模块之一——peer模块.在看peer的配置文件core.yaml的信息时,对其中的gossip配置选项很感兴趣.看了一上午,还是不能明白这个选项到底什么意思呢?表 ...
- 【协议】5、gossip 协议
Gossip是一种去中心化.容错并保证最终一致性的协议. Background:分布式环境 Gossip是为了解决分布式遇到的问题而设计的.由于服务和数据分布在不同的机器上,节点之间的每次交互都伴随着 ...
- Consul实现原理系列文章2: 用Gossip来做集群成员管理和消息广播
工作中用到了Consul来做服务发现,之后一段时间里,我会陆续发一些文章来讲述Consul实现原理.这篇文章会讲述Consul是如何使用Gossip来做集群成员管理和消息广播的. Consul使用Go ...
- 浅谈集群版Redis和Gossip协议
昨天的文章写了关于分布式系统中一致性哈希算法的问题,文末提了一下Redis-Cluster对于一致性哈希算法的实现方案,今天来看一下Redis-Cluster和其中的重要概念Gossip协议. 1.R ...
- 一万字详解 Redis Cluster Gossip 协议
Redis Cluster Gossip 协议 大家好,我是历小冰,今天来讲一下 Reids Cluster 的 Gossip 协议和集群操作,文章的思维导图如下所示. 集群模式和 Gossip 简介 ...
- Java实现画八卦
八卦是由多个圆叠加而成,如果我们让每个圆都有自己的颜色,那么具体结构便一目了然,如下图所示: 显然只要令对应的圆颜色相同,就能达到我们预期的效果. 用Java就能轻松画出来: import java. ...
随机推荐
- .Net Core Winform 缩放比例不是100%设置界面只能看到一半问题
<PropertyGroup> <TargetFramework>net8.0-windows</TargetFramework> <Nullable> ...
- docusaurus简单使用
前言 docusaurus是一款使用markdown编写手册文档的工具,同类竞品有vitePress (放弃不维护的vuepress吧) 目前来看,比后者多了10k个start. docusaurus ...
- TSNE 初步认识
简介 文章链接 https://www.jmlr.org/papers/volume9/vandermaaten08a/vandermaaten08a.pdf 讲解的比较好的链接 https://zh ...
- 解决EasyExcel读取日期为1905年
问题 用EasyExcel导入Excel的时候读取日期出现问题,部分日期读取变成1905年 Excel中的日期格式比较特别,是yyyy.MM格式的,和数字类型的小数非常相似 和Excel中的日期对不上 ...
- 一文说清楚ETL与Kafka如何实现集成
ETL与Kafka为何需要集成? 随着企业对实时流数据的处理要求越来越高,很多企业都把实时流数(日志.实时CDC采集数据.设备数据-)先推入到kafka中,再通过ETL对kafka中的数据进行消费通过 ...
- ETL数据集成丨PostgreSQL数据迁移至Hive数据库
PostgreSQL数据迁移至Hive数据库 在现代企业数据架构中,将数据从关系型数据库如PostgreSQL迁移到分布式数据仓库系统如Hive,是一项至关重要的任务,旨在实现数据的高效存储.处理与分 ...
- 如何理解hadoop Zookeeper Phoenix HBase Hive Mapreduce HDFS spark yarn之间的关系
以前电商平台数据量很小,现在有一份 PB 级的超大数据需要分析统计,比如对用户每日的关键词搜索进行词频统计,能够精琢定位用户需求. 我们以前的方法是使用 oracle 等传统数据库或者写 python ...
- ETL 是什么?不信你看不懂!--九五小庞
ETL,全称 Extract-Transform-Load,它是将大量的原始数据经过提取(extract).转换(transform).加载(load)到目标存储数据仓库的过程.ETL 虽然大部分应用 ...
- Windows11正式版如何设置电脑自动开机的问题
有很多雨林木风系统的用户都不知道如何设置电脑自动启动吧?其实,这个问题很容易解决的,本文中,我们雨林木风小编就来分享Windows 11正式版设置电脑自动开机的方法.让我们看看吧. 在 Win11 电 ...
- Umi 约定式路由解析
可以少去理解一些不必要的概念,而多去思考为什么会有这样的东西,它解决了什么问题,或者它的运行机制是什么? 1. 什么是路由 路由是根据不同的 URl 地址展示不同的内容或页面.组件.一个针对 Reac ...