【分布式事务系列】 Seata 事务分组

这是我参与11月更文挑战的第17天,活动详情查看:2021最后一次更文挑战

Seata 事务分组

事务分组是seata的资源逻辑,类似于服务实例。在file.conf中的my_test_tx_group就是一个事务分组。

在Seata Client端的file.conf配置中有一个属性vgroup_mapping,它表示事务分组映射,是Seata的资源,类似于服务实例,主要作用是根据分组来获取Seata Server的服务实例。

事务分组工作原理

在应用中需要配置事务分组,使用GlobalTransactionScanner构造方法中的txServiceGroup参数,该参数有几种配置方式如下:

  1. 默认情况获取spring.application.name的值+“-seata-service-group”
  2. 在Seata-Spring-Boot-Starter中,使用seata.tx-service-group配置
  3. 在Spring Cloud Alibaba Seata中,使用spring.cloud.alibaba.seata.tx-service-group配置

Seata客户端根据应用的txServiceGroup去指定位置(配置中心或file.conf)查找service.vgroup_mapping.${txServiceGroup}对应的配置值,该值代表TC集群的名称。

应用会根据集群名称去配置中心或者file.conf中获取对应的服务列表,clusterName.grouplist对应的TC 集群对应的服务列表,具体步骤如下:

  1. 获取事务分组spring-cloud-ozx-repo配置值AServicegroup
  2. 获取到事务分组的值Agroup,拼成service.vgroup_mapping.AServicegroup,去配置中心查找对应的集群名,得到对集群名(default)
  3. 拼上成service.default(集群名).grouplist,查找集群名对应的Seata Server服务地址:10.0.100.254:8091

事务分组实现原理如下图所示:

事务分组实现原理

事务分组设计用途:

在客户端获取服务端地址没有直接采用服务名称,而是增加多一层事务分组映射到集群配置,好处在于事务分组可作为资源的隔离单位,当一个集群出现故障时,可实现快速故障转移,需要切换对应分组即可实现故障降到服务级别,但是这样操作前提有足够server集群。

猜你喜欢

转载自juejin.im/post/7031525168669589534