1、事务的特征有哪些?分别是什么意思?

A 原子性 在一个事务的所有操作,要么全部成功,要么全部失败
C 一致性 事务执行的前后,数据是保持一致性,例如转账例子
I 隔离性 多个并发的事务应该要相互隔离
如果隔离行不好,则产生
脏读 一个事务读取到另一个事务未提交的数据
不可重复读 一个事务读到到另一个事务的已经提交更新数据
幻读 一个事务多次读取结果(新增的已提交的数据)不一致

  1. 为了防止这些现象,修改数据库的隔离级别<br /> 脏读 不可重复读 幻读<br /> read uncommited(读未提交) 有<br /> read commmited(读已提交) oracle默认隔离级别)<br /> repeatable read(可重复读) mysql默认隔离级别)<br /> Serializable(串行化) 无<br /> <br />D **持久性 ** 事务一旦提交,则永久保存,即使故障也不丢失

2、你了解过CAP定理和BASE理论吗?

CAP定理,C是值一致性,A指可用性,P指容错性。
CAP定理,在说P必然存在的,C和A只能选择一个特性。在CAP定理,只存在CP或AP。

BASE理论,是对CAP一种补充:
BA指基本可用,S代表软状态,E代表最终一致性
CAP定理说如果选择了一致性,就放弃了可用性,但BASE理论说选择了一致性,只是损失了部分可用,意味处于基本可用。
CAP定理说如果选择了可用性,就放弃了一致性,但BASE理论说选择了可用行,只是存在临时的不一致状态,这种临时的不一致性称为软状态,这种软状态过后最终会达成一致性。

3、项目中有用到分布式事务么?什么技术?Seata有哪些模式?你们用的哪个模式?

有用到。用到阿里巴巴的Seata,Seata有四种模式,分别为XA模式,AT模式,TCC模式,SAGA模式。
我的项目中使用到AT模式/TCC模式。

4、请问Seata的AT模式是AP还是CP?那大概解释一下Seata的AT模式的原理

AT模式是一种AP模式(强可用,弱一致性)。

Seata的AT模式的执行流程大概就这样:
Seata架构中存在三大组件,TC(TC是事务协调者),TM(事务管理器)和RM(资源管理器)。
首先,由TM向TC发出开始全局事务的请求,TC在全局事务表中记录数据。
接着,由TM通知各个的RM调度各自的分支事务,这时分支事务开始执行啦。分支事务先向TC进行注册分支事务,开始执行SQL语句并提交,在SQL执行的前后,AT模式会把更新记录的前后数据保存到undo_log日志表中作为数据快照,再上报事务执行结果给TC。
最后,TC收集到所有分支事务的执行状态,进行分析,决定是否提交还是回滚,如果提交,则TC向所有RM发出删除undo_log日志记录的请求。如果回滚,则TC向所有RM发出读取undo_log数据快照做数据恢复的请求。

在AT的执行过程中,我了解到会有脏写的情况存在,Seata考虑到了,利用全局事务锁表,在每个分支事务提交之前,判断是否能获取全局事务锁,决定是否提交,这样就控制脏写。

5、请大概解析一下Seata的TCC模式的原理?

Seata的AT模式的执行流程大概就这样:
Seata架构中存在三大组件,TC(TC是事务协调者),TM(事务管理器)和RM(资源管理器)。
其实TCC模式,就是我们在一个业务编写三个方法,成为try方法,confirm方法,cancel方法。

首先,由TM向TC发出开始全局事务的请求,TC在全局事务表中记录数据。
接着,由TM通知各个的RM调度各自的分支事务,这时分支事务开始执行啦。分支事务先执行try方法,进行资源预留(如冻结金额),然后向TC提交事务状态。
最后,TC收集到所有分支事务的执行状态,进行分析,决定是否提交还是回滚,如果提交,则调用confirm方法(把预留资源清除),如果回滚,则调用cancel方法(利用预留资源恢复原有的数据)。