常见集群算法解析

news2024/11/16 10:34:20

Gossip协议

Gossip协议简介

在这里插入图片描述

定义

Gossip protocol,又叫 Epidemic Protocol (流行病协议),也叫“流言算法” 、 “疫情传播算法”等。其名称已经形象的说明了算法的原理和工作方式

应用场景

  1. 分布式网络,无集中管理节点
  2. 节点间点对点传播信息

典型应用

  1. P2P
  2. Bitcoin
  3. Apache Cassandra、Redis cluster

Gossip协议优缺点

优点

简单

  1. 扩展性:网络节点可随意增加和修改
  2. 容错性:无中心节点,任意节点宕机不影响协议运行
  3. 去中心化:任意节点都可以发送消息

缺点

最终一致性

  1. 需要花费一定时间达到最终一致性
  2. 消息冗余
  3. 不适合超大规模集群(超过1000)
  4. 恶意节点传播垃圾信息

Gossip模式

模式1-Direct Mail

直邮模式:通知所有邻居更新信息,邻居节点收到消息后不会转发

在这里插入图片描述

优点

简单

缺点

  1. 难以达到最终一致性
  2. 节点消息可能丢失(图中黄色节点)
  3. 节点可能并没有连接(图中深红色节点)
  4. 容错性低
  5. 需要缓存发送失败的消息
  6. 种子节点压力大

应用场景

社交网络(朋友的朋友并不一定是你的朋友)

模式2-Anti-Entropy

反馈模式:集群中的节点,每隔一段时间随机选择1个节点,互相交换所有数据,然后进行同步,消除数据不一致

在这里插入图片描述

优点

最终一致性

缺点

  1. 信息同步的成本高
  2. checksum
  3. updated list
  4. 达到最终一致性的耗时较长

应用场景

节点数量不多,实现最终一致性,例如存储系统多副本一致性

模式3-Rumor mongering

谣言传播:收到更新消息后,自己成为“受感染节点”,周期性的传播更新消息,如果发现其他节点已经知道了消息,则按照一定概率将自己变为removed,不再传播消息

在这里插入图片描述

优点

  1. 最终一致性
  2. 传播信息少
  3. 达到一致性所需时间少

缺点

  1. 有一定概率可能不一致
  2. 节点数量不能太多,Redis官方文档最大1000

应用场景

节点经常变化的集群

Bully选举算法

Bully算法简介

Bully算法

当一个进程发现协调者(或 Leader)不再响应请求时,就判定其出现故障,于是它就发起选举,选出新的协调者,即当前活动进程中进程号最大者

Bully 的中文意思是“霸凌” ,但实际实现的时候,找最小的节点也可以,关键点在于“

关键假设

  1. 系统是同步的
  2. 进程在任何时候都可能失败,包括算法在执行的过程中
  3. 进程失败后停止工作,重启后重新工作
  4. 有失败监控者,它可以发现失败的进程
  5. 进程之间消息传递是可靠的
  6. 每一个进程知道自己和其他每一个进程的 ID 以及地址

Bully算法选举过程

在这里插入图片描述

step0:初始状态,P6为Leader

step1:P6故障

step2:P3 检测到 P6 故障,发起选举,向 P4、P5、P6 发送 Election 消息

step3:P4、P5 回复 P3 Alive 消息,说明自己还活着,P3 退出选举,等待 Victory 消息

在这里插入图片描述

step4:P4向P5、P6发送 Election 消息

step5:P5回复P4 Alive 消息,P4退出选举,等待 Victory 消息

step6:P5向P6发送 Election 消息

step7:P5未收到 Alive 消息,成功当选,向所有节点发送 Victory 消息,选举结束

Raft选举算法

Raft算法简介

Raft算法

Raft is a consensus algorithm that is designed to be easy to understand. It’s equivalent to Paxos in fault-tolerance and performance. The difference is that it’s decomposed into relatively independent subproblems, and it cleanly addresses all major pieces needed for practical systems

关键点

  1. 容易理解
  2. 算法明确划分为选举、复制、安全三个子问题

Raft实现

实现1-leader选举

