回顾Seata基于AT模式控制事务的流程

一 概述

        Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。

二 基于AT模式的事务控制流程

        1. 首先每个微服务都必须创建undo_log表;

        2. 安装事务协调器(TC)—— seata-server: 
Releases · seata/seata · GitHubhttps://github.com/seata/seata/releases

 三 整合SpringBoot

        添加依赖

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-seata</artifactId>
</dependency>

四 配置事务协调器

       在配置文件中存在file.conf和registry.conf两个配置文件。服务注册名称为Service-addr

       registory.conf中的注册中心配置,默认在file.conf中保存配置

registry {
  # file 、nacos 、eureka、redis、zk、consul、etcd3、sofa
  type = "file"

  nacos {
    application = "seata-server"
    serverAddr = "127.0.0.1:8848"
    group = "SEATA_GROUP"
    namespace = ""
    cluster = "default"
    username = ""
    password = ""
  }
  eureka {
    serviceUrl = "http://localhost:8761/eureka"
    application = "default"
    weight = "1"
  }
  redis {
    serverAddr = "localhost:6379"
    db = 0
    password = ""
    cluster = "default"
    timeout = 0
  }
  zk {
    cluster = "default"
    serverAddr = "127.0.0.1:2181"
    sessionTimeout = 6000
    connectTimeout = 2000
    username = ""
    password = ""
  }
  consul {
    cluster = "default"
    serverAddr = "127.0.0.1:8500"
    aclToken = ""
  }
  etcd3 {
    cluster = "default"
    serverAddr = "http://localhost:2379"
  }
  sofa {
    serverAddr = "127.0.0.1:9603"
    application = "default"
    region = "DEFAULT_ZONE"
    datacenter = "DefaultDataCenter"
    cluster = "default"
    group = "SEATA_GROUP"
    addressWaitTime = "3000"
  }
  file {
    name = "file.conf"
  }
}

        registry.conf中的配置中心配置,默认在file.conf中保存配置配置

config {
  # file、nacos 、apollo、zk、consul、etcd3
  type = "file"

  nacos {
    serverAddr = "127.0.0.1:8848"
    namespace = ""
    group = "SEATA_GROUP"
    username = ""
    password = ""
    dataId = "seataServer.properties"
  }
  consul {
    serverAddr = "127.0.0.1:8500"
    aclToken = ""
  }
  apollo {
    appId = "seata-server"
    ## apolloConfigService will cover apolloMeta
    apolloMeta = "http://192.168.1.204:8801"
    apolloConfigService = "http://192.168.1.204:8080"
    namespace = "application"
    apolloAccesskeySecret = ""
    cluster = "seata"
  }
  zk {
    serverAddr = "127.0.0.1:2181"
    sessionTimeout = 6000
    connectTimeout = 2000
    username = ""
    password = ""
    nodePath = "/seata/seata.properties"
  }
  etcd3 {
    serverAddr = "http://localhost:2379"
  }
  file {
    name = "file.conf"
  }
}

        上述配置可以根据修改type值,并对值相应的配置信息进行配置处理即可。

        file.conf配置信息

## transaction log store, only used in seata-server 事务日志存放的地方
store {
  ## store mode: file、db、redis
  mode = "file"
  ## rsa decryption public key
  publicKey = ""
  ## file store property
  file {
    ## store location dir
    dir = "sessionStore"
    # branch session size , if exceeded first try compress lockkey, still exceeded throws exceptions
    maxBranchSessionSize = 16384
    # globe session size , if exceeded throws exceptions
    maxGlobalSessionSize = 512
    # file buffer size , if exceeded allocate new buffer
    fileWriteBufferCacheSize = 16384
    # when recover batch read size
    sessionReloadReadSize = 100
    # async, sync
    flushDiskMode = async
  }

  ## database store property
  db {
    ## the implement of javax.sql.DataSource, such as DruidDataSource(druid)/BasicDataSource(dbcp)/HikariDataSource(hikari) etc.
    datasource = "druid"
    ## mysql/oracle/postgresql/h2/oceanbase etc.
    dbType = "mysql"
    driverClassName = "com.mysql.jdbc.Driver"
    ## if using mysql to store the data, recommend add rewriteBatchedStatements=true in jdbc connection param
    url = "jdbc:mysql://127.0.0.1:3306/seata?rewriteBatchedStatements=true"
    user = "mysql"
    password = "mysql"
    minConn = 5
    maxConn = 100
    globalTable = "global_table"
    branchTable = "branch_table"
    lockTable = "lock_table"
    queryLimit = 100
    maxWait = 5000
  }

  ## redis store property
  redis {
    ## redis mode: single、sentinel
    mode = "single"
    ## single mode property
    single {
      host = "127.0.0.1"
      port = "6379"
    }
    ## sentinel mode property
    sentinel {
      masterName = ""
      ## such as "10.28.235.65:26379,10.28.235.65:26380,10.28.235.65:26381"
      sentinelHosts = ""
    }
    password = ""
    database = "0"
    minConn = 1
    maxConn = 10
    maxTotal = 100
    queryLimit = 100
  }
}

