分布式共识算法及落地

news2024/9/22 21:26:52

摘要

本文介绍常见的分布式共识算法,使用场景,以及相关已经落地了的程序或框架

1. 为什么要分布式共识算法

在分布式系统中,不同节点之间可能存在网络延迟、故障等原因导致彼此之间存在数据不一致的情况,为了保证分布式系统中的数据一致性,因此需要引入共识算法。

在共识算法中,节点通过相互通信来传递数据,并根据一定的规则进行数据处理和验证。一旦多个节点达成一致,系统就会根据达成的共识状态来执行相应的操作。

例如Paxos算法、Raft算法、ZAB等。

2. 算法对比

Paxos和Raft都是强一致性算法,ZAB是最终一致性。
Raft算法中只有leader对外提供服务,follower仅仅是作为副本,也就是一个Raft集群的性能与集群节点数量无关,至于leader的性能有关(可以通过mutil raft提高系统性能,注意是提高整个系统的性能而不是提高单个raft集群的性能)

ZAB算法和Raft算法很详细,都有领导选举和日志复制过程。ZAB中follower节点是可以的,而都经过leader,这样就导致哪怕集群达成共识(过半数节点同步了leader的数据),依旧存在某些节点还未达成与leader数据同步,可能存在读取旧数据。

raft与zab的详细对比可以参考:https://www.zhihu.com/question/28242561
Paxos是强一致的,算法比较难理解就不多阐述

3.共识算法的落地

刚刚讲的都是理论算法,大家需要实现这些算法到具体的应用中,不同的系统虽然使用的是同一个算法,但是具体细节上可能会有差异(例如HDFS是复现GFS论文的产物),但是核心不会变,分布式共识算法

我们知道节点数据同步需要同步,但是这些强一致性算法并不适用于数据库主从同步(OLAP或OLTP系统)。原因就是强一致性必然会造成大量的性能损失,这是DB无法接受的。

那么哪些场景需要使用强一致性的算法呢?注册中心
为什么注册中心需要分布式共识算法?
因为注册中心原本就是一个小的存储系统,存储了集群中(或者微服务集群)所有的配置信息,并且可能频繁出现服务或者节点的上下线,需要保证注册中心的高可用则必须要副本冗余,有了副本必然就出现主从数据同步,并且需要强一致性保证服务发现不会出错,由于存储的数据量很小,所有强一致性造成的性能损失也是可以接受的。

4. 常见落地

常见的注册中心框架有nacos(spring cloud),eureka(spring cloud),zookeeper(hadoop),consul,etcd(k8s)

不同注册中心的选型和对比可以看这:https://juejin.cn/post/7068065361312088095

在这里插入图片描述

上图中zookeeper应该是使用ZAB算法,ZAB算是Paxos的一种演变。
刚刚说了ZAB并不能保证强一致性,为什么这里zookeep又是CP,可以保证强一致性呢?
原因:zookeeper在实现ZAB后,还加入了一些特殊操作,可以保证zookeeper的强一致性,但是ZAB算法理论并不是强一致性,这就是算法理论和落地之间的不同

eureka使用的是自己设计的一套共识算法,不能保证强一致性,这里不展开了。

具体可以看:https://blog.csdn.net/trntaken/article/details/108949114
zookeeper原生客户端API和Curator客户端都提供了该sync()方法,调用sync()方法之后,zookeeper集群会保证集群所有节点数据都是一致性的,此时客户端再去任意节点读取数据,都能读取最新的数据。

如何选择一个合适的注册中心呢?

这里涉及到技术选型,个人认为主要关注 是否满足需求社区活跃度使用成本这几个方面,就不展开了。

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

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

相关文章

【Qt】消息机制和事件

文章目录 事件event()事件过滤器案例:检测鼠标事件案例:定时器 事件 事件(event)是由系统或者 Qt 本身在不同的时刻发出的。当用户按下鼠标、敲下键盘,或者是窗口需要重新绘制的时候,都会发出一个相应的事…

微信小程序进阶——后台交互个人中心授权登录

目录 一、小程序登录微信登录接口演示 1.1 项目导入 1.2 method1 1.3 method2 二、小程序授权登录 2.1 登录过程 2.1.1 详解 2.1.2 图解 2.2 后端代码导入 2.3 前端代码导入 ​编辑 2.4 案例演示 前端代码如下: 2.4.1 前端调用接口地址 2.4.2 个人中…

Power BI 傻瓜入门 5. 准备数据源

本章内容将介绍: 定义Power BI支持的数据源类型探索如何在Power BI中连接和配置数据源了解选择数据源的最佳做法 现代组织有很多数据。因此,不用说,微软等企业软件供应商已经构建了数据源连接器,以帮助组织将数据导入Power BI等…

瑞萨e2studio(27)----使用EZ-CUBE3烧录

瑞萨e2studio.27--使用EZ-CUBE3烧录 概述视频教学样品申请引脚配置EZ-CUBE3 仿真器开关设置对RA族MCU进行Flash编程蓝色 LED 指示灯的状态信息 概述 EZ-CUBE3(CYRCNEZCUBE03)是具有Flash存储器编程功能的片上调试仿真器,可以用于调试MCU程序…