在这里插入图片描述

  1. The client of the application makes requests only to and gets responses only from the leader server
  2. only be available when a leader has been successfully elected and is alive

实现2-日志复制

在这里插入图片描述

State machine replication:复制状态机,复制的是命令而不是数据,典型代表:Raft

Primary-backup system:主备复制,复制的是命令执行后的数据,典型代表:Zookeeper的ZAB

两者差别:是否能够容忍“非拜占庭错误”

在这里插入图片描述

Raft的实现

每个节点都有一个状态机和一致性模块,由一致性模块保证分布式一致性,节点之间复制的是 client 发送的命令,无论读写请求都需要进行一致性处理,因此可以容忍非拜占庭故障

Raft vs ZAB vs Paxos

RaftZABPaxos
分布式一致性弱于Paxos弱于Paxos最强
复制方式State machine replicationPrimary-backup systemState machine replication
读写方式读写leader,follower不接受请求读写leader,读follower任意节点都可以读写
是否有leader是,强leader是,强leader无,部分变种有Leader,但只是协调作用
复杂度比Paxos简单比Paxos简单复杂
特殊场景选举期间不能服务选举期间不能服务Livelock

Raft vs Zookeeper

  1. 如果你想内嵌分布式选举或者一致性功能,或者基于业务特性做一些小调整,选择Raft,例如MongoDB、etcd等
  2. 如果你想实现分布式选举或者一致性,但是不想自己去实现协议代码,选择Zookeeper,例如HDFS、Cassandra等
  3. 如果你不确定,请选择Zookeeper

Raft的资源

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/31626.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

同花顺l2数据接口的委托队列是什么?

我们都知道股票交易时有买方也有卖方,“买一”通俗理解就是此刻“买”价最“高”即第一的委托集合,卖一则是“卖”价最低的委托集合。 “一”并非指一笔委托或一手股票,它的背后是有多笔报价相同的买入或卖出委托组成,可能是主力…

cesium火箭发射,模型控制,模型动画,模型移动

起因:最近想做模型的动画,结果上网查资料,看到网上好多对于模型控制的文章都有限制。决定还是自己研究下。欢迎大家一起探讨,评论留言。 效果 火箭全部代码在最后 起步 模型控制,第一步当然是需要一个合适的模型&#…

链动2+1模式是否合法合规?它涉及多级传销吗?

根据国家《禁止传销条例》第2条规定,传销是指组织者或者经营者发展人员,通过对被发展人员以其直接或者间接发展的人员数量或者销售业绩为依据计算和给付报酬,或者要求被发展人员以交纳一定费用为条件取得加入资格等方式牟取非法利益&#xff…

【多线程】Thread的interrupt()

