几种分布式事务技术的比较

1、基于xa的2pc、 3pc: dbms实现的分布式事务,在整个分布式事务的执行过程中,都会锁表(相关的),效率比较低(一个请求进来,可能会锁多个数据库的表),但是保证强一致性。

2、TCC:需要改造业务逻辑,手动实现 try的锁定的功能。对业务侵入很强。

3、saga:默认执行成功,在需要的时候,再回调cancel。已经提交的事务,不保证隔离性。

4、seata:对于update insert delete自动生成回滚的sql,需要时进行回滚,但是不保证数据的强一致性,回滚时会导致脏读(回滚和提交是2个本地的事务)

5、lcn:发起方最后成功,触发各个阶段的真正提交。不会脏读,性能介于seata和2阶段之间。但是发起方挂了,会导致 数据不一致(可能性小,而且真的是这种情况,也算是可以接受)

  • seata和lcn大致的实现思路是一致的,但是回滚的机制不一样。
  • lcn是采取代理数据源的模式,再根据发起方执行本地事务的结果进行回滚或者提交
  • seata采取的是根据undo_log日志表,进行逆向生成sql语句,来解决回滚
  • lcn能够保证强一致性,但可能发生死锁的现象
  • seata能保证最终一致性,但可能造成脏读

相关推荐