分布式理论基础

文章目录

  • 1、理论基础
  • 2、CAP定理
    • 1_一致性
    • 2_可用性
    • 3_分区容错性
    • 4_总结
  • 3、BASE理论
    • 1_Basically Available(基本可用)
    • 2_Soft State(软状态)
    • 3_Eventually Consistent(最终一致性)
    • 4_总结

1、理论基础

在计算机科学领域,分布式一致性是一个相当重要的问题。

分布式系统要解决的一个重要问题是数据复制。

数据复制为分布式系统带来了高可用、高性能,但也同时带来了分布式一致性挑战:在对一个副本数据进行更新时,必须确保也更新其他副本,否则不同副本的数据将不一致。

如何解决这个问题 ?

一种思路是:阻塞 “写” 操作,直到数据复制完成。

但这个思路在解决一致性问题的同时,又带来了 “写” 操作性能低的问题。

如果有高并发的 “写” 请求,则在使用这个思路之后,大量 “写” 请求阻塞,导致系统整体性能急剧下降。

如何既保证数据的一致性,又不影响系统运行的性能,是每一个分布式系统都需要重点考虑和权衡的问题。

如何实现一种既能保证ACID特性,又能保证高性能的分布式事务处理系统是一个世界性难题。

在技术演进过程中,出现了诸如CAPBASE 这样的分布式系统理论。

2、CAP定理

1998年,加州大学的计算机科学家 Eric Brewer 提出,分布式系统有三个指标。

  • Consistency(一致性)
  • Availability(可用性)
  • Partition tolerance (分区容错性)

在这里插入图片描述

它们的第一个字母分别是 C、A、P。

Eric Brewer 说,这三个指标不可能同时做到,这个结论就叫做 CAP 定理。

CAP定理是分布式系统的指导理论,它指出:一个分布式系统不可能同时满足 一致性(C: Consistency)可用性(A: Availability) 分区容错性(P: PartitionTolerance) 这3个需求,最多只能同时满足其中两项。

1_一致性

Consistency (一致性):指 "all nodes see the same data at the same time",即更新操作成功并返回客户端后,所有节点在同一时间的数据完全一致,这就是分布式的一致性。

一致性的问题在并发系统中不可避免,对于客户端来说,一致性指的是并发访问时更新过的数据如何获取的问题。

从服务端来看,则是更新如何复制分布到整个系统,以保证数据最终一致。

这里的一致性是指强一致性,一般关系型数据库就具有强-致性特性。

2_可用性

Availability (可用性):指 "Reads and writes always succeed",即服务一直可用,而且是正常响应时间。

好的可用性主要是指系统能够很好的为用户服务,不出现用户操作失败或者访问超时等用户体验不好的情况。

3_分区容错性

Partition Tolerance (分区容错性):指 "the system continues to operate despite arbitrary message loss or failure of part of the system",即分布式系统在遇到某节点或网络分区故障的时候,仍然能够对外提供满足一致性和可用性的服务。

分区容错性要求能够使应用虽然是一个分布式系统,而看上去却好像是在一个可以运转正常的整体。

比如现在的分布式系统中有某一个或者几个机器宕掉或失联了,其他剩下的机器还能够正常运转满足系统需求,对于用户而言并没有什么体验上的影响。

因为分布式系统无法同时满足一致性、可用性、分区容错性这3个基本需求,所以我们在设计分布式系统时就必须有所取舍。

对于分布式系统而言,分区容错性是最基本的要求,因为既然是一个分布式系统,那么分布式系统中的组件必然会被部署到不同的节点,否则也就无所谓分布式系统了,因此必然会出现子网络。

而对于分布式系统而言,网络又必定会出现异常情况因此,分区容错性就成为了分布式系统必然需要面对和解决的问题。

4_总结

在分布式系统中,系统间的网络不能100%保证健康,一定会有故障的时候,而服务有必须对外保证服务。因此Partition Tolerance 不可避免。

当节点接收到新的数据变更时,就会出现问题了:

