事务连接中断_一文搞懂分布式事务-CAP理论

互联网系统中,分布式事务是无法避免的,目前多数解决方案是BASE理论,最终一致性,结合事务补偿。

1.什么是CAP理论。

CAP理论,又称为布鲁尔定理,是加州大学伯克利分校的计算机科学家埃里克.布鲁尔(Eric Brewer)在2000年的ACM PODC提出的猜想。2年后,麻省理工学院的Seth Gilbert和Nancy Lynch从理论上证明了CAP。Robert Greiner的发表的两篇博文更容易理解,第一篇已经被自己标识为过时。

CAP是一致性(Consistence)、可用性(Availability)、分区容错性(Partition tolerance)三个字母的首字母。

  • 一致性(Consistence)对于指定节点,读操作保证能返回最新的写操作结果。注意,这里不是同一时刻都能看到相同的数据。因为事务过程中,系统处于一个不一致状态,不同的节点的数据并不完全一致。比如,client无法读取到未提交的事务的数据,也不会读到事务中间写入的数据。
  • 可用性(Availability)非故障节点在合理的时间内返回合理的响应(不是错误和超时响应)。不能是错误或者是超时,结果是合理的,并不是一定是"正确"的结果。
  • 分区容错性(Partition tolerance)当出现网络分区后,系统能够继续“履行职责”。发生分区现象,不管什么原因,可能是丢包、连接中断、阻塞等,系统都应该能够继续“履行职责”。总结:网络分区后,节点之间就出现隔离。要提高分区容忍性,就要把数据多分布在各个节点中,分区容忍性就提高了。各节点复制数据,就会带来数据不一致的问题。数据分布的节点数越多,容忍性越高,复制数据带来不一致的问题发生的概率就越高,总之,是需要一个权衡的问题。2. CAP为什么不能同时满足?假如现在两个节点A、B同时满足CAP理论,C:AB节点数据同时更新。A:AB同时保证可用性。P:当出现网络分区时,必须保证对外可用。现在假如出现网络分区,A 肯定满足不了,AB不能互相通信,得不到最新的数据。假如必须满足C,就必须同时停止A和B,这时候A就满足不了。总结:分布式系统中,必然选择P,也是选择AP或CP。如果不选择P,当发生网络分区时,为了满足C,系统需要禁止写入,当写入请求时,系统会返回error,这和A冲突了。正常运行情况下,不存在CP和AP的选择,可以同时满足CA。CAP理论说只能选择CP或者AP,前提是系统发生了分区现象。如果没发生分区,我们没必要放弃C和A。也就是说,设计架构时,既要考虑分区发生时选择CP和AP,也要考虑分区没有发生时如何保证CA。

2. CAP为什么不能同时满足?

28b48e3c1eeae08cba43dfe31c30574d.png

假如现在两个节点A、B同时满足CAP理论,C:AB节点数据同时更新。A:AB同时保证可用性。P:当出现网络分区时,必须保证对外可用。

现在假如出现网络分区,A 肯定满足不了,AB不能互相通信,得不到最新的数据。假如必须满足C,就必须同时停止A和B,这时候A就满足不了。

总结:分布式系统中,必然选择P,也是选择AP或CP。如果不选择P,当发生网络分区时,为了满足C,系统需要禁止写入,当写入请求时,系统会返回error,这和A冲突了。

正常运行情况下,不存在CP和AP的选择,可以同时满足CA。CAP理论说只能选择CP或者AP,前提是系统发生了分区现象。如果没发生分区,我们没必要放弃C和A。也就是说,设计架构时,既要考虑分区发生时选择CP和AP,也要考虑分区没有发生时如何保证CA。

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

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

相关文章

C# WinForm中获取当前程序运行目录的方法

C# WinForm中获取当前程序运行目录的方法: “AppDomain.CurrentDomain.BaseDirectory”:获取当前应用程序所在目录的路径,最后包含“\”;“System.Threading.Thread.GetDomain().BaseDirectory”:获取当前应用程序所在目录的路径&#xff0c…

网络攻防 第四周学习总结

教材学习内容总结 第四章主要介绍了网络嗅探和协议分析网络嗅探是一种常用的窃听技术,它利用计算机的网络接口截获目的地为其他计算机的数据报文,以监听数据流中所包含的用户账户密码或私密信息等。 网络嗅探具有很强的隐蔽性,往往让网络信息…

获取内存_如何获取一个进程所占用的内存

推荐观看:BATJ面试官最喜欢问的:多线程、线程并发面试题详解(volatileThreadLocalSleep)_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili​www.bilibili.com通过 ps 可以获知一个进程所占用的内存$ ps -O rss -p 3506PID RSS S TTY …

中的ama格式_想发SCI?期刊引用格式选好了没?

我~芳~老师~又回来开坑了哈哈哈哈哈!!!对于一心想要冲向SCI、EI顶峰,拉都拉不住的同学来说,我们需要把论文中的每一个细节都抠得死死的。合乎规范地引用科学期刊(Scientific Journal)绝对是最重…

伺服怎么接单相220伏_乐利网带你认识伺服电机及工作原理

什么是伺服电机,应该听过人的不少,没听过的也占不少数,其实,伺服电机是指在伺服系统中控制机械元件运转的发动机,是一种补助马达间接变速装置。伺服电机可使控制速度,位置精度非常准确,可以将电…

插入始终是1_OneNote使用小记(1)——针对PPT做笔记及最合适的PPT插入方式

本人经常使用OneNote进行上课笔记的记录,本文大概总结一下我是如何在上课时针对PPT进行笔记记录的,以及非常重要的PPT插入所占空间的问题。设备:普通笔记本电脑,无触控,故不使用绘图功能软件:OneNote2016&a…

