【分布式系统】FLP、CAP、BASE、ACID理论简介

分布式系统一致性模型

在说FLP,CAP,BASE,ACID理论前,必须先说说分布式系统的一致性模型,它是其他理论的基础知识。

依次介绍几个相关的概念:

  • 分布式系统是由多个不同的服务节点组成,节点与节点之间通过消息传递进行通信和协调。根据消息传递的不同,分布式系统的运行模型,可以分为异步模型系统同步模型系统
    • 同步:系统中的各个节点的时钟误差存在上限;且消息传递必须在一定时间内完成,否则认为失败;同时各节点完成处理消息的时间是一定的。
    • 异步:系统中各个节点可能存在较大的时钟差异,同时消息传输时间是任意长的,各节点对消息进行处理的时间也可能是任意长的。
  • 一致性:对于给定一系列操作,分布式系统中的节点对处理结果达成一致。
  • 数据一致性:分布式系统各个节点具有关联性的数据在逻辑上完整且正确。

所以一致性模型就是要保证在分布式系统数据和状态的一致性。它又可以被分为强一致性模型弱一致性模型

强一致性模型

在强一致性模型中,一旦数据写入成功,在任意时间,任意副本都可以读取数据当前的新值,且所有后续操作都将在新值的基础上展开,直到这个数据被再次更新。

image-20240503175004758

弱一致性模型

与强一致性模型相对,在弱一致性模型中,数据写入成功后,某个副本上不一定能立刻读到新值也不确定何时能读到。但随着时间的迁移,不同副本上的关联数据最终会达到一致性状态。

最终一致性模型可看作是弱一致性模型的特殊情况,数据写入成功后,某个副本上不一定能立刻读到当前数据的新值,但可以保证在一段时间后最终读到并进行相关操作,这段时间被称为不一致窗口

image-20240503175248036

FLP、CAP、BASE、ACID理论简介

FLP理论

FLP理论:在网络可靠并且存在节点失效的异步模型系统中,不存在一个可以解决一致性问题的确定性算法。在异步通信的模型下即使只有一个进程失效,也没有任何算法能够保证其他进程达到一致性。
启示:在异步分布式系统中不存在任何场景下都能实现一致性的算法。

image-20240503175525321

FLP不可能理论给出了分布式一致性问题的上界!

CAP理论(ph试纸)

CAP:分布式系统的ph试纸,用它来测分布式系统的酸碱度

让我们先来看看CAP各个字母分别表示什么意思吧?

  • C:Consistency,一致性。分布式系统中多个节点进行数据共享时需要保证各个副本之间的数据一致性。这里的一致性指的是强一致性,即保证在每次写操作之后,在任意节点上读操作时读到的都是最新的数据。
  • A:Availability,可用性。是指系统为用户提供服务的能力。具有良好可用性的系统能够尽量避免用户操作失败和访问超时等情况。每个非故障节点需要保证在有限时间内对用户请求做出响应。即使系统中有部分节点出现故障,系统内仍能在正常响应时间内提供可用服务。
  • P:Partitiontolerance,分区容忍性。分区容错性中的“分区”是指网络意义上的区域划分。网络通信并非一直可靠,当节点间无法正常通信时就会产生网络分区。若此时分布式系统仍能正常对外提供服务,则该系统具有良好的分区容错性。

image-20240503175953944

根据上图即可明白:CAP理论指的是一个分布式系统中不可能同时满足一致性、可用性和分区容错性。选择满足其中两个要素时,就需要对剩下的一个做出部分程度的牺牲。在设计分布式架构时,需要根据系统特性在三个要素之间进行合理权衡和取舍。

当然不同选择会带来不同的结果,也就会设计出不同的产品,下图是一个示例:

image-20240503192242822

BASE理论(碱)

BASE在英文中是碱的意思。跟CAP理论一样,先来看看各个字母代表的含义吧!

  • BA:Basically Available,基本可用性。 指系统在突发故障时允许损失部分 可用性。这种损失通常包含两方面内容:一是响应时间的损失,即系统返 回结果的时间略微延长;二是部分系统功能的损失,即只要保证核心模块 可用,其他服务可能做一定的降级处理。
  • S:Soft state,软状态。 指在不影响系统整体可用性的情况下,允许数据 存在中间状态。即接受不同节点中的数据副本进行同步过程中存在延时。
  • E:Eventually consistent,最终一致性。 指系统中的数据副本经过不一 致窗口后最终会达到一致性状态。