在这里插入图片描述

如果此时要保证一致性,就必须等待网络恢复,完成数据同步后,整个集群才对外提供服务,服务处于阻塞状态,不可用。

如果此时要保证可用性,就不能等待网络恢复,那 node01、node02 与 node03 之间就会出现数据不一致。

也就是说,在P一定会出现的情况下,A和C之间只能实现一个。

CP without A,即实现一致性和分区容错性。

  • 此组合为数据强一致性模式,即要求在多服务之间数据一定要一致,弱化了可用性。

  • 一些对数据要求比较高的场景(比如金融业务等)使用此模式,这种模式性能偏低。

  • 常用方案有 XA 两阶段提交、Seata AT 模式的“读已提交”级别等。

AP without C,即实现可用性和分区容错性。

  • 此组合为数据最终一致性模式,即要求所有服务都可用,弱化了一致性。

  • 互联网分布式服务多数基于AP,这种模式性能高,可以满足高并发的业务需求。

  • 常用方案有TCC、基于消息的最终一致性、Saga等。

CA without P,即实现一致性和可用性:

  • 如果不要求P(不允许分区),则C(强一致性)和A(可用性)是可以保证的。

  • 但放弃P的同时也就意味着放弃了系统的扩展性,也就是分布式节点受限,没办法部署子节点,这是违背分布式系统设计的初衷的。

系统架构师往往需要把精力花在如何根据业务特点在 C(一致性) 和 A(可用性) 之间做选择,即选择 CP 还是 AP

3、BASE理论

BASE是 Basically Available(基本可用)、Soft State(软状态) 和 EventuallyConsistency(最终一致性) 这3个短语的缩写。

BASE理论是对CAP中的一致性及可用性进行权衡的结果,其核心思想是:无法做到强一致性,那么可以通过牺牲强一致性来获得可用性。

BASE理论是对CAP的一种解决思路,包含三个思想:

1_Basically Available(基本可用)

基本可用是对 A(可用性) 的一个妥协,即在分布式系统出现不可预知故障时,允许损失部分可用性。比如在秒杀场景和雪崩的业务场景下进行降级处理,使核心功能可用,而不是所有的功能可用。

分布式系统在出现故障时,允许损失部分可用性,即保证核心可用。

2_Soft State(软状态)

软状态是相对于原子性而言的。

要求多个节点的数据副本是一致的,这是一种“硬状态”。

“软状态” 指的是:允许系统中的数据存在中间状态,并认为该状态不影响系统的整体可用性,即允许系统在多个不同节点的数据副本上存在数据延时。

在一定时间内,允许出现中间状态,比如临时的不一致状态。

3_Eventually Consistent(最终一致性)

不可能一直是 “软状态” ,必须有个时间期限。

在时间期限过后,应当保证所有副本保持数据一致性,从而达到数据的最终一致性。

这个时间期限取决于网络延时、系统负载、数据复制方案设计等因素。

虽然无法保证强一致性,但是在软状态结束后,最终达到数据一致。

不只是分布式系统使用最终一致性,关系型数据库在某个功能上也使用最终一致性。

比如在备份时,数据库的复制过程是需要时间的,在这个复制过程中,业务读取的值就是“旧”的。

当然,最终还是达到了数据一致性。

4_总结

总体来说,BASE 理论面向的是大型高可用、可扩展的分布式系统。

不同于 ACID,BASE 理论提出通过牺牲强一致性来获得可用性,并允许在一定时间内的不一致,但是最终达到一致。

在实际的分布式场景中,不同业务对数据的一致性要求不一样。因此在设计时,往往结合使用 ACID 和 BASE 理论。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WASM 使用说明23事(RUST实现)

文章目录 1. wasm是什么1.1 chatgpt定义如下:1.2 wasm关键特性: 2. wasm demo2.1 cargo 创建项目2.2 编写code2.3 安装wasm-pack2.4 编译 3.1 html页面引用wasm代码(js引用)3.2 访问页面4 导入js function4.1 编写lib.rs文件,内容…

