Seata入门系列【19】分布式事务之CAP、BASE理论

news2024/11/25 15:39:10

1 CAP理论

CAP是以下三个词语的缩写:

  • Consistency:一致性
  • Availability:可用性
  • Partition tolerance:分区容忍性

CAP理论的基础概念就是在分布式系统中,无法同时满足以上三点。

下面我们以一个简单的分布式系统,解释下为何不同通知满足。

在这里插入图片描述

2.1 C 一致性

一致性是指写操作后的读操作可以读取到最新的数据状态,当数据分布在多个节点上,从任意结点读取到的数据都是最新的状态。

在上图读写分离的环境中,因为从库同步主库数据是会存在延迟的,必须在写入数据的时候,将从库对应的数据加锁,同步完成后,再释放锁,在等待的过程中,可以返回错误或失败,但要保证客户端读取到的都是最新的数据,从而实现一致性。

分布式系统一致性的特点:

  • 由于存在数据同步的过程,写操作的响应会有一定的延迟。
  • 为了保证数据一致性会对资源暂时锁定,待数据同步完成释放锁定资源。
  • 如果请求数据同步失败的结点则会返回错误信息,一定不会返回旧数据。

2.2 A 可用性

可用性是指任何客户端的请求都能得到响应数据,不会出现响应错误。

在上图读写分离的环境中,即时数据还没有同步过来,从数据库也要返回要查询的数据,哪怕是旧数据,如果连旧数据也没有则可以按照约定返回一个默认信息,但不能返回错误或响应超时。

2.3 P 分区容忍性

通常分布式系统的各各结点部署在不同的子网,这就是网络分区,不可避免的会出现由于网络问题而导致结点之间 通信失败,系统需要保证此时仍可对外提供服务,这叫分区容忍性。分区容忍性是分布式系统具备的基本能力,必须要实现。

在分布式环境下,为了保证分区容忍性,数据库会采用主从、集群、异地容灾等方式。

在上图读写分离的环境中,实现分区容忍性,需要保证主从同步失败时,不影响读写操作。其一个结点挂掉不影响另一个结点对外提供服务。

需要从以下几点进行实现:

  • 尽量使用异步取代同步操作,例如使用异步方式将数据从主数据库同步到从数据
  • 添加从数据库结点,其中一个从结点挂掉其它从节点提供服务。

2.4 组合方式

在所有分布式事务场景中不会同时具备CAP三个特性,因为在具备了P的前提下C和A是不能共存的。

分布式系统,肯定是需要满足分区容忍性,如果再满足一致性,对数据同步进行加锁,这样就没办法保证可用性了,因为可用性时,数据不一致,也需要查询到结果,A C始终是存在冲突的。

2.4.1 CA

放弃分区容忍性,即不进行分区,不考虑由于网络不通或结点挂掉的问题,则可以实现一致性和可用性。那么系统 将不是一个标准的分布式系统,我们最常用的关系型数据就满足了CA。

既然是单体,那么也就不存在分布式事务的概念了。。。。

2.4.2 AP

放弃一致性,追求分区容忍性和可用性。这是很多分布式系统设计时的选择。

AP 模式实现很简单,只需要保证集群环境下,数据同步正常即可,数据虽然可能更新后马上看不到最新的结果,但是最终的结果还是正确的,即保证最终一致性。

2.4.3 CP

放弃可用性,追求一致性和分区容错性。

也就是在分布式环境下,必须保证每次结果查询到的数据都是最新的,但是可能某个时段去查询,会显示数据不可用,即保证强一致性。

2.5 总结

一个分布式系统最多只能同时满足 一致性(Consistency)、可用性(Availability)和分区容忍性(Partition tolerance)这三项中的两项。可以作 为我们进行架构设计、技术选型的考量标准。

对于多数大型互联网应用的场景,结点众多、部署分散,而且现在的集群规模越来越大,所以节点故障、网络故障是常态,而且要保证服务可用性达到N个9(99.99…%),并要达到良好的响应性能来提高用户体验,因此一般都会做出如下选择:保证P和A,舍弃C强一致,保证最终一致性。

3 BASE理论

3.1 强一致性和最终一致性

CAP理论告诉我们一个分布式系统最多只能同时满足一致性(Consistency)、可用性(Availability)和分区容忍 性(Partition tolerance)这三项中的两项,其中AP在实际应用中较多,AP即舍弃一致性,保证可用性和分区容忍 性。

