分布式协议-Gossip协议

举报
object 发表于 2024/04/18 19:36:38 2024/04/18
【摘要】 Gossip背景在分布式系统中,不同的节点进行数据/信息共享是一个基本的需求。一种比较简单粗暴的方法就是集中式发散消息,简单来说就是一个主节点同时共享最新消息给其他所有节点,比较依赖中心化系统,不过过于依赖中心节点,存在单点风险。于是分散式发散消息的Gossip协议诞生Gossip协议简介Gossip直译即流言蜚语的意思,比喻容易传播且传播速度快。Gossip协议具有随机传播特性,这是Gos...

Gossip背景

在分布式系统中,不同的节点进行数据/信息共享是一个基本的需求。

一种比较简单粗暴的方法就是集中式发散消息,简单来说就是一个主节点同时共享最新消息给其他所有节点,比较依赖中心化系统,不过过于依赖中心节点,存在单点风险。于是分散式发散消息的Gossip协议诞生

Gossip协议简介

Gossip直译即流言蜚语的意思,比喻容易传播且传播速度快。

Gossip协议具有随机传播特性,这是Gossip协议的主要特点。

Gossip协议是一种允许在分布式系统中共享状态的去中心化通信协议,通过这种通信协议,我们可以将信息传播给网络或集群中的所有成员。

Gossip协议应用

Redis、Apache Cassandra、Consul等使用了Gossip协议。

Redis举例:

Redis Cluster是一个典型的分布式系统,分布式系统中的各个节点需要互相通信。既然要相互通信就要遵循一致的通信协议,Redis Cluster中的各个节点基于Gossip协议来进行通信共享信息,每个Redis节点都维护了一份集群的状态信息。

Redis Cluster的节点之间会互相发送多种Gossip消息:

  • MEET: 在Redis Cluster中的某个Redis节点上执行ClUSTER MEET in port命令,可以像指定的Redis节点发送一条MEET消息,用于将其添加进Redis Cluster成为新的Redis节点。
  • PING/PONG:Redis Cluster 中的节点都会定时地向其他节点发送PING消息,来交换各个节点状态消息,检查各个节点状态,包括在线状态、疑似下线状态PFAIL和已下线状态FAIL。
  • FAIL: Redis Cluster 中的节点A发现B节点PFAIL,并且在下线报告的有效期内集群中半数以上的节点将B节点标记为 PFAIL,节点A就会向集群广播一条FAIL消息,通知其他节点将故障节点B标记为FAIL.
  • ....

有了Redis Cluster之后,不需要专门部署Sentinel集群服务了。Redis Cluster相当于内置了Sentinel机制,Redis Cluster内部的各个节点通过Gossip协议互相探测健康状态,在故障时可以自动切换。

Gossip协议消息传播模式

Gossip设计了两种可能的消息传播模式:反熵和传谣

  • 熵:即混乱的意思: 反熵主要体现在随机上,集群中的节点通过随机选择其他节点,通过推、拉、推拉的方式进行数据传播。但是对于节点过多以及节点动态变化的场景不太实用。
  • 谣言:即热点传播的意思:谣言主要体现在热点上,集群中的节点获取了新的节点后,就会成为活跃点,周期性练习其他节点“传播谣言”,知道所有节点都存储了该数据。适用于节点多的情况,但是传输的数据包不易过大。

总结:

  • 反熵会传播节点所有的数据,谣言仅传播节点新增数据
  • 反熵一般需要涉及成闭环
  • 谣言比较适合节点数量多以及动态的节点场景

Gossip协议的优势和缺陷

优势

  • 相比于其他分布式协议/算法来说,Gossip协议理解容易
  • 能够容忍网络节点的随意增加或减少,节点去中心化
  • 速度相对快,节点较多的场景比中心化节点传播的方式速度更快

劣势

  • 消息需要多轮传播才能传播到真个网络,强调的是最终一致性
  • 拜占庭将军问题,不允许恶意节点
  • 可能出现消息冗余问题,随机性可能导致重复传播
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。