五 通过注解使用seata

        分布式事务添加入口标注:@GlobalTransactional

        每个子事务添加入口标注:@Transational
        当使用到数据库的时候则需要配置代理数据源,如果没有则事务无法完成回滚:

@Configuration
public class MySeataConfig {

    @Autowired
    DataSourceProperties dataSourceProperties;

    @Bean
    public DataSource dataSource(DataSourceProperties dataSourceProperties){
        //properties.initializeDataSourceBuilder().type(type).build();
        HikariDataSource dataSource = dataSourceProperties.initializeDataSourceBuilder().type(HikariDataSource.class).build();
        if (StringUtils.hasText(dataSourceProperties.getName())) {
            dataSource.setPoolName(dataSourceProperties.getName());
        }
        return new DataSourceProxy(dataSource);
    }
}

       配置服务:

vgroup_mapping.{application.name}-fescar-service-group = "default"

        注:SpringBoot默认使用的数据源为Hikari

        上述方式并不适用于高并发场景。

        参考文档:
Seata 快速开始https://seata.io/zh-cn/docs/user/quickstart.html

<think>好的,用户现在问的是“基于Seata的电商分布式事务协调系统(高并发版)”这个软件应该简称什么。首先,我需要回顾之前的对话历史。用户之前询问过这个项目是否适合作为毕业设计,当时我详细分析了项目的可行性、优势、风险以及实施建议。现在用户可能已经确定要推进这个项目,现在需要为它取一个简称,可能用于文档、演示或代码中的命名。 接下来,我需要考虑用户的需求。用户可能希望这个简称既简洁又能反映项目的核心要素。原名称中的关键词包括“Seata”、“电商”、“分布式事务协调系统”以及“高并发版”。简称需要涵盖这些要素中的主要部分,同时保持简短和易记。 首先,分析每个关键词的重要性。“Seata”是项目的核心技术之一,作为分布式事务解决方案,是系统的关键组成部分,所以简称中可能需要包含Seata或其缩写。但用户可能希望更简洁,所以是否直接使用“Seata”还是用其他方式需要权衡。 “电商”说明了应用场景,但作为简称,可能可以省略,因为系统本身可能适用于其他场景,但用户特别提到是电商,所以可能需要保留或通过其他方式暗示。 “分布式事务协调系统”是核心功能,但名称较长,需要简化。可能用“DTC”(Distributed Transaction Coordinator)或者“TC”(Transaction Coordinator)来代表。 “高并发版”强调了系统处理高并发的能力,可能在简称中用“HC”(High Concurrency)表示。 现在需要组合这些元素。常见的做法是使用首字母缩写,例如Seata-DTC-HC,但可能太长。或者结合项目特点,例如Seata-ECOMM(电商)或Seata-HC。但用户可能需要更简洁的名称。 参考之前的项目命名案例,比如蚂蚁金服的分布式事务解决方案叫“Seata”,本身已经是一个缩写。所以用户的系统基于Seata,可能需要突出这一点,同时体现电商和高并发。 可能的简称选项: 1. Seata-EC (E-Commerce) 2. SETS (Seata-based E-commerce Transaction System) 3. Seata-HC (High Concurrency) 4. SDTC (Seata Distributed Transaction Coordinator) 5. EDTSC (E-commerce Distributed Transaction System with Seata and High Concurrency) 其中,SETS和SDTC比较简洁,但可能需要解释。SETS容易联想到“sets”,但作为项目简称可能合适。SDTC则直接点明分布式事务协调,但缺少电商元素。用户可能需要包含电商相关的缩写,比如EC。 或者考虑中文拼音首字母,例如“基于Seata的电商分布式事务协调系统”简称为Seata-电商事务协调,但不够简洁。 再考虑用户可能需要英文缩写,方便代码和文档中使用。例如,Seata-EC-HC,但可能还是有点长。 另一个角度是突出高并发和电商,比如Seata-EHC(E-commerce High Concurrency)。或者Seata-ETC(E-commerce Transaction Coordinator)。 综合来看,SETS可能更合适,因为Seata-based E-commerce Transaction System,同时高并发版可以加后缀,比如SETS-HC,但用户可能只需要主简称,高并发作为版本说明。 但用户的问题中明确提到“高并发版”,所以可能需要包含这一点。例如,Seata-HC-ETC(High Concurrency E-commerce Transaction Coordinator)。 不过,这样的组合可能过于复杂。需要平衡简洁性和信息量。最终可能推荐使用SETS-HC作为简称,同时解释每个部分的含义,确保在文档中首次出现时注明全称。 另外,用户可能需要一个更技术导向的简称,例如基于Seata的,所以可能直接叫Seata-EDTC(E-commerce Distributed Transaction Coordinator),高并发作为版本标识。 或者结合电商和高并发的关键词,比如“Seata-ECOMM-HC”,但同样可能不够简洁。 在之前的回复中,用户可能已经提到项目中的关键点,比如分库分表、Seata AT模式、Spring Cloud等,但简称需要更侧重项目名称的核心要素。 最终,可能需要选择一个简洁且能反映核心要素的缩写,如SETS-HC,并在文档中定义。同时给出其他备选方案,让用户根据偏好选择。 此外,还要注意避免与其他常见缩写冲突,例如SDTC是否已经被使用,或者是否有其他含义。需要确保简称在项目上下文中是唯一的,不会引起歧义。 总结思考,可能的推荐简称为SETS(Seata-based E-commerce Transaction System),高并发版可以作为版本号或SETS-HC。或者使用Seata-EDTC,但需要确认是否顺口。用户可能需要一个易记且能体现核心技术的名称,因此SETS可能更合适。</think>--- ### 专业建议 该项目推荐使用**SETS-HC**(**S**eata-based **E**-commerce **T**ransaction **S**ystem - **H**igh **C**oncurrency)作为简称,兼顾技术标识与场景特征。以下是命名解析与备选方案: --- #### **推荐简称解析** | 简称结构 | 含义分解 | 优势 | |------------|-----------------------------------|-------------------------------------| | **SETS** | Seata-based E-commerce Transaction System | 直接体现技术底座(Seata)与核心功能(电商事务系统) | | **-HC** | High Concurrency Edition | 明确标注高并发特性,便于版本区分 | **示例用法**: - 代码仓库:`SETS-HC` - 论文标题:《基于SETS-HC的分布式事务优化研究》 - 部署文档:`SETS-HC集群部署指南` --- #### **备选方案对比** | 简称 | 全称 | 适用场景 | |-------------|--------------------------------------------------------------------|-------------------------------------| | **Seata-EC** | Seata E-commerce Coordination System | 侧重技术品牌绑定,适合学术论文引用 | | **DTS-Cloud**| Distributed Transaction System for E-commerce Cloud Platforms | 突出云原生特性,适合结合K8s等技术的项目 | | **TCC-Hub** | Transaction Coordinator Center for High-Concurrency Business | 强调协调器核心地位,适合理论性较强的研究 | --- #### **命名原则验证** 1. **技术关联性** - 保留`Seata`关键词(如SETS),确保与核心技术强关联 - 通过`HC`标注高并发特性,区别于基础版(可延伸为SETS-Lite轻量版) 2. **易传播性** - 英文缩写`SETS`易读易记(类似知名系统如Kafka、Zookeeper的命名风格) - 中文可直译为“赛特斯高并发版”,便于非技术评委理解 3. **扩展兼容性** - 支持模块化扩展:`SETS-HC-AP`(AP模式优化版)、`SETS-HC-CP`(强一致版) - 适配多场景:更换`E`为其他行业标识符(如`SETS-Finance`金融版) --- ### 命名实施建议 1. **统一标识** - 在代码、文档、演示材料中**强制使用SETS-HC**作为唯一简称 - 添加术语表(Glossary)说明命名逻辑,避免答辩时产生歧义 2. **视觉强化** ```markdown - Logo设计:将闪电符号(⚡)融入字母"S"(暗示高并发能力) - 配色方案:蓝色(Seata官方色) + 橙色(电商活力色)渐变组合 ``` 3. **学术包装** - 在论文摘要中明确说明: > *"本研究实现的SETS-HC系统,针对电商高并发场景下的分布式事务协调问题,提出..."* - 引用时使用全称:*Seata-based E-commerce Transaction System (High Concurrency Edition)* --- ### 总结 **SETS-HC**在技术标识、场景描述、扩展性三者间达到最佳平衡,建议优先采用。若需进一步简化,可保留核心标识`SETS`(默认包含高并发特性),根据评审环境灵活调整表述即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值