【SpringCloud】06-Sentinel

1. 雪崩问题 一个微服务出现问题导致一系列微服务都不可以正常工作。 服务保护方案: 请求限流。线程隔离。 服务熔断 2. Sentinel 启动Sentinel java -Dserver.port8090 -Dcsp.sentinel.dashboard.serverlocalhost:8090 -Dproject.namesentinel-dashboard -ja…

【已解决】C# NPOI如何在Excel文本中增加下拉框

前言 上图&#xff01; 解决方法 直接上代码&#xff01;&#xff01;&#xff01;&#xff01;综合了各个大佬的自己修改了一下&#xff01;可以直接规定在任意单元格进行设置。 核心代码方法块 #region Excel增加下拉框/// <summary>/// 增加下拉框选项/// </s…

centeros7 编译ffmpeg

使用yum安装的路似乎已经堵住了&#xff0c;请求的镜像全是404或503 1.打开终端并使用yum安装EPEL存储库(Extra Packages for Enterprise Linux)&#xff1a;sudo yum install epel-release2.接下来&#xff0c;使用以下命令来安装FFmpeg&#xff1a;sudo yum install ffmpeg …

有关spring,springboot项目的知识点

文章目录 1.Spring基本介绍1.1Spring官网1.2Spring的发展 2.SpringBoot2.1SpringBoot快速入门2.1.1创建SpringBoot工程,并勾选web开发相关依赖2.1.2定义HelloController类,并添加方法helllo,且添加注解2.1.3运行测试 3.HTTP协议3.1HTTP协议的概念3.1.1HTTP的特点 3.2HTTP-请求协…

YOLOv8_ ByteTrack目标跟踪、模型部署

YOLOv8目前支持BoT-SORT和ByteTrack两种多目标跟踪算法&#xff0c;默认的目标跟踪算法为BoT-SORT 如果要使用ByteTrack跟踪算法&#xff0c;可以添加命令行参数trackerbytetrack.yaml 一、 VisDrone2019数据集 VisDrone&#xff1a;无人机目标检测和追踪基准数据集。&#x…

《云原生安全攻防》-- K8s攻击案例:权限维持的攻击手法

在本节课程中&#xff0c;我们将一起深入了解K8s权限维持的攻击手法&#xff0c;通过研究这些攻击手法的技术细节&#xff0c;来更好地认识K8s权限维持所带来的安全风险。 在这个课程中&#xff0c;我们将学习以下内容&#xff1a; K8s权限维持&#xff1a;简单介绍K8s权限维持…

【大模型理论篇】主流大模型的分词器选择及讨论(BPE/BBPE/WordPiece/Unigram)

1. 背景分析 分词是将输入和输出文本拆分成更小单位的过程&#xff0c;使得大模型能够处理。token可以是单词、字符、子词或符号&#xff0c;取决于模型的类型和大小。分词可以帮助模型处理不同的语言、词汇和格式&#xff0c;并降低计算和内存成本。分词还可以通过影响token的…

10-1.idea中的项目结构,辅助快捷键,模块的操作

idea中的项目结构和辅助快捷键 IDEA中项目结构 首先是创建项目&#xff0c;新建的项目中有子项目&#xff0c;我们可以创建模块 然后在模块中我们可以创建包&#xff0c;在包中的SRC中写我们的源代码&#xff0c;也就是类。 VScode写Java项目 如何你电脑比较卡的话&#…

Java中自增自减,赋值,逻辑,三元运算符

自增自减运算符 在某个变量前面或者后面加一--在某个变量前面或者后面减一 可以看见&#xff0c;当a输出时&#xff0c;a是没有变化的&#xff0c;说明如果是在变量后就是先使用再增加&#xff0c;而b输出时&#xff0c;b增加了1&#xff0c;说明如果是在变量前面就是先增加再…

【elkb】linux麒麟v10安装ELKB 8.8.X版本(ARM架构)

