分布式算法

news2024/12/23 10:39:51

分布式场景下的核心问题

分布式场景下困扰我们的3个核心问题(CAP):一致性、可用性、分区容错性。
1、一致性(Consistency):无论服务如何拆分,所有实例节点同一时间看到是相同的数据。
2、可用性(Availability):不管是否成功,确保每一个请求都能接收到响应。
3、分区容错性(Partition Tolerance):系统任意分区后,在网络故障时,仍能操作。

我们最为关注的是如何在高并发下保障 Data Consistency(数据一致性),因为在很多核心金融业务场景(如 支付、下单、跨行转账)中,为了避免资金问题,是需要强一致性结果的。
而分布式一致性算法就是保障 Data Consistency的强大利刃,它的目标是确保分布式系统中多个节点在读取或修改同一份数据时,产生相同结果的关键机制。这些算法对于保证分布式系统的一致性和可靠性至关重要。

常用的分布式算法
1、Paxos算法。
2、Raft算法。
3、ZAB(ZooKeeper Atomic Broadcast)算法

Paxos算法

Paxos算法是一种用于分布式系统中保障一致性的算法,由Leslie Lamport于1990年提出,被广泛应用于分布式系统中的一致性问题,如分布式数据库、分布式存储系统等。
该算法的主要目标是在一个由多个节点组成的分布式系统中,协调某个数据值并达成一致性,典型的少数服从多数的案例。

基本概念
1、提案: 由提案号(id)和提案内容(value)组成,其中id主要用于实现Paxos算法,而value对应在实际的分布式系统中为所需要修改数据的命令 或者 log信息。
2、角色: Paxos算法中抽象出来的概念,对应着实际分布式环境中的不同分工。主要角色包括提议者(Proposer)、附议者(Acceptor)和学习者(Learner)。

  • 提议者负责提出值的提案。
  • 附议者负责接受提案并投票。
  • 学习者负责学习已经达成一致的值。
    在这里插入图片描述

Proposer 提案者
提案者负责提出提案 (Proposal),Proposal信息包括提案编号 (Proposal ID) 和提议的值 (Value)。提案的value,可以是任何行为或者操作,比如传统转账场景,将用户的账号余额从0改为100,Paxos 协议统一抽象为value。 Proposer可以有多个,不同的Proposer可以提出不同的甚至互斥的value,比如提案者A消费(将变量Money-100),提案者B也消费(将变量Money-200),但对同一轮Paxose而言,最多只有一个value可以被批准,否则就乱套了。
Acceptor 附议者
Acceptor 从含义上来说就是除了当前Proposer以外的其他机器,他们之间完全平等和独立,Proposer需要争取超过半数(N/2+1)的 Acceptor 批准后,其提案才能通过,它倡导的“value”操作才能被所有机器(包括Proposer、Acceptor、Learner)所接受。
Learner 学习者
Learner 不参与选举,而是学习被批准的 value,在Paxos中,Learner主要参与相关的状态机同步流程。这里Leaner的流程就参考了Quorum议会机制,某个value需要获得超过半数的Acceptor 批准,才能真正被Learner学习到。

算法流程
1、准备阶段(Prepare阶段):提议者(Proposer)向所有Acceptor节点发起Prepare请求,携带全局唯一且递增的提案编号N,要求它们告诉提议者已经接受的最高提议号。如果接受者接受了轮次小于当前轮次的提案,那么它会更新自己的状态,拒绝当前轮次的提案。
2、承诺阶段(Promise阶段) :Acceptor节点接收到prepare请求后,会检查该请求的提议号是否比它已经接受的提议号更高。如果是,那么节点会更新自己的状态,承诺不再接受轮次小于当前轮次的提案。
Acceptor收到Prepare请求后,有两种情况:

  • 如果Acceptor首次接收Prepare请求, 设置MaxN=N, 同时响应ok。
  • 如果Acceptor不是首次接收Prepare请求,则:
    • 若请求过来的提案编号N小于等于上次持久化的提案编号ResN,则不响应或者响应error。
    • 若请求过来的提案编号N大于上次持久化的提案编号MaxN, 则更新MaxN=N,同时给出正确的响应。

