分布式事务相关面试题
分布式事务
1.什么是事务
访问并更新数据库中各种数据项的一个程序执行单元
通俗一点说就是,一手交钱一手交货,要么钱货两清,要么终止交易
2.什么是本地事务
通常我们使用关系型数据库来控制事务(是数据库本身的能力),数据库事务,应用程序主要靠关系型数据库来控制事务,通常单体架构中,数据库跟应用程序是在一起的(同一个服务器),所以基于关系型数据库的事务,又被称为本地事务
3.spring如何接管本地事务
使用:1.配置文件 2.注解
核心是阻止了原来返回的connection,返回了自己的connection
4.事务的ACID
原子性(atomicity):一个事务是一个不可分割的工作单位,事务中包括的操作要么都做,要么都不做。
一致性(consistency):事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
隔离性(isolation):一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
持久性(durability):持久性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。
5.CAP
C:一致性:从数据库必须等待主数据库数据同步完成,才能给客户响应(过程阻塞)
A:可用性:我现在可以先返回就的数据给用户(从故武器没有获取主服务器最新的数据)
P:分区容错性:高可用,分布式系统中的任何一个节点挂了,都不影响其他节点
典型应用场景
CP:银行取钱
AP:准备发货中,支付中
6.BASE理论
BASE理论是对CAP中的一致性和可用性进行一个权衡的结果,理论的核心思想就是:我们无法做到强一致性,但每个应用都可以根据自身的业务特点,采用适当的方式来使西永达到最终一致性
BASE理论是Basically Available,基本可用,Soft State,软状态,状态可以有一段时间不同步,Eventually Consistent,最终一致,最终数据是一致的就可以了,而不是时时保持强一致。
7.什么是分布式事务
百度百科 - 分布式事务是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上
通俗来说:需要远程协助才能操作的事务,称之为分布式事务
8.分布式事务常见解决方案
2pc/3pc tcc at mq sage
二阶段提交(英文缩写:2pc)
在分布式系统中,每个节点虽然可以知晓自己的操作成功或失败,但不知晓其他节点的成功或失败
第一阶段请求阶段
1 协调者(Coordinator,即事务管理器)会向事务的参与者(Cohort,即本地资源管理器)发起执行操作的 CanCommit 请求,并等待参与者的响应.
2 参与者接收到请求后,会执行请求中的事务操作,记录日志信息(包含事务执行前的镜像),同时锁定当前记录。参与者执行成功,则向协调者发送“Yes”消息,表示同意操作;若不成功,则发送“No”消息,表示终止操作。
3 当所有的参与者都返回了操作结果(Yes 或 No 消息)后,系统进入了提交阶段。
第二阶段提交阶段
协调者会根据所有参与者返回的信息向参与者发送 DoCommit 或 DoAbort 指令
若协调者收到的都是“Yes”消息,则向参与者发送“DoCommit”消息,参与者会完成剩余的操作并释放资源,然后向协调者返回“HaveCommitted”消息;
如果协调者收到的消息中包含“No”消息,则向所有参与者发送“DoAbort”消息,此时发送“Yes”的参与者则会根据之前执行操作时的回滚日志对操作进行回滚,然后所有参与者会向协调者发送“HaveCommitted”消息;
协调者接收到“HaveCommitted”消息,就意味着整个事务结束了。
二阶段提交的实现 - XA
三阶段提交,也叫三阶段提交协议(英文缩写3pc)
是在计算机网络及数据库的范畴下,使得一个分布式系统内的所有节点能够执行事务的提交的一种分布式算法。三阶段提交是为解决两阶段提交协议的缺点而设计的。
TCC:try,confirm,cancel
tcc补偿机制
try:预处理 - 完成所有的业务检查(一致性),预留必须业务资源(准隔离性)锁定资源
confirm:确认(如果成功了,执行confirm)
cancel:撤销(若果失败了,执行cancel)
缺点:1.补偿代码复杂 2.因为补偿需要保证幂等性 - 乐观锁
优点:不需要一致阻塞 - 快
seate
1.seate AT 与XA的区别
本质上都是2pc,但是XA是在数据库,AT是在业务层
AT多了一个TC
TM负责决议,TC负责通知RM,RM负责执行