分布式事务:分布式事务是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。
先来理解几个概念:事物具有四大特性ACID,分布式系统无法同时满足CAP中的三种特性,所以我们一般使用最终一致性BASE。
ACID:
原子性(Atomicity)
:原子性指事务包含的所有操作要么全部成功,要么全部失败回滚。
一致性(Consistency)
:一致性指一个事务执行之前和执行之后数据库都必须处于一致性状态。
加入数据库的状态满足所有完整性约束,就说数据库是一致的。
例如完整性约束a+b=10,如果一个事务改变了a,那么b也应随之改变。
隔离性(Isolation)
:隔离性指当并发的事务是相互隔离的,即一个事务内部的操作及正在操作的数据必须封锁起来,不能被其他企图修改的事务看到。
持久性(Durability)
:持久性指对于任意已提交事务,系统必须保证该事务对数据库的改变不被丢失,即使数据库出现故障。
CAP:
一致性(Concistency)
:这里说的一致性是指强一致性。分布式系统中,数据都是以多副本的形式存储在不同的节点中,要任何时刻数据副本之间的状态保持一致性。即一个进程对一个节点中的数据进行了更新后,同时其他节点中的数据副本实时也进行了更新。另一个进程读取其他节点的数据是最新版本。
可用性(Availability)
:是指在任何时刻系统提供的服务都是可用的。用户或者客户端发送一个请求,服务总是在规定的时间内返回请求结果。在规定的时间内,没有返回请求结果,则认为服务不可用。
分区容忍性(Partition Tolerance)
:分布式系统在遇到任何网络分区故障的时候,仍然需要能够保证对外提供满足一致性和可用性的服务,除非是整个网络环境都发生了故障。注意:不是分区容错性
BASE:
基本可用(Basically Available)
:基本可用是指允许发生不可预知的故障,但是服务对外照常可用。只是损失部分可用性。
软状态(Soft state)
:数据副本在整个服务运行期间,允许在某一个时刻(比如,数据复制)允许存在中间状态,但是最终数据的状态保持一致。在处于弱状态时,整个服务可用。
最终一致性(Eventually consistent)
:在经过一定的时间后,所有数据副本的状态都已经保持一致。一致性的本质就是要保证数据最终一致性。
解决方案:两阶段提交、最终一致性、TCC、MQ事务消息、Sagas工作流引擎
1、两阶段提交
:事务协调器,准备阶段,提交阶段,牺牲了可用性;
2、TCC
:补偿事务,TRY,Comfirm,Cancel,需要写补偿代码,不能保证强一致性;
3、最终一致性
:本地消息表,异步处理,最终一致,消息表容易耦合到业务逻辑中。
4、MQ事务消息
:RocketMQ,发送消息,确认消息,发送方需要提供check接口
5、Sagas事务模型
:Sagas工作流引擎协调,失败补偿,需要写补偿代码。