[Java复习] 分布式事务 Part 2
分布式事务了解吗?如果解决分布式事务问题的? 面试官心里: 只要聊到你做了分布式系统,必问分布式事务,起码得知道有哪些方案,一般怎么来做,每个方案的优缺点是什么。 为什么要有分布式事务? 分布式事务实现的几种方案: 1. 两阶段提交方案/XA 方案 这种分布式事务方案,比较适合单块应用里。 跨多个库的分布式事务 ,由于因为严重依赖于数据库层面来搞定复杂的事务,效率很低,绝对不适合高并发的场景。 如果要玩儿,那么基于 Spring + JTA 就可以搞定。 这个方案,很少用,一般来说某个系统内部如果出现跨多个库的这么一个操作,是不合规的。 如果你要操作别人的服务的库,你必须是通过调用别的服务的接口来实现,绝对不允许交叉访问别人的数据库。 2. TCC(Try, Confirm, Cancel) 方案 使用补偿机制。分三个阶段: Try 阶段:这个阶段说的是对各个服务的资源做检测以及对资源进行锁定或者预留。 Confirm 阶段:这个阶段说的是在各个服务中执行实际的操作。 Cancel 阶段:如果任何一个服务的业务方法执行出错,那么这里就需要进行补偿,就是执行已经执行成功的业务逻辑的回滚操作。(把那些执行成功的回滚) 缺点:与业务耦合太紧,事务回滚严重依赖自己的写的代码来回滚和补偿。 适用场景: 与钱打交道的场景,支付,交易 。需要TCC,严格保证分布式事务要么全部成功