分布式事务(二)—— CAP和Base理论

news2024/12/24 21:52:50

系列目录:

  • 《分布式事务(一)—— 事务的基本概念》

一、CAP理论

cap理论是分布式系统的理论基石

1、Consistency[一致性]

  即操作成功并返回客户端后,所有节点在同一时间的数据完全一致,这就是分布式的一致性。一致性的问题在并发系统中不可避免,对于客户端来说,一致性的问题是并发访问时更新过的数据如何获取的问题。从服务端来说,则是更新如何复制分布到整个系统,以保持数据的一致。

2、Availability[可用性]

  可用性是指读取和写入操作一致能工成功,即服务一直可用,而且是正常的响应时间。好的可用性指系统能够很好的为用户提供服务,不出现用户操作失败或者访问超时等用户体验不好的情况。

3、Partition Tolerance[分区容错性]

  即分布式系统在遇到某个节点分区故障的时候,仍然能够对外提供满足一致性和可用性的服务。分区容错性要求能够使应用虽然是一个分布式系统,但是看上去却是一个可以正常运转的整体。比如现在分布式系统中某一个或者几个机器宕机了,其他剩下的机器还是能够正常运转并满足系统需求,对于用户而言并没有什么体验上的影响。

如果你是一个分布式系统,那么你就必须要满足分区送错性,因为分布式系统就是为了解决高并发和提高系统的可用性,要不然就不用将系统做成分布式系统了。

二、CAP的取舍策略

  CAP三个特性只能满足其中两个,那么取舍策略就有三种:
在这里插入图片描述

  • CA:如果不需要P,则一致性和可用性是可以保证的。但是放弃P的同时也就意味着放弃了系统的扩展性,也就是分布式节点受限,没有办法部署子节点,这是违背分布式系统的设计初衷的。
  • CP:保证一致性和分区容错性,放弃可用性。相当于每个请求在服务器之间保持强一致,而P(分区容错)也会导致同步时间的延长(也就是需要等待数据同步完成才能正常访问系统),一旦发生网络故障或者消息丢失的情况,就要牺牲用户体验,等到所有数据全部一致后再让用户访问系统。设计成CP的系统其实不少,最典型的就是分布式数据库,如Redis、HBase等。对于这些分布式数据库来说,数据的一致性是基本的要求,因为如果连这个都打不到,那么直接采用关系型数据库就好了,没必要再浪费资源部署分布式数据库。
  • AP:高可用并容许分区,则要放弃一致性。一旦分区发生,节点之间可能会失去联系,为了高可用,每个节点只能用本地数据库提供服务,而这样会导致全局数据的不一致。

三、Base理论

  分布式系统中的一致性是弱一致性,单数据库mysql的一致性是强一致性

  Base是Basically Available(基本可用)、Soft status(软状态)和Eventually consistent(最终一致性)三个短语的缩写。Base理论对于CAP中一致性和可用性权衡的结果。其来源对于大规模互联网系统分布式实践的总结,是基于CAP定理逐步演化而来的。
  Base理论的核心思想是:即使没有办法做到强一致,但是可以做到最终一致。

Base理论的三要素

1、基本可用

  基本可用是指分布式系统在出现不可预知故障的时候,允许损失部分可用性,注意:这里并不是说系统不可用,比如:

  • (1) 响应时间上的损失:正常情况下,一个在线搜索需要在0.5秒内返回给用户响应的查询结果。但由于出现故障,查询结果的响应时间增加了1~2秒
  • (2) 系统功能上的损失:正常情况下,在一个电商网站上进行购物的时候,消费者几乎能顺利完成每一笔订单,但是在一些节日大促购物高分期的时候,由于消费者的购物行为激增,为了保护购物系统的稳定性,部分消费者可能会被引导到一些降级页面。

2、软状态

  软状态指允许系统中的数据存在中间状态,并认为该中间状态的存在不会影响系统的整体可用性,即允许系统在不同节点数据副本之间进行数据同步的时候可以存在延时。