但是在实际生产中很多场景都要实现一致性,比如之前图片中主数据库向从数据库同步数据,即使不要一致性,但是最终也要将数据同步成功来保证数据一致,这种一致性和CAP中的一致性不同,CAP中的一致性要求在任何时间查询每个结点数据都必须一致,它强调的是强一致性,但是最终一致性是允许可以在一段时间内每个结 点的数据不一致,但是经过一段时间每个结点的数据必须一致,它强调的是最终数据的一致性。

3.2 Base理论

BASE是 Basically Available(基本可用)、Soft state(软状态)和 Eventually consistent (最终一致性)三个词语的缩写。

BASE理论是对CAP中AP的一个扩展,通过牺牲强一致性来获得可用性,当出现故障允许部分不可用但要保证 核心功能可用,允许数据在一段时间内是不一致的,但最终达到一致状态。满足BASE理论的事务,我们称之为“柔 性事务”。

3.2.1 基本可用

分布式系统在出现故障时,允许损失部分可用功能,保证核心功能可用。如电商网站交易付款出现问题了,商品依然可以正常浏览。

3.2.2 软状态

由于不要求强一致性,所以BASE允许系统中存在中间状态(也叫软状态),这个状态不影响系统可用性,如订单的"支付中"、“数据同步中”等状态,待数据最终一致后状态改为“成功”状态。

3.2.3 最终一致

最终一致是指经过一段时间后,所有节点数据都将会达到一致。如订单的"支付中"状态,最终会变 为“支付成功”或者"支付失败",使订单状态与实际交易结果达成一致,但需要一定时间的延迟、等待。

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

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

相关文章

如何减少自动化测试的误差?

自动化测试是一种利用软件工具或者硬件设备来代替人工执行测试用例的方法,它可以提高测试效率和质量,但也可能存在一些误差,影响测试结果的准确性和可信度。 造成自动化测试结果有误差的原因主要有以下两类: 系统误差&#xff1a…

服务器黑洞,如何秒解

想必这样的短信大家都应该见过吧,这其实是阿里云服务器被攻击后触发的黑洞机制的短信通知。还有很多朋友不知道,为什么要这么做。原因其实很简单啊,当同一个机房的ip段,如果说有一台服务器遭受低道攻击,那么很可能会造…

手机知识:手机“飞行模式”你真的会用吗,看完你就懂了

目录 “飞行模式”的实用技能 关于手机的谣言 回想一下,当你第一次知道手机上的“飞行模式”时,你认为这是一个怎样的功能? 普通青年:在飞机上要使用的模式。 文艺青年:手机终日忙忙碌碌,偶尔也需要放飞…

香港高端人才通行证计划申请攻略:条件+材料清单+流程!

香港高端人才通行证计划申请攻略:条件材料清单流程! 香港高才通计划希望吸引世界各地具备丰富工作经验及高学历的人才到香港探索机遇,这些高端人才包括高收入人士和在世界顶尖大学毕业的学生。 此计划并不适用于阿富汗、古巴、老挝、朝鲜、尼…

视觉问答(VQA)12篇顶会精选论文合集,附常用数据集下载

今天来聊聊计算机视觉和自然语言处理交叉的一个热门研究方向:视觉问答(VQA)。 视觉问答的任务是:给出一张图片和一个关于这张图片的自然语言问题,计算机需要根据图片的内容自动回答这个问题。这样的任务考验了计算机在…

ucgui 画圆弧时圆弧有缺口

一、问题描述 使用抗锯齿的方式画圆弧,在画到90的位置时,那个位置刚好没画上,留了个缺口,其他位置一切绘制正常。 使用非抗锯齿的方式画圆弧,没出现缺口。 二、问题原因 当初在移植ucgui 时,底层函数 …

【2021研电赛】基于图像处理的物体识别与分类系统

本作品介绍参与极术社区的有奖征集|分享研电赛作品扩大影响力,更有重磅电子产品免费领取! 团队介绍 学校名称:北京理工大学 队伍名称:BIT铁头帮 指导教师:冯云鹏 队伍成员:余佳桐 孙雨婷 朱翊铭 获奖情况&#xff1a…

C++之栈容器

1.简介 stack ,栈(堆栈),是一种先进后出(First In Last Out,FILO)的数据结构,先插入的数据在栈底,后放入的数据在栈顶,所有的数据只能从栈顶取出。   在生活中先进后出的例子友很多,例如我们在桌子上摞书…

给依赖打补丁的两种方案

以修改antd-table-infinity 插件为例,如图所示,要修改插件里代码 第一种方案:文件替换(不推荐) 1) 将这个文件的代码都拷贝出来,并进行修改后存在项目里,我这边是放在了polyfill文…