3、承诺响应阶段(Acknowledge阶段) :在这个阶段,接受者会检查自己是否接受了当前提案。如果是,那么接受者会返回一个承诺响应,告诉提议者当前提案已经被接受。
4、提议的接受与决策 :当Acceptor节点接收到一个提议请求时,它会检查该提议的值是否比它已经接受的值更高。如果是,那么它会接受该提议,并向其他节点发送接受消息。当一个提议被大多数节点接受后,该提议就成为了决策,并被所有节点执行。
Proposer 获得 Accept 回复的信息之后,做如下判断:

  • 回复数量 > Acceptor 数量的1/2时,代表提交 value 成功,发送广播给所有的 Proposer、Learner,通知它们已提交的 value。
  • 回复数量 <= Acceptor 数量的1/2时,则重新开始,更新生成更大的提案号,跳转到准备阶段执行。
  • 收到响应error时,同样更新生成更大的提案号,转到准备阶段执行。

5、学习阶段(Learn阶段) :学习者会向所有接受者发送一个学习请求,接受者会返回已经接受的最大提案,使学习者能够学习到已经达成一致的值。

算法应用
Paxos算法具有高度容错特性,可以在某个节点宕机、网络异常、消息延迟等问题的情况下,快速且正确地在集群内部对某个数据达成一致。所以在很多业务场景中得到应用。比如:
1、Zookeeper使用一个类Multi-Paxos的共识算法作为底层存储协同的机制。
2、Google公司在其分布式锁中应用了Multi-Paxos算法。

Raft算法

基本概念
Raft 算法是一致性算的一种,用来解决分布式一致性问题。它提供了一种在计算系统集群中分布状态机的通用方法,确保集群中的每个节点都同意一系列相同的状态转换。
其主要目标是解决分布式系统中的领导者选举、日志复制和安全性等关键问题。

领导者选举与超时机制
在Raft算法中,服务器可以处于三种状态:领导者(leader)、跟随者(follower)和候选者(candidate)。正常情况下,集群中只包含一个 leader ,其余服务器都是 follower 。
跟随者通过投票选出领导者,只有得到“大多数”跟随者投票的服务器能成为领导者;领导者负责将命令同步给跟随者,只有被“大多数”跟随者确认的命令才能提交。
1、跟随者(Follower)
Fllower是所有节点的初始状态,内部都会有一个随机超时时间。这个超时时间,规定了在倒计时结束后仍然收不到Leader的心跳,Follower就会转变为Candidate。
2、候选者(candidate)
Follower在转变为Candidate后,超时时间重置,倒计时结束时就会向其他节点提名自己的实,拉取选票。
如果能获得半数以上(1/2以上,包含自己投给自己的)的选票,则当选为Leader,这个过程就叫做Leader选举。
所以节点最好是单数,避免极端情况下出现一个集群选举出两个Leader的脑裂问题。
3、领导者(leader)
Raft集群通过Leader与客户端进行交互,Leader不断处理写请求与发送心跳给Follower,Follower在收到Leader的心跳后,其超时时间会重置,即重新开始倒计时。
正常工作期间只有 Leader 和 Follower,且Leader至多只能有一个。
在这里插入图片描述

ZAB(ZooKeeper Atomic Broadcast)算法

基本概念
ZAB(Zookeeper Atomic Broadcast)是Zookeeper原子消息广播协议,是Zookeeper保证数据一致性的核心算法。该算法借鉴了Paxos算法,但又不像Paxos那样是一种通用的分布式一致性算法,而是特别为Zookeeper设计的支持崩溃恢复的原子广播协议。
在Zookeeper中,主要依赖ZAB协议来实现数据一致性。基于该协议,Zookeeper实现了一种主备模型(即Leader和Follower模型)的系统架构,保证集群中各个副本之间数据的一致性。通过一台主进程(Leader)负责处理外部的写事务请求,然后将数据同步到其他Follower节点,如果超过半数成功ACK,则主进程执行 Commit操作。

广播流程
ZAB 协议的消息广播过程使用的是一个原子广播协议,类似一个 二阶段(2PC) 提交过程。对于客户端发送的写请求,全部由 Leader 接收,Leader 将请求封装成一个事务 Proposal,将其发送给所有 Follwer ,然后,根据所有 Follwer 的反馈,如果超过半数成功响应,则执行 Commit 操作(先提交自己,再发送 Commit 给所有 Follwer)。
在这里插入图片描述

Gossip协议(八卦算法)

基本概念
Gossip协议,也被称为流言协议或八卦协议,是一种在分布式系统中用于节点之间通信和数据同步的算法。其设计灵感来源于人类社交中的流言传播机制,即一个人将消息告诉几个人,这些人再各自将消息传播给其他人,最终使大多数人得知该消息。Gossip协议因其简单、鲁棒、可扩展等特性而被广泛应用于解决大规模分布式系统中的一致性和可靠性问题。
最终一致性:Gossip协议实现的是一种最终一致性,即虽然不能保证在某个特定时刻所有节点都收到消息,但理论上最终所有节点都会收到消息。
两种类型
Anti-Entropy(反熵):以固定的概率传播所有的数据,确保系统中节点之间数据的一致性。
Rumor-Mongering(谣言传播):仅传播新到达的数据,系统有一定的概率会不一致,但开销较小。