3、最终一致性

  最终一致性强调的是所有的数据副本,在经过一段时间的同步之后,最终能达到一个一致的状态。因此,最终一致的本质需要系统保证最终数据能够达到一致,而不需要实时保持数据的强一致。

  总体来说,Base理论面向的是大型高可用可扩展的系统,和传统的事物ACID特性是相反的,它完全不同于ACID的强一致模型,而是牺牲强一致来获得可用性,并允许数据在一段时间内不一致,但最终达到一致状态。同时,在实际的分布式场景中,不同业务单元和组建对数据一致性的要求不同,因此在具体的分布式系统架构设计的过程中ACID特性和Base理论往往又会结合在一起。

一句话:CAP就是要告诉你:要想同时满足C、A、P就是做梦,Base才是你最终的归宿


后记
  个人总结,欢迎转载、评论、批评指正

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

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

相关文章

分享个前端工具-取色调色工具

这里虽然贴了两个,但推荐 Pipette. PipetteWin22.10.22.zip: https://download.csdn.net/download/rainyspring4540/88799632 图标: 界面: ColorPix https://download.csdn.net/download/rainyspring4540/88799642 图标: 界面…

在Windows11的WSL上运行Llama2-7b-chat 后记

往期的Llama2-7b-chat中我们试用了官方的demo,但是那个demo只能在代码中传入固定的对话,我稍微修改了一下,使其能在命令行中不间断对话(不具备记忆功能) 代码 import os import torch os.environ[PL_TORCH_DISTRIBUT…

基于 LLM+LlamaIndex+NebulaGraph,构建大模型知识图谱的检索(RAG)方法

最近,围绕着利用 LLM(Language Model)和知识图谱(KG,Knowledge Graphs)构建RAG(Retrieval Augmented Generation)流程引起了很多关注。 在本文中,让我们通过利用 LlamaI…

Linux部署DataEase数据分析工具并结合内网穿透实现任意设备远程查看数据

文章目录 前言1. 安装DataEase2. 本地访问测试3. 安装 cpolar内网穿透软件4. 配置DataEase公网访问地址5. 公网远程访问Data Ease6. 固定Data Ease公网地址 前言 DataEase 是开源的数据可视化分析工具,帮助用户快速分析数据并洞察业务趋势,从而实现业务…

DolphinScheduler管理数仓任务规范

目录 一、DolphinScheduler调度数仓任务现状分析 2.1 一个任务流构建数仓所有的逻辑节点 2.2 每个逻辑节点构建一个任务流 二、数仓任务管理调度需求分析 三、DolphinScheduler数仓开发任务管理规范 四、结语 前言:大数据领域对多种任务都有调度需求&#xff…

modbus协议和示例

协议 主机读写 从站地址(8bit)功能码 (8bit)起始地址(16bit)数量(16bit)CRC(16bit) 从机对主机读取的回复 从站地址(8bit)功能码 …

并网逆变器学习笔记8---平衡桥(独立中线模块)控制

参考文献:《带独立中线模块的三相四线制逆变器中线电压脉动抑制方法》---赵文心 一、独立中线模块的三相四线拓扑 独立中线模块是控制中线电压恒为母线一半,同时为零序电流ineu提供通路。不平衡负载的零序电流会导致中线电压脉动,因此需要控制…

Python第十三章(递归与lamada)

一。引用类型 不可变类型:在改变原有类型的数据后,值的地址也会进行更改 包括:整数,浮点数,字符串,元组 用id():进行判断是否十进制地址是否一样 可变类型:在改变原有类型后&…

一文教你如何本地搭建Qchan图床网站实现公网远程访问

文章目录 前言1. Qchan网站搭建1.1 Qchan下载和安装1.2 Qchan网页测试1.3 cpolar的安装和注册 2. 本地网页发布2.1 Cpolar云端设置2.2 Cpolar本地设置 3. 公网访问测试总结 前言 图床作为云存储的一项重要应用场景,在大量开发人员的努力下,已经开发出大…

endnote设置引用格式

1在这上面找到合适的style,比如搜索nature methods https://endnote.com/downloads/styles/​​​​​​2.下载到的ens用endnote打开,可以导入nature methods格式 3.引用的时候发现显示的插入是4-7,但是看了最近nature methods的是4,5,6,7 …

C/C++实现无序入参的命令解析工具

C/C实现无序入参的命令解析工具 1 实现思路2 主要功能3 效果展示3.1 直接运行代码图3.2help命令执行效果图3.3命令行执行命令解析效果图 4 代码实现5 代码下载 1 实现思路 基本介绍: 思路来源于atlas,atc(模型转换工具),该工具对命令支持众多&#xff0…

多智能体强化学习--MAPPO(pytorch代码详解)

标题 代码详解Actor和Critic网络的设置 代码详解 代码链接(点击跳转) Actor和Critic网络的设置 基本设置:3个智能体、每个智能体观测空间18维。Actor网络:实例化一个actor对象,input-size是18Critic网络&#xff1…

Shell脚本——免交互

目录 一、Here Document免交互 1、免交互概述 2、语法格式 2.1示例:免交互方式实现对行数的统计,将要统计的内容置于标记EOF之间,直接将内容传给wc-l来统计 3、变量设定 ①变量图换成实际值 ②整行内容作为变量并输出结果 ③使输出内…

杠杆交易在伦敦金市场的优势与风险

伦敦金作为黄金市场的灯塔,每天吸引着全球投资者的目光。伦敦金的特殊地位使得以它为基准的杠杆交易成为众多投资者追逐的目标。在这篇文章中,我们将深入探讨伦敦金杠杆交易的奥秘,带你揭开这一盛宴的神秘面纱。 伦敦金杠杆交易的核心在于通过…

【pytorch】anaconda使用及安装pytorch

https://zhuanlan.zhihu.com/p/348120084 https://blog.csdn.net/weixin_44110563/article/details/123324304 介绍 Conda创建环境相当于创建一个虚拟的空间将这些包都装在这个位置,不需要了可以直接打包放入垃圾箱,同时也可以针对不同程序的运行环境选…

HashSet 的基本操作【集合容器知识回顾 ④】

HashSet 是 Java 中的一个集合类,它实现了 Set 接口。Set 是一种不允许包含重复元素的集合,而 HashSet 则是 Set 接口的一个具体实现。因此,HashSet 用于存储一组唯一的元素,不允许重复。 HashSet 的一些特点: 不允许…

揭开时间序列的神秘面纱:特征工程的力量

目录 写在开头1. 什么是特征工程?1.1 特征工程的定义和基本概念1.2 特征工程在传统机器学习中的应用1.3 时间序列领域中特征工程的独特挑战和需求3. 时间序列数据的特征工程技术2.1 数据清洗和预处理2.1.1 缺失值处理2.1.2 异常值检测与处理2.2 时间特征的提取2.2.1 时间戳解析…

Vue中使用定义的函数时,无法访问到data()里面的数据

const translateItems1 () > {this.translatedItems this.items1.map(item > {return {...item,label: this.$t(item.labelKey)};}); items1是我们data()里面的数据,无法访问到 解决办法 把箭头函数替换为普通函数 const translateItems1 function() {th…

echarts 鼠标移入有单位;echarts 纵坐标有单位;echarts 纵坐标刻度有单位

1.echarts 鼠标移入有单位 tooltip series: [{name: "平均值",type: "line",data: this.avgData,tooltip: {valueFormatter: function (value) {return value 万元}}}]2.echarts 纵坐标有单位;name yAxis: [{type: "value",name: t…

为什么贪婪的 GPU需要快速的对象存储?

一个链条的力量取决于其最薄弱的环节 - 同样,您的AI/ML基础设施的速度也只有您的最慢组件那么快。如果您使用GPU训练机器学习模型,那么您的薄弱环节可能是您的存储解决方案。结果就是我所说的“饥饿GPU问题”。 饥饿GPU问题发生在您的网络或存储解决方案…