下载软件 相关版本信息 elasticsearch&#xff1a;8.8.1kibana&#xff1a;8.8.1logstash&#xff1a;8.8.1filebeat&#xff1a;8.8.1 下载地址 https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.8.1-linux-aarch64.tar.gzhttps://artifacts.elastic…

配置nginx服务通过ip访问多网站

文章目录 第一种方法第二种方法 先关闭防火墙 # systemctl stop firewalld # setenforce 0第一种方法 #mntui 第二种方法 # vim /etc/nginx/conf.d/test_ip.conf # cat /etc/nginx/conf.d/test_ip.conf server {listen 192.168.234.100:80;#server_nameroot /test/100;loca…

PostgreSQL使用clickhouse_fdw访问ClickHouse

Postgres postgres版本&#xff1a;16&#xff08;测试可用&#xff09;docker 安装 插件安装 clickhouse_fdw: https://github.com/ildus/clickhouse_fdw 安装命令 git clone gitgithub.com:ildus/clickhouse_fdw.git cd clickhouse_fdw mkdir build && cd build…

文件下载漏洞

文件安全 文件下载 常见敏感信息路径 Windows C:\boot.ini //查看系统版本 C:\Windows\System32\inetsrv\MetaBase.xml //IIS配置文件 C:\Windows\repair\sam //存储系统初次安装的密码 C:\Program Files\mysql\my.ini //Mysql配置 C:\Program Files\mysql\data\mysql\user.…

【目标检测01】真实框、预测框、锚框和交并比IoU

文章目录 1. 任务定义2. 基本概念2.1 边界框&#xff08;bounding box&#xff09;2.2 真实框、预测框和锚框2.3 交并比 (IoU)2.4 代码实现 1. 任务定义 目标检测的主要目的是让计算机可以自动识别图片或者视频帧中所有目标的类别&#xff0c;并在该目标周围绘制边界框&#x…

Midjourney上线图像编辑,他们终于知道什么叫开放了。

Midjourney作为文生图领域毋庸置疑的头号选手&#xff0c;之前几乎每次推新都非常惊艳。 前段时间也看到很多消息说Midjourney v7已经训练完毕了&#xff0c;但我左等右等&#xff0c;没等到v7的发布。 却提前等来了可能会更加好玩的一个功能——图像编辑模式。 Midjourney的…

2024-网鼎杯第二次模拟练习-web02

进入做题页面&#xff0c;经过信息搜集和目录扫描&#xff0c;发现只有一个公告是可以利用的 http://0192c74e0f9871c2956795c804c3dde3.8nfp.dg01.wangdingcup.com:43014/OA_announcement.php?id1 这个后面有一个明显的注入点&#xff0c;经过多次刷新和快速刷新后发现&…

Linux中DNS搭建

文章目录 一、DNS介绍1.1、DNS是什么1.2、DNS的工作原理1.3、DNS的域名结构 二、Bind介绍2.1、bind概述2.2、bind主要配置文件 三、DNS安装四、主要配置文件解析&#xff08;除/etc/named.conf&#xff09;4.1、/etc/named.rfc1912.zones4.2、/etc/rc.d/init.d/named4.3、/etc/…

批处理操作的优化

原来的代码 Override Transactional(rollbackFor Exception.class) public void batchAddQuestionsToBank(List<Long> questionIdList, Long questionBankId, User loginUser) {// 参数校验ThrowUtils.throwIf(CollUtil.isEmpty(questionIdList), ErrorCode.PARAMS_ERR…

基于neo4j的新冠治疗和新冠患者轨迹的知识图谱问答系统

毕业设计还在苦恼选题&#xff1f;想做一个兼具前沿性和实用性的技术项目&#xff1f;了解下这款基于Neo4j的新冠治疗和患者轨迹的知识图谱问答系统吧&#xff01; 系统可以实现两大功能模块&#xff1a;新冠医疗信息和患者活动轨迹的展示与问答。通过图谱技术&#xff0c;你可…