流程
Gossip协议的流程通常包括以下几个步骤:
1、消息产生:当一个节点(称为种子节点)有状态需要更新到网络中的其他节点时,该过程开始。
2、随机选择节点:种子节点随机选择其周围的几个节点作为消息的初始传播对象。
3、消息传播:

  • Push-based(推模式):节点向其选中的节点传输数据(可能包括key、value、version等),接收到的节点更新本地数据,并重复该过程。
  • Pull-based(拉模式):节点请求其他节点的数据,接收到请求的节点将本地较新的数据推送给请求节点,请求节点更新本地数据。
    消息扩散:随着消息的传播,越来越多的节点会接收到消息,并继续向其他节点传播,直到最终所有节点都收到消息。

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

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

相关文章

开源链动 2+1 模式 S2B2C 商城小程序:社交电商团队为王的新引擎

摘要&#xff1a;本文深入探讨在社交电商领域中&#xff0c;团队的重要性以及如何借助开源链动 21 模式 S2B2C 商城小程序&#xff0c;打造具有强大竞争力的团队&#xff0c;实现个人价值与影响力的放大&#xff0c;创造被动收入&#xff0c;迈向财富自由之路&#xff0c;同时为…

从汽车高速线束角度浅谈中控屏黑屏、闪屏及信号阈值低故障-之AEM线束测试仪应用案例

故障成因和解决方案 随着车载信息娱乐技术的迅速发展&#xff0c;中控屏已经成为现代汽车的标配。然而&#xff0c;许多主机厂和消费者在车辆使用过程中常常遇到中控屏出现黑屏、闪屏以及信号阈值低等问题&#xff0c;给使用带来了诸多困扰。本文将从汽车高速线束的角度&#…

GPU服务器本地搭建Dify+xinference实现大模型应用

文章目录 前言一、显卡驱动配置1.检测显卡2.安装驱动 二、安装nvidia-docker二、安装Xinference1.拉取镜像2.运行Xinference3.模型部署 三、安装Dify1.下载源代码2.启动 Dify3.访问 Dify 四、Dify构建应用1.配置模型供应商2.聊天助手3.Agent 前言 本文使用的GPU服务器为UCloud…

MySQL: 数据类型介绍

文章目录 数据类型数值类型字符串类型日期类型 数据类型 数值类型 分为整型和浮点型: BIT类似于数据结构中的位图,BIT可以认为是一组二进制bit位. BIT(10)表示这个类型里就存最多10个bit位. 虽然TINYINT和SMALLINT更节省空间,但是还是更推荐使用INT或者BIGINT. 如果存储空间…

MySql语言操作数据库---增删改查数据库,表,数据

思维导图 SQL语言共分为四大类&#xff1a; 数据定义语言DDL:数据定义语言DDL用来创建数据库中的各种对象-----[库]、[表]、[视图]、[索引]、 数据操纵语言DML:(1) 插入&#xff1a;INSERT (2) 更新&#xff1a;UPDATE (3) 删除&#xff1a;DELETE 数据查询语言DQL:数据查询语…

Android 深层链接利用

为了能够从我们的应用程序打开另一个应用程序&#xff0c;我们通常通过声明我们想要访问的 Activity 类的名称来实现这一功能。但是&#xff0c;如果我们要打开的 Activity 在其清单文件中设置了android:exported"false" &#xff0c;则无法使用此方法。而其中一种替…

人工智能有助于解决 IT/OT 集成安全挑战

思科的一项研究表明&#xff0c;信息技术 (IT) 和运营技术 (OT) 融合所带来的安全问题可以通过人工智能 (AI) 解决&#xff0c;尽管该技术也可能被恶意行为者利用。 该报告由思科和 Sapio Research 联合发布&#xff0c;对 17 个国家的 1,000 名行业专业人士进行了调查&#x…

基于Java,SpringBoot和Vue的仓库管理商品管理电商后台管理系统

摘要 基于Java、Spring Boot和Vue的仓库管理系统是一个现代化的库存管理解决方案&#xff0c;旨在提高仓库运营效率和准确性。系统采用Java作为后端开发语言&#xff0c;结合Spring Boot框架简化配置和部署过程&#xff0c;实现业务逻辑和数据处理。前端使用Vue.js构建用户界面…

2024.9.25 数据分析学习

