网站建设规划方案ppt模板,wordpress美化框,新桥做网站,网站搭建的步骤目录 一、 什么是Gossip协议#xff1f;二、 Gossip协议的应用 #x1f4a1;三、 Gossip协议消息传播模式详解 #x1f4da;四、 Gossip协议的优缺点五、 总结#xff1a; #x1f31f;我的其他文章也讲解的比较有趣#x1f601;#xff0c;如果喜欢博主的讲解方式… 目录 一、 什么是Gossip协议二、 Gossip协议的应用 三、 Gossip协议消息传播模式详解 四、 Gossip协议的优缺点五、 总结 我的其他文章也讲解的比较有趣如果喜欢博主的讲解方式可以多多支持一下感谢 了解 Raft 算法 请看 Raft 算法详解比 Paxos 更简单 其他优质专栏 【SpringBoot】【多线程】【Redis】【✨设计模式专栏已完结】…等 如果喜欢作者的讲解方式可以点赞收藏加关注你的支持就是我的动力 ✨更多文章请看个人主页 码熔burning 一、 什么是Gossip协议
想象一下
场景 你在一个大型聚会上想告诉所有人一个重要消息比如“明天放假”传统方式 你挨个走到每个人面前告诉他们“明天放假” 效率太低人越多越慢 Gossip方式 你随机找到几个人告诉他们“明天放假” 然后这些人再随机告诉他们认识的其他人。 这样消息就像流言蜚语一样慢慢地在整个聚会上传播开来。
Gossip协议也叫流言协议就是模仿这种流言传播的方式。 它是一种去中心化的通信协议没有中心节点每个节点都平等地与其他节点通信最终将信息传播到整个网络。
正式定义
Gossip协议是一种基于节点随机选择的通信协议用于在分布式系统中传播信息。每个节点周期性地选择一些其他节点并与它们交换信息。通过这种方式信息可以在整个网络中快速、可靠地传播。
二、 Gossip协议的应用
Gossip协议非常适合用于构建大规模、去中心化、容错性强的分布式系统。 常见的应用场景包括 成员管理Membership Management 场景 一个集群中有成百上千个节点需要知道哪些节点是活着的哪些节点挂了。 Gossip应用 每个节点定期向其他节点“八卦”自己还活着的消息心跳。 如果一个节点长时间没有收到某个节点的心跳就认为该节点已经失效。 例子 Apache Cassandra、Consul等。 数据同步Data Synchronization 场景 多个节点存储相同的数据副本需要保证数据的一致性。 ️Gossip应用 当一个节点的数据发生变化时它会向其他节点“八卦”这个变化。 其他节点收到消息后会更新自己的数据。 例子 Amazon DynamoDB、Redis Cluster等。 故障检测Failure Detection 场景 快速发现集群中的故障节点。 Gossip应用 节点之间互相“八卦”其他节点的状态。 如果一个节点被多个节点报告为故障那么它就被认为是真的故障。 ❌ 路由信息传播Routing Information Propagation 场景 在P2P网络中节点需要知道如何找到其他节点。 ️Gossip应用 节点之间互相“八卦”自己知道的路由信息。 配置信息同步Configuration Synchronization 场景 多个节点需要保持配置信息的一致性。 ⚙️Gossip应用 当配置信息发生变化时一个节点会向其他节点“八卦”这个变化。
三、 Gossip协议消息传播模式详解
Gossip协议的核心在于消息的传播方式。不同的传播模式在效率、可靠性、资源消耗等方面各有侧重。以下是几种常见的Gossip协议消息传播模式的详细解释
Anti-Entropy (反熵)
原理 两个节点比如A和B定期进行数据交换交换彼此拥有的所有数据。 A和B比较各自的数据找出对方没有的数据然后互相更新。 这个过程就像两个房间互相交换垃圾然后各自清理最终达到干净的状态。 流程 节点A选择节点B进行通信。A和B交换各自的数据集例如所有键值对。A比较自己的数据集和B的数据集找出B缺少的数据然后将这些数据发送给B。B比较自己的数据集和A的数据集找出A缺少的数据然后将这些数据发送给A。A和B各自更新自己的数据集使其与对方保持一致。 特点 保证最终一致性 确保所有节点最终拥有相同的数据。 ✅数据量大 每次交换的数据量很大因为需要交换所有的数据。 效率低 由于数据量大交换过程比较耗时。 简单可靠 实现简单可靠性高因为会完整地同步数据。 适用场景 数据量较小一致性要求高的场景。例如小型配置信息的同步。 举例 假设节点A有数据{key1: value1, key2: value2}节点B有数据{key2: value2, key3: value3}。A和B交换数据后A会发现B缺少key1B会发现A缺少key3。A将key1: value1发送给BB将key3: value3发送给A。最终A和B都拥有{key1: value1, key2: value2, key3: value3}。
Rumor Mongering (谣言传播) ️
原理 一个节点比如A随机选择其他节点比如B将消息谣言发送给B。 B收到消息后如果之前没有收到过就将消息标记为已收到并继续随机选择其他节点传播。 ➡️如果B已经收到过该消息就停止传播但会以一定的概率称为“传播概率”继续传播。 当消息传播的次数达到一定阈值称为“停止阈值”时节点就会停止传播该消息。 流程 节点A产生一个新消息。A随机选择节点B将消息发送给B。B收到消息后检查是否已经收到过该消息 如果未收到过则将消息标记为已收到并随机选择其他节点继续传播。如果已收到过则以一定的概率继续传播否则停止传播。 重复步骤2和3直到消息传播的次数达到停止阈值。 特点 传播速度快 消息可以迅速传播到整个网络。 ⚡可能存在消息丢失 由于节点可能停止传播消息因此不能保证所有节点都能收到消息。 ⚠️资源消耗较低 每个节点只需要传播有限次数的消息。 需要设置合适的传播概率和停止阈值 这两个参数会影响消息传播的速度和可靠性。 ⚙️ 适用场景 对实时性要求高允许一定概率的消息丢失的场景。例如故障检测、路由信息传播。 举例 假设节点A产生一个新消息“明天放假”。A随机选择节点B将消息发送给B。B收到消息后如果之前没有收到过就将消息标记为已收到并随机选择节点C继续传播。C收到消息后如果已经收到过就以一定的概率比如50%继续传播否则停止传播。当消息传播的次数达到停止阈值比如10次时节点就会停止传播该消息。
Aggregation (聚合) ➕
原理 节点在传播消息的同时对消息进行聚合处理例如求和、平均值等。 每个节点将自己的数据与收到的数据进行聚合然后继续传播。 ➡️最终所有节点都会收到聚合后的数据。 ✅ 流程 每个节点都有自己的数据。节点A随机选择节点B将自己的数据发送给B。B收到A的数据后将自己的数据与A的数据进行聚合例如求和然后随机选择其他节点继续传播。重复步骤2和3直到所有节点都收到了聚合后的数据。 特点 减少消息传播的数据量 通过聚合可以减少消息传播的数据量提高效率。 适用于数据统计分析 可以方便地进行数据统计分析。 需要选择合适的聚合函数 聚合函数的选择会影响最终结果的准确性。 适用场景 需要对数据进行统计分析的场景。例如计算集群的平均负载、总请求数等。 举例 假设有三个节点A、B、C分别有数据1、2、3。A将自己的数据1发送给B。B收到A的数据后将自己的数据2与A的数据1进行求和得到3然后将3发送给C。C收到B的数据后将自己的数据3与B的数据3进行求和得到6。最终所有节点都收到了聚合后的数据6。
Push-Pull
原理 结合了Push和Pull两种方式。 ➡️⬅️节点既可以主动推送消息给其他节点Push也可以从其他节点拉取消息Pull。 Push方式用于快速传播新消息Pull方式用于修复消息丢失。 流程 节点A产生一个新消息。A随机选择节点B将消息推送给BPush。B收到消息后检查是否已经收到过该消息 如果未收到过则将消息标记为已收到。如果已收到过则忽略该消息。 节点定期从其他节点拉取消息Pull以修复消息丢失。 特点 提高了消息传播的效率和可靠性 Push方式可以快速传播新消息Pull方式可以修复消息丢失。 ✅需要设置合适的Push和Pull频率 这两个参数会影响消息传播的速度和可靠性。 ⚙️ 适用场景 适用于各种场景是比较常用的Gossip协议变种。例如成员管理、数据同步。 举例 假设节点A产生一个新消息“节点C加入集群”。A随机选择节点B将消息推送给BPush。B收到消息后如果之前没有收到过则将消息标记为已收到。每个节点定期从其他节点拉取消息Pull以确保自己拥有最新的集群成员信息。
四、 Gossip协议的优缺点
优点
去中心化 没有中心节点避免了单点故障提高了系统的可用性。 ️容错性强 即使部分节点失效消息仍然可以通过其他节点传播。 可扩展性好 可以很容易地添加新的节点而不会影响整个系统的性能。 ➕最终一致性 最终所有节点都会收到消息保证数据的一致性。 ✅简单易实现 协议本身比较简单容易实现和部署。
缺点
最终一致性 不能保证实时一致性存在一定的延迟。 ⏳消息冗余 消息可能会被重复传播浪费网络带宽。 ♻️收敛速度 消息传播的速度可能较慢取决于节点的数量和网络拓扑。 安全性 容易受到恶意节点的攻击例如传播虚假消息。
五、 总结
Gossip协议是一种非常强大的分布式通信协议适用于构建大规模、去中心化、容错性强的系统。 虽然存在一些缺点但可以通过一些优化手段来改善例如
控制消息传播的范围 限制每个节点传播消息的次数。 使用加密技术 防止恶意节点传播虚假消息。 优化网络拓扑 选择合适的节点进行通信提高消息传播的速度。 ️
希望这篇文章能够帮助你理解Gossip协议 记住Gossip协议就像流言蜚语一样通过节点之间的随机通信最终将信息传播到整个网络。 祝你学习愉快