BASE理论的核心思想是通过牺牲分布式系统的强一致性来获得高可用性。允许数据副本存在中间状态,只需要保证最终一致即可。

ACID理论(酸)

ACID在英文中是酸的意思。熟悉数据库理论的同学应该都知道,这是关系数据库中的事务的四个性质,这里再简单说明:

  • A:Atomicity,原子性。事务中的所有操作要么全部完成,要么全部不完成,不会结束在中间某个环节。
  • C:Consistency,一致性。事务必须使数据库从一个一致性状态转换到另一个一致性状态。这意味着在事务开始之前和事务结束以后,数据库的完整性没有被破坏。
  • I:Isolation,隔离性。隔离性是指一个事务所做的修改在最终提交之前,对其他事务是不可见的。这样可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。
  • D:Durability,持久性。一旦事务提交,其所做的修改就是永久性的,即使系统发生故障也不会丢失。持久性可以确保数据的可靠性和稳定性。

可以看到,ACID理论和BASE理论作为CAP理论的酸碱两面,前者追求一致性,后者追求可用性

ACID:CAP的“酸”,追求一致性BASE:CAP的“碱”,追求可用性
原子性(Atomicity)基本可用(Basically Available)
一致性(Consistency)软状态/柔性事务(Soft state)
隔离性(Isolation)最终一致性(Eventual consistency)
持久性(Durability)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java将文件目录转成树结构

在实际开发中经常会遇到返回树形结构的场景&#xff0c;特别是在处理文件系统或者是文件管理系统中。下面就介绍一下怎么将文件路径转成需要的树形结构。 在Java中&#xff0c;将List<String>转换成树状结构&#xff0c;需要定义一个树节点类&#xff08;TreeNode&#…

【linux】初步认识文件系统