java毕业设计基于springboot+vue的村委会管理系统

项目介绍 采用JAVA语言,结合SpringBoot框架与Vue框架以及MYSQL数据库设计并实现的。本村委会管理系统主要包括个人中心、村民管理、村委会管理、村民信息管理、土地变更管理、农业补贴管理、党员信息管理等多个模块。它帮助村委会管理实现了信息化、网络化&#xf…

TCP/IP--七层通信

文章目录 TCP/IP--七层通信先来看一下会话层以上的处理再来看一下传输层以下的处理 TCP/IP–七层通信 下面举例说明7层网络模型的功能。假设使用主机A的用户A要给使用主机B的用户B发送一封电子邮件。 在七层OSI模型中,如何模块化通信传输? 先来看一下七…

Spring Boot 面试题——自动装配

目录 Spring Boot 中的自动装配是指什么?解决了什么问题?Spring Boot 自动装配的流程有哪些?Spring Boot 中实现自动装配的原理是什么?Spring 中的 ConfigurationClassPostProcessor 类有什么作用?Spring Boot 自动装配…

关于微软文本转语音(语音合成)的一些坑

1. 单个音频时长限制10分钟 文档地址 2. 多人配音SSML 每次请求 <voice> 标签只能最大50个&#xff0c;参考 #1 3. SDK 在 linux 环境下 报错&#xff1a;gcc 软件无法加载 4. 语音品质问题 使用 SDK 生成的音频声音很差&#xff0c;默认音频流格式为 WAV&#xf…

Java——接口类和抽象类的方法声明不需要加{}

在Java中&#xff0c;接口类和抽象类的方法声明是不需要加{}的。具体来说&#xff1a; 1. 接口类&#xff08;Interface&#xff09;&#xff1a;接口类定义了一组方法的规范&#xff0c;没有具体的方法实现。在接口中&#xff0c;方法声明只包含方法名、参数列表和返回类型&a…

vue2.0 打包,nginx部署

1、修改这里为空 否则报错&#xff1a;vue is undefined 2、修改为hash&#xff0c;重点&#xff1a;打包dist文件运行&#xff0c;必须这样 3、安装ngnix&#xff0c;重点&#xff1a;使用node的包&#xff1a;httpserve&#xff0c;失败 4、重点&#xff1a;配置代理转发 前端…

au如何分离人声和背景音乐?帮你整理了几个必备的!

Audition专为在照相室、广播设备和后期制作设备方面工作的音频和视频专业人员设计&#xff0c;可提供先进的音频混合、编辑、控制和效果处理功能。因为软件的专业性&#xff0c;所以有些功能使用起来就比较复杂&#xff0c;下面介绍了详细的操作步骤。 方法一&#xff1a;直接使…

许战海战略文库|全球车型定位与中国车企的全球化机会

引言&#xff1a;从丰田阿尔法的身份转变到沃尔沃的市场双重身份,再到各大洲皮卡文化的多样表达,我们可以发现&#xff0c;同一车型在不同区域角色认知存在差异,不同区域主流化车型存在巨大差异。而背后是一系列关于文化差异、消费理念和生活方式的区别。中国新能源车企正面临一…

Spring Cloud之Sentinel的简单学习

目录 雪崩问题 超时处理 线程隔离 熔断降级 流量控制 服务对比 安装Sentinel控制台 案例 簇点链路 限流规则 流控模式 直接模式 关联模式 链路模式 流控效果 Warm up 排队等待 热点参数限流 隔离与降级 Feign整合Sentinel 线程隔离 规则设置 熔断降级 …

CSGO游戏里的饰品是如何被炒作起来的?

csgo倒狗们是如何操盘csgo饰品市场的&#xff1f; CSGO游戏里的饰品是如何被炒作起来的&#xff1f; 随着近几年csgo玩家数量急剧上升&#xff0c;倒狗在市场中的比例也在上升&#xff0c;之前的csgo饰品市场以散户居多&#xff0c;价格波动不大&#xff0c;现在倒狗大量涌入&a…

如何选择微信管理系统?

如何选择微信管理系统&#xff1f; 1、不用下载安装软件&#xff0c;不越狱不刷机 2、不绑定手机或电脑&#xff0c;不对电脑或手机做限制&#xff0c;也不受电脑、手机关闭、关机影响 3、能更新迭代&#xff0c;不限制版本 4、使用安全登录&#xff0c;保障账号安全的 5、不用…