什么是事务? 我们经常提到事务。
着急的直接跳过下面的引用部分,因为这是我的吐槽,哈哈哈,无聊的可以看看。
突然想到个有意思的回忆,以前在我刚入行当小白的时候, 他喵的总有人跟我拽一些我听不懂的互联网名词。词汇例如:(服务熔断、缓存雪崩、服务降级、缓存穿透、幂等性、事务。。。。。。。)然后就会有这样的对话(啊?xxx这你都不知道是啥?那个xxx你总知道吧,啊?这你也不知道,你是什么专业的?那你只会CRUD?) 我当时觉得哇,好牛逼,我听都听不懂,哇我太low了。搞得自己嘎嘎自卑,怀疑人生。 就为了能听懂大佬们的讲话,大佬们口吐的芬芳,我拼命学习,努力挤进这个圈子。现在也学了些新东西,明白了些互联网名词,但是我确实技术还是很low,但是我还是想说,*** 别 ***再跟老子讲什么那些**词,都他妈简单的要命,就纯纯是装杯骗小孩。这些词,要是没学过,一听那真是挺高级,一单你看完了解释,我。。。。
所以我写文章,很不喜欢用专业词汇,我就想用最通俗的话,把知识讲透彻,看一遍就能懂
开始正题, 这篇就简单介绍下事务的基本属性,和使用场景。
一、什么是事务
通俗讲:我们是一条船上的人。没错这就是事务。人就是操作,船就是事务容器。不管有多少人,只要这些人都上了这条船,那么他们统一就是一个事务,即:他们可能同时抵达岸边,也可能同时翻船沉海,也可能同时又回到出发点,就是他们所有人的状态是一样的。
事务的四大特性:
1、原子性: 就是这整个事务是一个整体不可分割,就想上面举的例子这一条船就是一个事务,不能在分割。
2、一致性:一个事务中的所有操作都是统一的,要么成功要么失败。就像船要么到达岸边,要么翻船。
3、隔离性:每个事务之间互不影响,就像船一样,两个船之间没有任何关系。
4、持久性:事务完成后,数据就会永久保存。
二、本地事务
本地事务,就是我们最简单的,如果你使用的是SpringBoot架构项目,那么只需要给指定的方法添加注解 @Transactional 就为这个方法实现了事务功能,就是说这个方法中的所有操作数据库的操作,要么全部成功,要么全部失败。
三、分布式事务
互联网经过了这么多年的快速发展,我们的系统越来越大,现在大部分系统都已经升级改造成分布式微服务的架构。所以分布式事务就应运而生。因为架构的改变,以前的单体服务是可以用本地事务锁住每个请求的。但是再这种分布式架构中,一个请求就可能会调用很多台服务器的请求才返回最终的结果,如果还是使用本地事务,那么也就只能回滚自己的部分。
所以分布式事务就是只要一个事务中的一个部分出错,我们就回滚所有服务器的操作。
CAP定理
1、一致性 (Consistency)
在分布式系统中的所有数据备份,在同一时刻是否同样的值。
2、可用性(Availability)
在集群中一部分节点故障后,集群整体是否还能响应客户端的读写请求。
3、分区容错性(Partition tolerance)
大多数分布式系统都分布在多个子网络。每个子网络就叫做一个区。分区容错的意思是,区间通信可能失败。
CAP 定理指的是,这三个要素最多只能同时实现两点,不可能三者兼顾。
一般来说,分区容错无法避免,因此可以认为 CAP 的 P 总是成立。CAP 定理告诉我们,剩下的 C 和 A 无法同时做到,所有我们只能选择其一。
现在我们都是大型分布式系统,就像淘宝京东这种,用户众多,访问量很大,所以我们一般都会保证A,而舍弃C。这就有人会说了,那么我们舍弃了C,这系统也不对啊,这不一致性,那系统数据不是错了吗,是的,所以我们就还必须要解决C这个问题。那么我们就引入了新的词汇:BASE理论。
BASE理论
1、基本可用(Basically Available)
系统在面对故障或异常情况时,仍然能够保证基本的可用性和响应能力,即使在部分功能受限或性能下降的情况下。
2、软状态(Soft State)
系统中的数据状态可以在一段时间内是不确定的,允许存在中间状态的过渡,而不要求实时一致性。这意味着系统的状态可以根据特定条件和时间进行调整和更新。
3、最终一致性(Eventual Consistency)
在分布式环境中,由于网络延迟和节点故障等原因,数据副本之间可能存在短暂的不一致。最终一致性的目标是在一定时间内将所有副本达到一致状态,但不需要实时同步。
其实BASE理论也不用太懂, 就要明白一个道理。它是为了解决我们 CAP定理中无法满足的C而设计的一些方案。
CAP定理针对的是强一致性,而BASE理论是弱一致性或最终一致性。
所以像我们最熟悉的淘宝天猫京东这种大型电商网站,都是有这超高的访问量用户量,而且必须我们用户在访问了时候,要保证可以正常访问,所以服务器必然也是非常非常的多, 所以一般都是采用最终一致性的方案来解决CAP定理中的C问题。因为最终一致性方案是支持高并发最好的方案。