分布式事务
事务四大特性:
原子性:事务中所有的操作要么全部成功,要么全部失败
一致性:要保证数据库内部完整性约束,声明性约束
隔离性:数据之间的操作相互隔离
持久性:对数据的修改是永久性的
CAP
一致性:用户访问分布式系统中的任意节点,得到的数据必须是一致的
可用性:用户访问集群中的任意健康节点,必须能得到响应,而不是超时或拒绝
分区容错性:因为网络故障或其他原因导致分布式系统中的部分节点与其他节点失去连接,形成独立分区
- 分区:因为网络故障或其他原因导致分布式系统中的部分节点与其他节点失去连接,形成独立分区。
- 容错:在集群出现分区时,整个系统也要保持对外提供服务
BASE理论
BASE理论是对CAP的一种解决思路,包含三个思想:
- Basically Available (基本可用):分布式系统在出现故障时,允许损失部分可用性,即保证核心可用。
- Soft State (软状态):在一定时间内,允许出现中间状态,比如临时的不一致状态。
- Eventually Consistent(最终一致性):虽然无法保证强一致性,但是在软状态结束后,最终达到数据一致。
CP:强一致性,牺牲可用性
AP:高可用性,软状态【可以临时允许出现数据的不一致,最终保证数据的最终一致性】
可使用seata实现分布式事务处理
seata地址http://seata.io/zh-cn/docs/overview/what-is-seata.html
TC:事务协调者
TM:事务管理器
RM:资源管理器
XA模式
XA模式的优点是:
-- 事务的强一致性,满足ACID原则
-- 常用数据库都支持,实现简单,并且没有代码侵入
XA模式的缺点是:
-- 因为一阶段需要锁定数据库资源,等待二阶段结束才释放,性能较差
-- 依赖关系型数据库实现事务
AT模式
AT模式的优点:
-- 一阶段完成直接提交事务,释放数据库资源,性能比较好
-- 利用全局锁实现读写隔离
-- 没有代码侵入,框架自动完成回滚和提交
AT模式的缺点:
-- 两阶段之间属于软状态,属于最终一致
-- 框架的快照功能会影响性能,但比XA模式要好很多
AT模式与XA模式的区别
AT模式与XA模式最大的区别
-- XA模式一阶段不提交事务,锁定资源;AT模式一阶段直接提交,不锁定资源
-- XA模式依赖数据库机制实现回滚;AT模式利用数据快照实现数据回滚
-- XA模式强一致;AT模式最终一致
TCC模式
TCC模式的每个阶段是做什么:
- Try:资源检查和预留
- Confirm:业务执行和提交
- Cancel:预留资源的释放
TCC的优点:
- 一阶段完成直接提交事务,释放数据库资源,性能好
- 相比AT模型,无需生成快照,无需使用全局锁,性能最强
- 不依赖数据库事务,而是依赖补偿操作,可以用于非事务型数据库
TCC的缺点:
- 有代码侵入,需要人为编写Try、Confirm、Cancel接口,太麻烦
- 软状态,事务是最终一致
- 需要考虑Confirm、Cancel、空回滚、业务悬挂、以及幂等性处理
Saga模式:
Saga模式是SEATA提供的长事务解决方案,也分为两个阶段:
- 一阶段: 直接提交本地事务
- 二阶段:成功则什么都不做;失败则通过编写补偿业务来回滚
Saga模式优点:
- 事务参与者可以基于时间驱动实现异步调用,吞吐量高
- 一阶段直接提交事务,无锁,性能好
- 不用编写TCC中的三个阶段,实现简单
Saga模式缺点:
- 软状态持续时间不确定,时效性差
- 没有锁,没有事务隔离,会有脏写