Seata 分布式事务框架

一、Seata (Simple Extensible Autonomous Transaction Architecture | 简单、易扩展的自治事务框架)

二、源码地址 官网&WIKI

三、啥玩意:分布式事务的解决方案,通过提供多种模式来覆盖不同的用户场景。简单易用,但就是出了问题就麻烦咯

四、理论依据:二阶段提交的演变

五、重要理念:

  • 二阶段提交协议
  • 全局锁和本地锁(隔离性问题,主要为了避免分布式事务产生脏数据)
  • 写隔离和读隔离,不同级别的一致性要求;一般数据敏感的要求到写隔离,比较不敏感的数据可以只要求写隔离

六、不同的事务模式

  1、AT:与一般两段提交协议的差异处,在提交本地事务的时候释放资源(优点),并采用并行异步机制优化速度,全局锁机制保证数据隔离性和一致性

  • 全局锁保证数据的一致性和写隔离
  • 通过及时释放连接资源来提高性能,这点是相对LCN而言。

  2、TCC:一般用于不支持ACID的非关系型数据库,Try Confirm Cancel三个步骤都自行定义

  • cancel 空回滚,用于处理try实际未执行成功,调用了cancel的情况 - 本地事务表(通过在不同阶段插入不同状态的本地事务表记录,控制是否回滚,是否已处理,是否多次处理)
  • cancel 幂等,多次执行结果一致(多次cancel) - 本地事务表
  • cancel 悬挂,cancel执行在try之前(try成功执行)- 本地事务表

  3、SAGA:一阶段无锁;基于事件驱动,参与者可异步执行,高吞吐。就是太麻烦,要写一堆

  4、XA:基于与AT一致,只是需要支持XA分布式事务的数据库才可以(mysql应该是5.0之后开始支持XA事务)

七、示例Demo (懒得弄,直接在原来lcn的项目弄一个新分支;我这边故意把seata server启动端口改了,看eureka是否能自动追踪到,因为默认都是从本地端口获取,这个说明你都还不知道从哪里可以配置。。。我是大概跟了源码有个地方用到了vgroup.mapping,就随手改了,说实话我也还没拎清,后面彻底搞懂了再调整吧)

八、性能问题,老话题:CAP。seata有多种应用模式,相应的也是在这C和A之间取平衡,简单易用侵入性低的AT模式,自然A会弱点(性能上面差些);TCC这种及时释放资源,且没有引入全局锁机制的,自然会快些,但是要自己写很多业务逻辑(当然有些公司的业务比较简单,但是用户量并发高,那也是可以使用的)

posted @ 2020-10-07 11:20  gabin  阅读(732)  评论(0编辑  收藏  举报