有效数据外含有额外数据_Excel|应用数据有效性规范数据录入

【问题】EXCEL输入数据时,经常会输入不规范或者无效的数据,对数据的统计工作带来很大的麻烦。数据验证能够建立特定的规则,限制单元格可以输入的内容,从而规范数据输入,提高数据统计与分析效率。数据验证,在…

怎么实现hover_web前端CSS实现一个粒子动效的按钮

按钮(button)可能是网页中最常见的组件之一了,大部分都平淡无奇,如果你碰到的是一个这样的按钮,会不会忍不住多点几次呢?通常这类效果第一反应可能就是借助canvas了,比如下面这个案例点击预览(建议去codepen原链接点击…

获取某一列_Excel VBA 8.2 获取多列唯一值,不用肉眼,VBA帮你快速搞定

前景提要(文末提供源码下载)昨天我们学习了针对单列的数据进行获取唯一值的方法,今天我们提升下难度,来尝试下获取已多列为参照物,获取唯一值的方法,昨天有很多小伙伴说还可以用字典的方法更加的简单,其实,…

dataoutputstream.write 有时无法发送_RTK实操——CORS官方网教您如何解决RTK无法固定的问题...

测量员在日常测量工作中,非常期盼都能“固定解”,特别是是在密林、高楼下接收信号-测定位置-收工绘图,一整套流程跑完,就稳妥了。然而事与愿违,在使用过程中,有时候会遇到各种各样的复杂状况,导…

《DSP using MATLAB》示例Example7.25

今天清明放假的第二天,早晨出去吃饭时天气有些阴,十点多开始“清明时节雨纷纷”了。 母亲远在他乡看孙子,挺劳累的。父亲照顾生病的爷爷…… 我打算今天把《DSP using MATLAB》第7章结束,剩下的几个例子看不懂了,先跳过…

freemarker使用说明_SpringBoot+Swagger2集成详细说明

SpringBootSwagger2集成详细说明引言:为什么使用Swagger?在Vue没有出来之前,都是前后端在一起:后端用的SSM或者SSH框架前端完全就是静态页面模板引擎。例如:JSP开发久的人应该听说过,和现在的Thymeleaf、 V…

Vim中根据正则对选中文本对齐(比如ini文件的=号对齐)

vimrc增加如下内容即可&#xff1a; vnoremap <M-> :call Duiqi(\v(^\s*\S)\s(.*))<CR> "reg匹配的第2段文字对齐 function! Duiqi(reg) let l0 line("<") let l1 line(">") "获取第1个单词及前面空格的最大长度 let…

mysql主从架构搭建_mysql主从架构搭建

背景知识&#xff1a;主从这个架构可以实现数据备份&#xff0c;数据在多个服务器上分布等等&#xff0c;当然最主要的优点是可以实现负载均衡&#xff0c;将写操作交给主节点&#xff0c;读操作交给从节点。mysql官网有很多版本&#xff0c;例如Enterprise(企业版需要付费&…

Linux快速搭建FTP服务器

FTP 是File Transfer Protocol&#xff08;文件传输协议&#xff09;的英文简称&#xff0c;而中文简称为“文传协议”。用于Internet上的控制文件的双向传输。同时&#xff0c;它也是一个应用程序&#xff08;Application&#xff09;。基于不同的操作系统有不同的FTP应用程序…

mysql 连接 监控_mysql监控优化(一)连接数和缓存

一、mysql的连接数MYSQL数据库安装完成后&#xff0c;默认最大连接数是100&#xff0c;一般流量稍微大一点的论坛或网站这个连接数是远远不够的&#xff0c;连接数少的话&#xff0c;在大并发下连接数会不够用&#xff0c;会有很多线程在等待其他连接释放&#xff0c;就可能会导…

day35-hibernate映射 03-Hibernate持久态对象自动更新数据库

持久态对象一个非常重要的能力:自动更新数据库。 package cn.itcast.hibernate3.demo1;import static org.junit.Assert.*;import org.hibernate.Session; import org.hibernate.Transaction; import org.junit.Test;import cn.itcast.utils.HibernateUtils;/*** Hibernate的测…

go 删除 文件 某行_Go实战--用echo嵌入静态资源

生命不止&#xff0c;继续 go go go !!!使用 Go 开发应用的时候&#xff0c;有时会遇到需要读取静态资源的情况。比如开发 Web 应用&#xff0c;程序需要加载模板文件生成输出的 HTML。在程序部署的时候&#xff0c;除了发布应用可执行文件外&#xff0c;还需要发布依赖的静态资…

python 运维自动化之路 Day2

学习内容&#xff1a; 1、模块初识 2、Pyc是什么 3、Python数据类型 4、数据运算 5、bytes数据类型 6、列表和元组的使用 7、字符串常用操作 8、字典的使用 1、模块初识 如果用 python 解释器来编程&#xff0c;从 Python 解释器退出再进入&#xff0c;那么你定义的所有的方法和…

aMDcpu不支持mysql_Oracle 11.2.0.1在AMD CPU 64位硬件,32位操作系统下的BUG 8670579

通过查询meatlink原因是在ORACLE11.2.0.1 AMD 64位CPU下安装了32位的操作系统&#xff0c;触发了bug 8670579&#xff0c;那要解决该问题只需打上86705bug 8670579硬件信息&#xff1a;CPU:AMD X6在执行dbca的时候也报错如下&#xff1a;[Oracleyorkshi ~]$ dbca## An unexpect…