合同管理怎么做?套用Excel合同管理台账模板,真可以省心省力!

对于从事日常行政办公管理的人来说,最难受得就是各种合同乱糟糟,合同数据又多又杂,一不小心就会出错,而且有的合同数据到期了我们太忙也不知道,所以就很麻烦…… 想做好合同台账,其实很简单,今天…

基于stm32控制的ESP8266在设备模式下通讯

一、文章中要用的指令 指令作用ATUART115200,8,1,0,0之前的51通讯是9600,这里的321用的是115200,需要改一下波特率ATCWMODEXX是1代表station(设备)模式 ,X是2代表AP(路由)模式 ,X是…

微信小程序之个人中心授权登录

🎬 艳艳耶✌️:个人主页 🔥 个人专栏 :《Spring与Mybatis集成整合》《Vue.js使用》 ⛺️ 越努力 ,越幸运。 1.了解微信授权登录 微信登录官网: 小程序登录https://developers.weixin.qq.com/miniprogram/d…

YOLOv5源码中的参数超详细解析(2)— 配置文件yolov5s.yaml(包括源码+网络结构图)

前言:Hello大家好,我是小哥谈。配置文件yolov5s.yaml在YOLOv5模型训练过程中发挥着至关重要的作用,属于初学者必知必会的文件!在YOLOv5-6.0版本源码中,配置了5种不同大小的网络模型,分别是YOLOv5n、YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x,其中YOLOv5n是网络深度和宽度最小…

5G技术的飞速发展:连接未来

随着科技的日益进步,5G通讯技术已经成为了全球科技领域的热门话题。5G,即第五代移动通信技术,带来的不仅仅是更快的网络速度,它的高带宽和低延迟特性将为未来的数字世界奠定基础。 速度与效率的飞跃: 5G技术的最大亮点是它极高的下…

App分发的策略和注意事项

当今的数字化时代中,移动应用程序已经成为了人们生活中不可或缺的一部分。随着智能手机的普及和移动互联网的快速发展,应用程序的分发方式也变得越来越多样化。 App分发是指将移动应用程序通过特定的渠道传递给终端用户的过程。在应用程序开发完成后&am…

js轮转数组

给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 示例 1: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: [6,7,1,2,3,4,5] 向右轮转 3 步: [5,6,7,1,2,3,4…

OpenCV+QT实现的数字图像处理算法合集

源码下载地址: 基于OpenCV和QT的图像处理源码 图像预处理 灰度处理 灰度直方图 灰度均衡 梯度锐化 Laplace锐化 边缘检测 Roberts Sobel Laplace Prewitt canny Krisch 噪声 椒盐噪声 高斯噪声 滤波 均值滤波 中值滤波 双边滤波 形态学滤波 高斯滤波 图像变…

牛客网刷题-(1)

🌈write in front🌈 🧸大家好,我是Aileen🧸.希望你看完之后,能对你有所帮助,不足请指正!共同学习交流. 🆔本文由Aileen_0v0🧸 原创 CSDN首发🐒 如…

工作中几个问题的思考

对于需要并行多公司并行处理的任务,方案是什么? 多线程、并行流、并发库(ExecutorService、Futrue、Callable),分布式计算(1)按照公司ID分片 (2)按照业务类型分片 处理…

当我让文心一言写个代码来庆祝1024程序员节,它写的代码是……

先让它写个自我介绍吧~ 大家好,我是一个人工智能语言模型,我的中文名是文心一言,英文名是ERNIE Bot。我可以协助您完成范围广泛的任务并提供有关各种主题的信息,比如回答问题,提供定义和解释及建议。如果您有任何问题…

单链表的实现(全注释promax版)

目录 前言: 哨兵位: 链表的概念 链表的相关操作: 链表的创建: 打印链表: 申请新节点: 链表的尾插: !!!对于传参中二级指针的解释: 链表的…

解决使用WebTestClient访问接口报[185c31bb] 500 Server Error for HTTP GET “/**“

解决使用WebTestClient访问接口报[185c31bb] 500 Server Error for HTTP GET "/**" 问题发现问题解决 问题发现 WebTestClient 是 Spring WebFlux 框架中提供的用于测试 Web 请求的客户端工具。它可以不用启动服务器,模拟发送 HTTP 请求并验证服务器的响…

【UCAS自然语言处理作业一】利用BeautifulSoup爬取中英文数据,计算熵,验证齐夫定律

文章目录 前言中文数据爬取爬取界面爬取代码 数据清洗数据分析实验结果 英文数据爬取爬取界面动态爬取 数据清洗数据分析实验结果 结论 前言 本文分别针对中文,英文语料进行爬虫,并在两种语言上计算其对应的熵,验证齐夫定律github: ShiyuNee…

Java Static关键字 单例设计模式

类变量 类变量(静态变量):有static修饰,属于类,在计算机中只有一份,被类的所有对象共享 可以通过类名访问,也可以通过对象名访问,但是推荐用类名访问类变量一般用public修饰&#xf…

Maven 生命周期clean default size含义

clean 负责清理工作,清理上一次项目构建产生的一些文件,如编译后的字节码文件,打包后的jar包文件 default 整一个项目构建的核心工作,如编译,测试,打包,安装,部署等等 size 生成报告…