• Seata中的事务分组与集群


    一、什么是事务分组和集群

    事务分组:可以按微服务的需要,在应用程序(客户端)中对自行定义的事务进行分组,每组取一个名字,这个事务分组仅仅是seata的逻辑资源上的,其实是不存在的。

    集群:seata服务端一个或多个节点组成的cluster(集群),应用程序(客户端)使用时需要指定事务逻辑分组与seata服务端集群的映射关系。

    二、事务分组如何找到Seata服务端集群

    1、首先应用程序(客户端)通过配置文件中的seata.tx-service-group属性配置了事务分组名

    2、应用程序(客户端)会通过用户配置的配置中心在配置列表中去寻找service.vgroupMapping.[事务分组名]这么一个配置项,取得配置项的值就是TC集群的名称。如果应用程序是一个Spring Boot项目,则通过seata.service.vgroup-mapping.事务分组名=集群名称这么一个配置项获取TC集群的名称。

    3、拿到TC集群名称后应用程序通过一定的前后缀+集群名称去构造服务名,各个注册中心服务名的实现是不同的。(前提是seata服务端已经在注册中心中完成服务注册,并且seata服务端向注册中心报告的cluster名与应用程序(客户端)配置的集群名称一致)

    4、拿到服务名去相应的注册中心去拉取相应服务名的服务列表,获得后端真实的TC服务列表(即seata服务端集群节点列表)

    三、为什么这么设计,不直接取服务名

    这里多了一层获取事务分组到映射集群的配置,这样设计后事务分组可以作为资源的逻辑隔离单位,当某集群出现故障时可以快速进行failover(失效转移),只切换对应的事务分组,就可以把故障缩减到服务级别,但前提是需要有足够的seata服务端集群。

    四、Seata服务端的集群配置

    1. seata:
    2. config:
    3. type: nacos # 使用nacos作为配置中心
    4. nacos:
    5. server-addr: 192.168.1.108:28999 # nacos配置中心IP:端口
    6. namespace: 93be67df-a5f5-42b6-89cb-e8f048782963 # nacos命名空间id,""为nacos保留public空间控件,用户勿配置namespace = "public"
    7. group: SEATA_GROUP # nacos配置中心的分组名
    8. username: nacos # 指定nacos服务的登录账号
    9. password: nacos # 指定nacos服务的登录密码
    10. data-id: seataServer.properties # nacos配置中心的配置ID
    11. registr
  • 相关阅读:
    C#,骑士游历问题(KTP,Knight Tour problem)的回溯(backtracking)算法与源程序
    【高性能计算】CUDA
    CAS号:2578-57-6,H2N-PG-OH
    为何应用型本科(机器人工程等专业)大量学生选择考研
    【c ++ primer 笔记】第15章 面向对象程序设计
    关于我的项目-微信小程序2(uniapp->wx小程序)
    CSAPP Lab5:Shell
    Windows版Ros环境的搭建以及Rviz显示激光点云信息
    1.3 矩阵
    【Linux-进程状态】
  • 原文地址:https://blog.csdn.net/y_bccl27/article/details/128057793