分布式事务面试题
1、谈谈对分布式事务的理解以及为什么需要分布式事务?
以前在单机环境中,事务往往靠数据库来完成。但是现在的分布式系统中,存在多个节点,这些节点间传输数据存在网络波动问题,会导致大量的脏数据存在,此时需要分布式事务来保证,这些节点要么业务逻辑都执行成功,要么都失败,以此保证数据一致性。
2、谈谈2PC过程?
2PC机制中存在两个角色,事务参与者和事务协调者。并且2PC存在两个阶段,分别是准备阶段和提交阶段。在准备阶段,事务协调者会询问每个事务参与者,是否准备好,此时事务参与者会执行业务代码,没有问题情况下会告知协调者已经准备好了。在所有的参与者都准备好的情况下,进入提交阶段。事务协调者会让所有的事务参与者提交事务。如果有一个或多个参与者提交失败,那么协调者会告知其他参与者回滚事务。
3、2PC过程中,事务参与者和协调者网络故障怎么处理?
(1)如果协调者发送消息后,参与者响应超时,可以认为事务执行失败,让所有参与者进行回滚
(2)设置一个心跳机制,协调者定时检测参与者是否正常
(3)协调者与参与者不直接通信,可以通过消息中间件进行信息传输
4、2PC和3PC有什么不同?
3PC比2PC多了一个阶段,3PC包括:CanCommit、PreCommit和DoCommit三个阶段。在CanCommit阶段,协调者会让参与者检查下环境是否正常,sql语句是否正常。这个阶段不会占用系统资源。PreCommit和DoCommit阶段与2PC大致相同。不过,3PC不光是协调者,参与者也有超时机制。在PreCommit和DoCommit阶段,参与者接收到协调者响应超时的话,会回滚事务。
5、谈谈AT模式?
AT模式是2PC模式的改进版。AT模式也是有两个阶段。在准备阶段,会将数据库中涉及到的数据生成镜像,然后更新数据库数据,将更新后的数据也生成一份镜像,然后对数据上锁。在提交阶段,如果提交成功,则将生成的两个镜像删除并且释放锁即可;如果失败,则先将新数据镜像与数据库中当前数据比较是否一致,如果不一致需要人工参与修正,如果一致,则使用旧数据镜像对数据进行还原,然后删除两个镜像以及释放锁。
6、谈谈TCC模式?
TCC模式分为三个阶段:Try阶段,Confirm阶段和Cancel阶段。在Try阶段,会预先锁定一些资源,并且检查环境是否正常;在Confirm阶段执行业务代码,如果发生异常,Cancel阶段可以进行补偿。TCC模式的三个阶段代码都需要程序员编写,工作量巨大。
7、谈谈Saga模式?
Saga模式是将一个事务分成多个小的事务。存在两种实现方式,一种是基于事件发布的方式。这种方式是第一个事务提交成功后,发布一个事件,第二个事务消费事件后,提交本地事务,提交成功也发布一个事件,第三个事务消费和提交。如果其中某个事务提交失败,则发布一个提交失败的事件,让前面已经提交的事务消费后回滚。这种形式 容易产生循环事件监听。第二种是基于命令的方式。这种方式有一个协调中心,第一个事务提交后,告诉协调中心,协调中心让其他事务也提交,如果其中有个事务提交失败, 告诉协调中心,协调中心会让其他事务回滚。