您当前的位置: 首页 >  spring

wu@55555

暂无认证

  • 2浏览

    0关注

    201博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

springcloud进阶:四种分布式事务模式选型

wu@55555 发布时间:2022-05-02 01:00:44 ,浏览量:2

0.引言

之前我们已经针对四种分布式事务模式AT,TCC,SAGA,XA进行了详解。本篇主要针对四种模式的应用场景进行总结比较。如果想详细了解四种模式的,可以看看专栏往期博文:

springcloud进阶:四种分布式事务模式之AT模式(一)

springcloud进阶:四种分布式事务模式之TCC模式(二)

springcloud进阶:四种分布式事务模式之SAGA模式(三)

springcloud进阶:四种分布式事务模式之XA模式(四) 在这里插入图片描述

1. 四种分布式事务模式特性总结
  • 易用性 从易用性上来看AT和XA模式是最容易上手的,他们都是无代码入侵的,基于seata的实现中只需要添加上@GlobalTransactional注解即可。而TCC和SAGA都是需要自己实现业务代码的,使用起来相对较难。

  • 数据一致性 XA模式需要等到所有事务执行完成后才释放本地锁,所以是四个模式中数据一致性最强的;AT模式采取全局锁和本地锁结合使用,所以数据一致性也得以保障,当然不如XA模式这样强。TCC模式与SAGA都是自己实现业务代码,因此一致性上较其他两种要弱些,特别是SAGA模式的长事务,更容易引起脏读

  • 性能性 不加锁的性能一定最佳,数据一致性和性能一直是一个相对概念,因此TCC模式性能相对最高,SAGA因为本身是对长事务的支持,从执行时间上看并不占用,但单看执行性能,因为没有锁,所以仅次之TCC。XA是等到所有事务执行完成后才释放本地锁,所以性能最差

2. 分布式事务模式应用选型 2.1 AT模式

AT模式是实际开发中最常用的模式,他无代码入侵的特性,适应于不希望对代码进行改造的场景,因为AT模式要求数据库是支持本地事务的数据库,但是因为市面上多数使用的都是支持事务的数据库,所以其应用也十分广泛。

同时AT模式采用全局锁的概念,在本地事务执行完成后就会释放本地锁。所以性能也有一定的保障。

综上,AT适用的场景:

  • 不希望对代码进行改造的场景
  • 数据库支持事务操作,这是必要条件
  • 对性能没有特别高要求的业务 在这里插入图片描述
2.2 TCC模式

TCC中没有全局锁,通过自己实现try-confirm-cancel三个方法的业务代码来实现事务。所以TCC模式的应用场景:

  • 对性能有较高要求的业务场景
  • 存储库不支持事务的场景
  • 支持跨服务:这一点之前没有提到,seata的AT模式是不能跨服务的(这里的服务特指系统级别的服务,可以理解为系统,非常规理解的微服务),但是因为TCC的二阶段代码都是我们自己实现的,所以跨服务跨平台都可以自主实现 在这里插入图片描述
2.3 SAGA模式

SAGA模式专用于解决长事务业务场景。不用等到事务执行完成后才释放锁定的资源。综上,SAGA模式适用于

  • 长事务业务场景
  • 适用于需要接入老服务、第三方服务或者其他无法改造的服务的业务场景
  • 需要操作更细分散在多个服务、系统中的数据的业务场景 在这里插入图片描述
2.4 XA模式

XA模式与AT模式的区别在与XA模式需要在所有事务执行完成后才释放本地锁,所以XA模式适用于:

  • 对性能要求低,但要求强一致性的业务场景。 在这里插入图片描述
关注
打赏
1664985904
查看更多评论
立即登录/注册

微信扫码登录

0.0372s