一、前言 如果子线程执行完毕终止状态,主线程再去调用interrupt()有什么效果?如果子线程还在执行过程中,主线程调用interrupt()有什么结果? 二、模拟实验 1、模拟子线程执行完毕再调用interrupt() ​ public class Test {publi…

2023年天津美术学院专升本报名考试须知

天津美术学院2023年高职升本科报考须知(一)专业考试1.报名方法: ①网上报名及缴费: 我校采取网上报名的方式,考生于2022年12月份(具体时间关注公众号“高职接本科”另行公告)(10:00-22:00)登录网站(网址&am…

web前端期末大作业 html+css学生心理 7页主题网页设计

⛵ 源码获取 文末联系 ✈ Web前端开发技术 描述 网页设计题材,DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业 | 家 | HTML期末大学生网页设计作业 HTML:结构 CSS:样式 在操作方面上运用了html5和css3, 采用了divcss结构、表单、…

Oculus Deeplink

DeepLink 初始化 platform sdk 后设置 应用启动回调判断应用打开的方式发起应用跳转 接收应用跳转 GroupPresence 本文档基于 GroupPresenceSample 脚本逻辑编写,展示通过群组状态发起用户邀请,以及响应对应回调。参考 Oculus 工程 SharedSpaces 使…

【安装教程】vscode安装教程(超详细)

Visual Studio Code(简称 VSCode)是一款由微软开发且跨平台的免费源代码编辑器。该软件支持语法高亮、代码自动补全、代码重构功能,并且内置了命令行工具和 Git版本控制系统。用户可以更改主题和键盘快捷方式实现个性化设置,也可以…

想裁剪视频时长,用电脑怎么裁剪视频时长

大家有没有碰到过这种一种情况,就是我们在社交平台上发布视频时,会因为视频时长过长这个问题而导致视频发布失败。那我们要怎么处理这个问题呢?其实我们可以使用一些剪辑软件,将视频裁剪,只截取视频里面较为精彩的部分…

hadoop集群安装(三):创建同步工具并安装jdk

文章目录说明分享环境创建同步工具编写脚本设置为系统命令安装jdk总结说明 搭建好集群虚拟机,新建同步工具并安装jdk,同步工具方便管理集群,某些操作和一条命令,同步所有节点,增加集群操作效率。 分享 大数据博客列表…

组件之间通过bus中央事件总线进行通信

案例完整代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widt…

66. SAP ABAP Function Module 的动态调用方式使用方式介绍

在本教程前面的步骤 7,我们介绍了 ABAP Function Module 的基本使用方法: 7. ABAP function module 的使用最近我的知识星球有朋友提问: 大佬,我想问一下动态获取到物料主数据的字段名之后,如何将获取到的字段名去与bapi中的字段名对应起来从而去修改物料主数据中对应的字…

多维时序 | MATLAB实现CNN-GRU多变量时间序列预测

多维时序 | MATLAB实现CNN-GRU多变量时间序列预测 目录多维时序 | MATLAB实现CNN-GRU多变量时间序列预测基本介绍模型特点程序设计学习总结参考资料基本介绍 本次运行测试环境MATLAB2020b&#xff0c;MATLAB实现CNN-GRU多变量时间序列预测&#xff0c;卷积门控循环单元。 模型特…

ComponentAce FlexCompress强大功能

ComponentAce FlexCompress强大功能 FlexCompress是一个高速压缩库&#xff0c;旨在为您的应用程序提供归档功能。此解决方案提供了灵活的压缩和强大的加密算法&#xff0c;使您可以快速轻松地将归档或备份功能集成到程序中。 FlexCompress包括我们新的独特技术&#xff0c;即交…

分片架构设计技巧

Elasticsearch集群设计技巧 ES的基本架构 节点可以配置为不同角色&#xff0c;通过选举Master管理集群Coordinating&#xff1a;协调节点&#xff1b;Master&#xff1a;管理节点&#xff1b;Data&#xff1a;数据存储节点 数据是按照索引分片的&#xff0c;而不是按照节点分片…

在C#方法中 out、ref、in、params 关键字的用法

out&#xff1a;关键字&#xff1a; 指定的参数在进入函数时会清空自己&#xff0c;必须在函数内部赋初值 ref关键字&#xff1a; 指定的参数必须在进入函数时赋初值&#xff0c;在函数内部可以重新赋值 In关键字&#xff1a; 指定的参数必须在进入函数时赋初值&#xff0c;…

MySQL进阶篇(五)- 锁

一、概述&#xff08;P121&#xff09; 锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中&#xff0c;除传统的计算资源&#xff08;CPU、 RAM、I/O&#xff09;的争用以外&#xff0c;数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性…

51、部署PaddleSeg的pp_liteseg到MNN框架、OpenVINO框架和OAK框架、NPU(RK3399 PRO)框架

基本思想&#xff1a;需要一个快的实例分割模型&#xff0c;由于需要配置oak使用&#xff0c;所以就记录和实现一下微软社区提供的思路&#xff0c;去部署PaddleSeg的轻量级(实际是语义)分割模型 所有的实验模型&#xff0c;花了两天。。。mmp 自己训练模型&#xff0c;开始整…

[附源码]java毕业设计药品销售管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

【AI】浅谈梯度下降算法(理论篇)

前言 在求解机器学习算法的模型参数&#xff0c;即无约束优化问题时&#xff0c;梯度下降&#xff08;Gradient Descent&#xff09; 是最常采用的方法之一&#xff0c;另一种常用的方法是最小二乘法。 目前正在学习这方面相关的内容&#xff0c;因此简单谈谈与梯度下降法相关…