Atomicity(原子性):一个事务中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被恢复到事务开始前的状态,就像这个事务从来没有执行过一样。
Consistency(一致性):在事务开始之前和事务结束以后,数据库的完整性没有被破坏。完整性包括外键约束、应用定义的等约束不会被破坏。
Isolation(隔离性):数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。
Durability(持久性):事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。
基本业务可用性(Basic Availability)
柔性状态(Soft state)
最终一致性(Eventual consistency)
原子性:严格遵循
一致性:事务完成后的一致性严格遵循;事务中的一致性可适当放宽
隔离性:并行事务间不可影响;事务中间结果可见性允许安全放宽
持久性:严格遵循
分布式事务的 X/Open 标准定义了分布式事务处理的模型。在此模型中,协调事务管理器管理每个数据源如何根据参与事务的所有数据源的知识处理事务。通常,管理自己的事务落实与恢复的数据源会将此任务委托给事务管理器。
根据 X/Open 标准,分布式事务处理模型包含以下组件:
XA一共分为两阶段:
如果有任何一个参与者prepare失败,那么TM会通知所有完成prepare的参与者进行回滚。
目前主流的数据库基本都支持XA事务,包括mysql、oracle、sqlserver、postgre
XA 事务由一个或多个资源管理器(RM)、一个事务管理器(TM)和一个应用程序(ApplicationProgram)组成。
简单易理解,开发较容易
对资源进行了长时间的锁定,并发度低
对支持事务的数据库友好;不支持事务数据库需要自己实现回滚逻辑
两阶段提交协议的演变:
一阶段:业务数据和回滚日志记录在同一个本地事务中提交,释放本地锁和连接资源。
二阶段:
仅支持本地 ACID 事务 的 关系型数据库
Saga模式是SEATA提供的长事务解决方案
在Saga模式中,业务流程中每个参与者都提交本地事务,当出现某一个参与者失败则补偿前面已经成功的参与者,一阶段正向服务和二阶段补偿服务都由业务开发实现。
需要业务方维护编写两个接口,执行和补偿