• 【Seata】初识Seata


    Seata是 2019 年 1 月份蚂蚁金服和阿里巴巴共同开源的分布式事务解决方案。致力于提供高性能和简单易用的分布式事务服务,为用户打造一站式的分布式解决方案。

    官网地址:Seata | Seata,其中的文档、播客中提供了大量的使用说明、源码分析。

    1.Seata的架构

    Seata事务管理中有三个重要的角色:

    • TC (Transaction Coordinator) - 事务协调者:维护全局和分支事务的状态,协调全局事务提交或回滚。

    • TM (Transaction Manager) - 事务管理器:定义全局事务的范围、开始全局事务、提交或回滚全局事务。

    • RM (Resource Manager) - 资源管理器:管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。

    整体的架构如图:

    Seata基于上述架构提供了四种不同的分布式事务解决方案:

    • XA模式:强一致性分阶段事务模式,牺牲了一定的可用性,无业务侵入

    • TCC模式:最终一致的分阶段事务模式,有业务侵入

    • AT模式:最终一致的分阶段事务模式,无业务侵入,也是Seata的默认模式

    • SAGA模式:长事务模式,有业务侵入

    无论哪种方案,都离不开TC,也就是事务的协调者。

    2.部署TC服务

    参考课前资料提供的文档《 seata的部署和集成.md 》:

    3.微服务集成Seata

    我们以order-service为例来演示。

            3.1引入依赖

    首先,在order-service中引入依赖:

    1. <dependency>
    2. <groupId>com.alibaba.cloudgroupId>
    3. <artifactId>spring-cloud-starter-alibaba-seataartifactId>
    4. <exclusions>
    5. <exclusion>
    6. <artifactId>seata-spring-boot-starterartifactId>
    7. <groupId>io.seatagroupId>
    8. exclusion>
    9. exclusions>
    10. dependency>
    11. <dependency>
    12. <groupId>io.seatagroupId>
    13. <artifactId>seata-spring-boot-starterartifactId>
    14. <version>${seata.version}version>
    15. dependency>

            3.2配置TC服务

    在order-service中的application.yml中,配置TC服务信息,通过注册中心nacos,结合服务名称获

    取TC地址:

    1. seata:
    2. registry: # TC服务注册中心的配置,微服务根据这些信息去注册中心获取tc服务地址
    3. type: nacos # 注册中心类型 nacos
    4. nacos:
    5. server-addr: 127.0.0.1:8848 # nacos地址
    6. namespace: "" # namespace,默认为空
    7. group: DEFAULT_GROUP # 分组,默认是DEFAULT_GROUP
    8. application: seata-tc-server # seata服务名称
    9. username: nacos
    10. password: nacos
    11. tx-service-group: seata-demo # 事务组名称
    12. service:
    13. vgroup-mapping: # 事务组与cluster的映射关系
    14. seata-demo: SH

    微服务如何根据这些配置寻找TC的地址呢?

    我们知道注册到Nacos中的微服务,确定一个具体实例需要四个信息:

    • namespace:命名空间

    • group:分组

    • application:服务名

    • cluster:集群名

    以上四个信息,在刚才的yaml文件中都能找到:

    namespace为空,就是默认的public

    结合起来,TC服务的信息就是:public@DEFAULT_GROUP@seata-tc-server@SH,这样就能确定TC服务集群了。然后就可以去Nacos拉取对应的实例信息了。

            3.3其他服务

    其它两个微服务也都参考order-service的步骤来做,完全一样。

    4.动手实践

    下面我们就一起学习下Seata中的四种不同的事务模式。

  • 相关阅读:
    关于调参技巧的问题
    python socket编程3 - socket的选项
    Python通过下标获取指定的文件并复制到一个新的文件
    mysql的常见的外键约束
    解读AI机器人产业发展的顶层设计
    .NetCore+Vue2.0前后端分离的个人博客项目
    枚举
    NVIDIA NeMo 简介——教程和示例
    NK-RTU980 USB bulk传输
    怎样实现网页端im即时通讯中的@人功能
  • 原文地址:https://blog.csdn.net/weixin_45481821/article/details/133211518