前言
共8题。
什么是分布式事务?
假设有如下场景,一个业务包含多个子业务,这些子业务分布在不同的服务器或者数据库上,此时就需要使用分布式事务来保证这些子业务同时成功或失败。本质上来说,这种场景涉及多个数据源,分布式事务就是为了保证不同数据库的数据一致性。
产生分布式事务的原因主要有:
-
跨库事务:操作多个库,不同的库中存储不同的业务数据;
-
跨服务事务:调用多个微服务,不同的微服务操作的是不同的数据库。
什么是CAP理论?
CAP分别是一致性、可用性、分区容错性:CAP定理是指这个三个指标最多可以同时满足两个。
CP表示强一致性,AP表示可用性。
为什么分布式系统中无法同时AC?
对于分布式系统而言,因为网络交互可能会存在延时或者网络不可用的状态,所以分区是不可避免的。
在此条件下,若要保证各节点的一致性,就必须等待数据同步完才能正常访问服务,同时提交同时回滚达成强一致性,这就无法满足可用性;若要保证各节点的可用性,就必须在接收到请求后立即返回响应,这个时候可能还没有完成数据的统一,所以就无法满足一致性。所以,在存在系统分区的场景下,可用性和一致性无法同时满足。
什么是BASE理论?
BASE理论是CAP理论的延伸,核心思想是即使无法做到强一致性,但可以采用适合的方式达到最终一致性。
分布式事务的解决方案有哪些?
常见的有2PC、TCC,还可以用MQ来做:
- 2PC:它是一种保证强一致性的处理方式,主要将事务分为两个阶段:
-
准备阶段(
P):所有参与者都将本事务执行预提交,并将能否成功的信息反馈发给协调者; -
提交阶段(
c):协调者根据所有参与者的反馈,通知所有参与者,一起执行提交或回滚;
必须在最后阶段释放锁资源。
- TCC:又称补偿事务,它是一种保证最终一致性的处理方式,分为两阶段:
-
RM将分支事务注册到TC,执行try操作预留资源,然后向TC报告事务状态; -
根据各分支事务的状态执行
confirm提交或者cancel回滚。
场景- 涉及到非关系型数据库时(Redis)。
- MQ分布式事务:如果数据强一致性要求没那么高,可以采用消息中间件(
MQ)实现事务最终一致。
Seata的架构是什么?
Seata事务管理中有三个重要的角色:
-
事务协调者-
TC(Transaction Coordinator) :保存分支事务的状态,根据结果决定最后是提交还是回滚; -
事务管理器-
TM(Transaction Manager) :定义全局事务的范围、开始、提交或回滚全局事务; -
资源管理器-
RM(Resource Manager) :向TC上报分支事务的状态,并根据状态判断提交或回滚。
XA模式的工作流程是什么?
XA模式的工作流程是:执行sql后事务不提交(意味着一直占用connection)等多个sql都执行后再统一提交或回滚(CP)。
XA模式要等所有事务执行完毕才能提交,牺牲了可用性,保证了强一致性。
AT模型的工作原理是什么?
AT模型的工作原理是:执行sql后事务提交,保存快照(修改前数据)到undolog表中,等多个sql执行后,若都成功就删除快照,若有失败的就从快照表中读取数据恢复(AP)。
AT保证了可用性,实现最终一致性。