#
XA事务遵循了两阶段提交协议,我个人认为,两阶段协议是一种学术理论,而XA则是把两阶段提交协议具象化后得一个标准。它定义了协调者和参与者之间的接口。用专业的术语来说,就是定义了事务管理器(Transaction Manager)和资源管理器(Resource Manager)之间的接口。
在提交阶段,协调者会不断重试直到把 Commit 请求发送给协调者;协调者如果在提交阶段中途崩溃,也要确定是否需要提交或者回滚。那么你就应该可以理解,在重试成功之前,或者在协调者恢复过来重新提交或者回滚之前,数据是不一致的。所以我个人倾向 XA 不满足 ACID。但是相比其他的方案,它更加接近 ACID。
- 如果公司使用了分库分表,是否允许跨库事务?
- 如果允许跨库事务,那么是如何解决的?
- 如果你使用了分库分表中间件,那么它支持哪些类型的事务
- 在微服务层面,使用的是什么样的分布式事务方案?是TCC、SAGA还是AT?
- 在使用分布式事务的时候,中间步骤出错了怎么办?
最好收集一些实际的案例,在面试的时候作为证据
面试微服务架构的时候就可能面到分布式事务,面试可能会问这两个问题?
- 在单体应用拆分为微服务架构之后,怎么解决分布式事务?
- 服务是共享一个数据库吗?不是的话,怎么解决分布式事务问题
在分库分表里也会有类似的问法。
- 在单库拆分之后,怎么解决分布式事务问题
- 当你开启一个事务的时候,分库分表中间件做了什么
- 怎么在分库分表的事务里保证ACID
有些时候面试官不会直接问分布式事务,而是问你数据一致性的问题,其实基本上也是问的分布式事务。他可能这样问:“如果你的 DELETE 语句,经过分库分表之后要删除多张表的数据,那你怎么保证数据一致性?”
所以对于数据一致性的问题,你也要做好准备。其实面试翻车的一个主要原因就是你不熟悉各种异常情况的处理方案,所以在接下来各种方案里面,容错都是一个比较重要的部分。