集群往往是由多个节点共同组成的,当一个节点加入集群或者一个节点从集群中下线的时候,都需要让集群中其他的节点知道,这样才能将数据信息分享给新节点而忽略下线节点。

A、B、C节点之间可以互相传递消息,但是D节点在下线之后会被广播告诉其他存活节点。

这样的广播协议就是今天要说Gossip协议,Gossip协议也叫Epidemic协议(流行病协议),当一个消息到来时,通过Gossip协议就可以像病毒一样感染全部集群节点,当然我们利用的是它这个极强的散播能力。

Gossip的过程是由一个种子节点发起的,当一个种子节点有信息需要同步到网络中的其他节点时,它会随机的选择周围几个节点散播消息,收到消息的节点也会重复该过程,直至最终网络中所有的节点都收到了消息。这个过程可能需要一定的时间,所以不能保证某个时间点所有的节点都有该条消息,但是理论上最终所有节点都会收到消息,因此它是一个最终一致性协议。

Gossip协议的特点:

Gossip协议是周期性散播消息,每隔一段时间传播一次
被感染的节点,每次可以继续散播N个节点
每次散播消息时,都会选择尚未发送过的节点进行散播
收到消息的节点,不会向发送的节点散播
同一个节点可能会收到重复的消息,因为可能同时多个节点正好向它散播

集群是去中心化的,节点之间都是平等的
消息的散播不用等接收节点的ack,即消息可能会丢失,但是最终应该会被感染

我们来看个例子:

种子节点是A
A节点选择B、C节点进行散播
C散播到D,B散播D和E,可以发现D收到两次
D散播到F,最终整个网络都同步到了消息

Gossip有点类似图的广度优先遍历算法,一般用于网络拓扑结构信息的分享和维护,像redis、consul都有使用到。

【基础算法】Gossip协议相关推荐

  1. Gossip协议详解

    起源 Gossip protocol 也叫 Epidemic Protocol (流行病协议),是基于流行病传播方式的节点或者进程之间信息交换的协议..Gossip protocol在1987年8月由 ...

  2. Dynamo涉及的算法和协议——p2p架构,一致性hash容错+gossip协议获取集群状态+向量时钟同步数据...

    转自:http://www.letiantian.me/2014-06-16-dynamo-algorithm-protocol/ Dynamo是Amazon的一个分布式的键值系统,P2P架构,没有主 ...

  3. Redis Cluster Gossip 协议详解

    Redis Cluster Gossip 协议 大家好,我是历小冰,今天来讲一下 Reids Cluster 的 Gossip 协议和集群操作,文章的思维导图如下所示. 集群模式和 Gossip 简介 ...

  4. Gossip协议的P2P会员管理

    阅读此论文主要目的在于理解gossip协议及其背后的原理,此部分详细翻译,其余部分看时间 文章标题:Gossip协议的P2P会员管理 作者:Ayalvadi J. Ganesh, Anne-Marie ...

  5. 一万字详解 Redis Cluster Gossip 协议

    大家好,我是历小冰,今天来讲一下 Reids Cluster 的 Gossip 协议和集群操作,文章的思维导图如下所示. 集群模式和 Gossip 简介 对于数据存储领域,当数据量或者请求流量大到一定 ...

  6. gossip协议与memberlist实现

    gossip协议 gossip协议是基于流行病传播传播方式的节点或者进程之间信息交换的协议.主要在分布式系统中使用gossip协议来达到数据的最终一致性,利用一种随机的方式将信息传播到整个网络中,并在 ...

  7. 分布式入门:常用的分布式基础算法

    摘要: 研究生期间分布式课程的小结吧.... 中间件在分布式系统中的地位和角色 为了使种类各异的计算机和网络都呈现为单个的系统,分布式系统常常通过一个"软件层"组织起来,该层在逻辑 ...

  8. NS2相关学习——可靠的MANET应用程序的Gossip协议分析

    好久不写,应该努力啦!老师把这篇论文给了我,现在还不知道它在讲什么,来边翻译边学习吧! 文章链接:https://www.researchgate.net/publication/316844643_ ...

  9. 关于Gossip协议的几个问题

    本文来说下Gossip 协议的几个问题 文章目录 概述 Gossip是什么 原理 图解 发送消息 可扩展性 失败容错 健壮性 本文小结 概述 Gossip是一种去中心化.容错并保证最终一致性的协议.它 ...

最新文章

  1. NDO中的ActiveRecord 简介 2——强类型的活动记录
  2. matlab在图片上显示文字颜色,科学网-解决matlab saveas printf保存图片时 colorbar中的字体颜色发生改变-肖鑫的博文...
  3. auto-sklearn详解
  4. [转]C++中的static关键字的总结
  5. Java Object 类 深入分析
  6. MySQL安装图解 地址
  7. ORACLE RAC如何增加节点
  8. 从源码安装mysql_从源代码安装mysql
  9. tcpip协议服务器端总结,TCPIP详解-卷一-协议-10.9小结
  10. Java原生http请求调用企业微信api,获取打卡记录
  11. json 格式字符串
  12. Burpsuite 上
  13. Excel 函数 自定义规则 VBA 实现 实时 语音 声音 提示 功能 股票 数据 资料 获取 盯盘 助手 K线图 模板
  14. Unity3D游戏开发介绍
  15. Android系统电池管理(PowerManagerService)框架分析及其在实体设备和虚拟设备上的差异(一)
  16. java printerjob打印_利用PrinterJob类实现打印控制
  17. 翟天临之后,大连博士细数区块链博士圈那些事……
  18. 安装交叉编译工具:arm-himix200-linux
  19. 爱了爱了!Android平台HTTPS抓包解决方案及问题分析,面试必问
  20. javax.mail.MessagingException: 500 Error: bad syntax问题

热门文章

  1. 【MySQL从入门到精通】【高级篇】(九)InnoDB的B+树索引的注意事项
  2. 彻底搞懂MySQL的索引
  3. 苹果LIVE PHOTOS实况照片转普通静态照片jpg
  4. 155个JavaScript基础问题(126-135)
  5. layui 自定义表格行高,自适应
  6. 如何通过ps把彩色照片转换为黑白素描
  7. 道高一尺 魔高一丈 内存泄漏智能指针
  8. C语言中统计英文单词的个数
  9. java web架构配置_javaweb(1) tomcat配置和web程序结构
  10. C++设计模式17:中介者模式