补偿机制
两个服务:addUser和addScore
先调用addUser,成功返回true,直接提交事务。
addUser调用成功返回true后,开始调用addScore,如果执行成功,直接提交事务,执行失败,则调用delUser,将新添加的用户删除。
补偿机制就是说,当先前事务已提交,后续事务出现异常时,调用补偿的方法,将先前更改的数据删除。
补偿机制的不足:1、不同的事务要写不同的补偿机制,不具备通用性。2、补偿的事务失败没有考虑进来。3、如果业务复杂,if/else嵌套很多层。
两阶段提交
两个服务:addUser和addScore。
先调用addUser,成功不提交事务,调用addScore,成功则将两个事务一起提交,失败则一起回滚。
此方法降低了出现数据不一致发生的概率,如果采用更新就提交事务的方式,后续事务出现异常,则需回滚,而事务2的执行时间+提交时间过长,除出现异常的几率增加。而事务一起提交的时间很短,出现的概率降低了。
两阶段提交机制不足:事务提交会释放数据库连接,而两阶段提交则一直占用着数据库连接,等事务提交完才释放,这就意味着,数据库连接占用时间增加,系统整体吞吐量降低。
此文为网络上看到的自己的理解,如有雷同,纯属我抄的,对不起。