资料&#xff1a; 【开课吧哩堂】数据挖掘项目之用户流失预警系统_哔哩哔哩_bilibili 五万字 | Spark吐血整理&#xff0c;学习与面试收藏这篇就够了&#xff01;-腾讯云开发者社区-腾讯云 (tencent.com) 黑马程序员Spark全套视频教程&#xff0c;4天spark3.2快速入门到精通…

**CentOS7安装配置mysql**

CentOS7安装配置mysql 首先先将mysql57-community-release-el7.rpm解压出来 rpm -ivh mysql57-community-release-el7.rpmls /etc/yum.repos.d/ -l // 检查是否解压成功安装mysql yum install -y mysql-community-server可能会出现 GPG 密钥过期 rpm --import https://r…

一个可以免费上传样本图册的网站

在数字化时代&#xff0c;图像和样本图册的重要性不言而喻。无论是设计师、摄影师、艺术家还是普通用户&#xff0c;都需要一个可靠的平台来上传、分享和存储自己的作品。今天&#xff0c;给大家推荐一个可以免费上传样本图册的网站——【FLBOOK】&#xff0c;它为用户提供了无…

UE学习篇ContentExample解读------Blueprint_Communication-上

文章目录 总览描述批次阅览1.1 Basic communication with a target blueprint1.2 Basic communication via actor casting1.3 Blueprint communication via actor casting to child Blueprint1.4 Communicating with all actors of a specific class 概念总结致谢&#xff1a; …

关于预处理详解 #define 宏 #和##

#和## #运算符 #运算符将宏的⼀个参数转换为字符串字⾯量。它仅允许出现在带参数的宏的替换列表中。 #运算符所执⾏的操作可以理解为”字符串化“。 当我们有⼀个变量 int a 10; 的时候&#xff0c;我们想打印出&#xff1a; the value of a is 10 . 就可以写&#xff…

MySQL函数:流程函数

1.IF函数 基本语法&#xff1a;IF(expr1,expr2,expr3) 功能&#xff1a;如果value为true&#xff0c;返回t&#xff0c; 否则返回f 例如&#xff1a;这个里面expr1里面是false&#xff0c;返回的是Error&#xff0c;如果是true&#xff0c;返回OK select if(false, OK, Err…

开通微信视频号直播的流程

首先我们要了解什么是视频号&#xff1f; 视频号其实就是腾讯家的“抖音”/“快手”&#xff0c;可以发布视频和直播&#xff08;包括直播带货&#xff09;。 微信视频号不同于订阅号、服务号&#xff0c;它是一个全新的内容记录与创作平台&#xff0c;也是一个了解他人、了解…

适合二开的web组态软件

技术文档 官网网站&#xff1a;http://www.hcy-soft.com 体验地址&#xff1a;by组态[web组态插件] 可以广泛应用于化工、石化、制药、冶金、建材、市政、环保、电力等几十个行业。 一、产品简介 BY组态是完全自主研发的集实时数据展示、动态交互等一体的全功能可视化平台。帮…

OJ在线评测系统 后端基础部分开发 完善CRUD相关接口

完善相关接口 判斷编程语言是否合法 先从用户的请求拿到Language package com.dduo.dduoj.service.impl;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.dduo.dduoj…

OpenHarmony(鸿蒙南向)——平台驱动开发【SDIO】

往期知识点记录&#xff1a; 鸿蒙&#xff08;HarmonyOS&#xff09;应用层开发&#xff08;北向&#xff09;知识点汇总 鸿蒙&#xff08;OpenHarmony&#xff09;南向开发保姆级知识点汇总~ 持续更新中…… 概述 功能简介 SDIO&#xff08;Secure Digital Input and Outpu…

【Faster-Rcnn】训练与测试

✨ Blog’s 主页: 白乐天_ξ( ✿&#xff1e;◡❛) &#x1f308; 个人Motto&#xff1a;他强任他强&#xff0c;清风拂山冈&#xff01; &#x1f4ab; 欢迎来到我的学习笔记&#xff01; 1.提前准备 1.1. mobaxterm&#xff08;远程连接服务器&#xff09; 链接&#xff1a…

达索系统SOLIDWORKS2025新版本即将来袭

达索系统SOLIDWORKS2025新版本即将来袭 北京众联亿诚是达索官方授权的SOLIDWORKS经销商&#xff0c;专业经销SOLIDWORKS正版软件并提供免费试用、培训认证、二次开发等增值服务。 在CAD软件领域&#xff0c;SOLIDWORKS作为达索系统旗下的旗舰产品&#xff0c;一直以其优越的三…