分布式事务拆开来其实就是分布式、事务两个概念,分布式简单讲就是不同进程间的系统进行通信;事务狭义上我们经常把它看作是数据库的事务,事务具有ACID特性即:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability),通俗来说就是同一个事务中对于数据库的更新操作来说要么都成功,要么都失败;广义上来说同一个事务中的一批操作(非局限于数据库操作)要么都成功,要么都失败;综合来说就是事务的参与者分别位于不同的进程节点中。
既然和分布式有关,那我们很有必要了解一下分布式系统的几个理论CAP和Base理论;
一个分布式系统不可能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三个基本需求,最多只能同时满足其中的两项;
一致性:所有节点在同一时间具有一致的数据,以下单为例:用户订单生成,库存减少,用户付钱等操作要么一起成功要么一起失败; 可用性:服务一直可用,而且是正常响应时间; 分区容错性:分布式系统在遇到某节点或网络分区故障的时候,仍然能够对外提供满足一致性和可用性的服务。
对于一个分布式系统而言,分区容错性可以说是一个最基本的要求;所以大部分情况其实都是在CA两者之间进行权衡;分布式事务同样存在这样的抉择,比如下面要介绍的X/Open XA协议,更加倾向于一致性;但是面对互联网的高并发,这种强一致性引发了很大的性能问题,而基于BASE理论的柔性事务可能是更好的一个选择;
BASE是Basically Available(基本可用)、Soft state(软状态)和Eventually consistent(最终一致性)三个短语的简写。很明显BASE理论更加倾向满足CAP理论中的AP,既满足可用性,分区容忍性的系统,通常可能对一致性要求低一些;
BASE理论和ACID可以说是完全相反的,ACID保证的是强一致性牺牲可用性,BASE理论是用最终一致性代替强一致性保证可用性;在实际的场景中,不同的业务对数据的要求是不一样的,所以大部分情况下BASE理论和ACID是结合起来使用的;
基于BASE理论的柔性事务典型方案:最大努力通知型,TCC,异步确保型等;
关于CAP,ACID,BASE理论可以通过如下图做一个直观的了解:
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69998181/viewspace-2769498/ ,如需转载,请注明出处,否则将追究法律责任。