初步认识文件系统 前置知识的简单了解简单回顾C语言的文件操作stdin&stdout&stderr 系统文件IOopen函数的返回值文件描述符fd打开文件背后的操作文件描述符的分配规则 前置知识的简单了解 文件包括了文件内容和文件属性两个部分(文件内容顾名思义就是文件里面的数据等…

VBA 读取sheet页中的指定区域数据,生成CSV文件

⏹待生成数据的sheet页 ⏹VBA代码 CreateObject("ADODB.Stream")&#xff1a;Microsoft ActiveX Data Objects (ADO) 库中的一个对象&#xff0c;用来处理文件的读写操作。Application.PathSeparator&#xff1a;系统默认的分隔符。Const startRowNum 4&#xff1a…

OpenCV(四)—— 车牌号识别

本节是车牌识别的最后一部分 —— 车牌字符识别&#xff0c;从一个完整的车牌图片到识别出车牌上的字符大致需要如下几步&#xff1a; 预处理&#xff1a;将车牌图片灰度化、二值化&#xff0c;并去除识别时的干扰因素&#xff0c;比如车牌铆钉字符分割&#xff1a;将整个车牌…

for循环赋值

在for循环内将i赋值给j的问题 for(int i0,ji1;i<5;i){//此时j只会等于1cout<<"i-"<<i<<" j-"<<j<<endl; }如图&#xff1a; 将j放入循环体后没问题 for(int i0;i<5;i){int j i1; cout<<"i-"<<…

关于一个error C2664错误代码的解析

具体错误信息如下所示&#xff1a; error C2664: “osgEarth::UID osgEarth::Util::ShaderFactory::addPreProcessorCallback(osg::Referenced *,std::function<void (std::string &,osg::Referenced *)>)”: 无法将参数 2 从“osgEarth::Util::PbrLightEffect::att…

40 生产者消费者模型

生产者消费者模型 概念 为何要使用生产者消费者模型&#xff0c;这个是用过一个容器解决生产者和消费的强耦合问题。生产者和消费者之间不需要通讯&#xff0c;通过阻塞队列通讯&#xff0c;所以生产者生产完数据之后不用等待消费者处理&#xff0c;直接扔给阻塞队列&#xf…

41.WEB渗透测试-信息收集-域名、指纹收集(3)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a; 易锦网校会员专享课 上一个内容&#xff1a;40.WEB渗透测试-信息收集-域名、指纹收集&#xff08;2&#xff09; 关于oneforall的安装…

DRF视图源码分析

DRF视图源码分析 1 APIView class GenericAPIView(APIView):pass # 10功能class GenericViewSet(xxxx.View-2个功能, GenericAPIView):pass # 5功能能class UserView(GenericViewSet):def get(self,request):passAPIView是drf中 “顶层” 的视图类&#xff0c;在他的内部主要…

SpringBoot+阿里云实现验证码登录注册及重置密码

开通阿里云短信服务 阿里云官网 创建API的Key 可以使用手机号或者刷脸来进行创建Key 创建成功 开通完成以后接下来实现代码请求阶段 配置maven依赖 <!-- 阿里云 oss 短信 依赖--><dependency><groupId>com.aliyun</groupId><artifactId>dysm…

Python的使用

1、打印&#xff1a;print&#xff08;‘hello’&#xff09; 2、Python的除法是数学意义上的除法 print&#xff08;2/3&#xff09; 输出&#xff1a;0.6666... 3、a18 a‘hello’ print(a) 可以直接输出 4、**2 表示2的平方 5、打印类型 print&#xff08;type&am…

【深度学习】第二门课 改善深层神经网络 Week 1 深度学习的实践层面

&#x1f680;Write In Front&#x1f680; &#x1f4dd;个人主页&#xff1a;令夏二十三 &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd; &#x1f4e3;系列专栏&#xff1a;深度学习 &#x1f4ac;总结&#xff1a;希望你看完之后&#xff0c;能对…

R语言学习—6—多元相关与回归分析

1、引子 xc(171,175,159,155,152,158,154,164,168,166,159,164) #身高 yc(57,64,41,38,35,44,41,51,57,49,47,46) #体重 par(marc(5,4,2,1)) #设定图距离画布边缘的距离&#xff1a;下5&#xff0c;左4&#xff0c;上2&#xff0c;右1 plot(x,y) 2、相关…

【华为 ICT HCIA eNSP 习题汇总】——题目集20

1、&#xff08;多选&#xff09;若两个虚拟机能够互相ping通&#xff0c;则通讯过程中会使用&#xff08;&#xff09;。 A、虚拟网卡 B、物理网卡 C、物理交换机 D、分布式虚拟交换机 考点&#xff1a;数据通信 解析&#xff1a;&#xff08;AD&#xff09; 物理网卡是硬件设…

webpack 常用插件

clean-webpack-plugin 这个插件的主要作用是清除构建目录中的旧文件&#xff0c;以确保每次构建时都能得到一个干净的环境。 var { CleanWebpackPlugin } require("clean-webpack-plugin") const path require("path");module.exports {mode: "de…

docker 基础命令

docker 安装 更新系统 sudo apt update sudo apt -y dist-upgrade安装docker sudo apt-get -y install ca-certificates curl gnupg lsb-release sudo mkdir -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/…

数据结构——链表(精简易懂版)

文章目录 链表概述链表的实现链表的节点&#xff08;单个积木&#xff09;链表的构建直接构建尾插法构建头插法构建 链表的插入 总结 链表概述 1&#xff0c;链表&#xff08;Linked List&#xff09;是一种常见的数据结构&#xff0c;用于存储一系列元素。它由一系列节点&…

双链表的应用

cf edu161 D. Berserk Monsters 思路&#xff1a; 因为考虑到&#xff0c;每个怪是否死亡与其左右的怪息息相关&#xff0c;再者&#xff0c;若当前怪死亡&#xff0c;周围怪的相邻信息也会产生变化&#xff0c;由此可以想到使用双链表进行维护&#xff0c;双链表的维护方式有…

STM32——中断篇

技术笔记&#xff01; 1 中断相关概念 1.1 什么是中断&#xff1f; 中断是单片机正在执行程序时&#xff0c;由于内部或外部事件的触发&#xff0c;打断当前程序&#xff0c;转而去处理这一事件&#xff0c;当处理完成后再回到原来被打断的地方继续执行原程序的过程。 在AR…

算法学习系列(五十四):单源最短路的综合应用

目录 引言一、新年好二、通信线路三、道路与航线四、最优贸易 引言 关于这个单源最短路的综合应用&#xff0c;其实最短路问题最简单的就是模板了&#xff0c;这是一个基础&#xff0c;然后会与各种算法结合到一块&#xff0c;就是不再考察单个知识点了&#xff0c;而是各种知…