Seata 2.x 首个版本正式发布,支持 Raft 集群模式

本文涉及的产品
性能测试 PTS,5000VUM额度
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
简介: Seata 2.x 首个版本正式发布,支持 Raft 集群模式

用户登记


欢迎已使用用户在此链接登记,便于我们更好的针对业务场景优化:

https://github.com/seata/seata/issues/1246


2.x Roadmap



发布概览


2.0.0 中对大家期待已久的 Raft 集群模式做了支持,Raft 集群模式消除了对第三方注册中心和 Seata-Server 后端存储的依赖,让运维变得更简单可靠性变得更高。除此之外,AT 模式支持 SQLServer、达梦和 PolarDB-X 2.0 数据库;对事务模式的 API 完成了统一;支持事务二阶段并行大幅度提升事务的性能;支持 IPV6。共通过了 110 多组 jdk(8,11,17,21)+ Spring 各版本 + OS(x86,arm64)+ druid  主要版本的交叉兼容测试,可放心平滑升级。




此次 release  共修改文件数:930,累计提交代码  +56171 −6549,合并 PR 182 个,共 47 人参与代码 commit。


https://github.com/seata/seata/pull/6067


2.0.0 milestone:

https://github.com/seata/seata/milestone/21

seata-server:

https://github.com/seata/seata/releases/download/v2.0.0/seata-server-2.0.0.tar.gz

docker image:

https://hub.docker.com/repository/docker/seataio/seata-server

部署指南:

https://seata.io/zh-cn/docs/ops/deploy-server-raft

升级指南:

https://seata.io/zh-cn/docs/ops/upgrade


与低版本可平滑兼容。


版本的主要更新如下


feature:

  • [#5226] 支持Raft集群模式
    • [#5165] 统一多种事务模式的API
    • [#5352] 在TCC Business Action Context中集成jackson和gson序列化功能
    • [#5377] 支持http PUT请求
    • [#5396] TC 异常日志指标采集
    • [#5118] 支持二阶段并行下发执行
    • [#5529] docker镜像支持注入JVM参数到容器
    • [#3887] 增加AT模式的SQLServer数据库支持
    • [#4033] 增加ServerDB存储模式的SQLServer支持
    • [#5600] skywalking插件支持根据XID追踪事务
    • [#5357] seata console集成saga设计器
    • [#5717] 兼容1.4.2及以下版本的file.conf/registry.conf配置
    • [#5842] 构建docker 镜像时添加相关git信息,方便定位代码关系
    • [#5902] 支持IPv6网络环境
    • [#5907] 增加AT模式的PolarDB-X 2.0数据库支持
    • [#5932] AT模式支持达梦数据库
    • [#5946] 增加sqlserver对控制台分页接口的适配

    bugfix:

    • [#5677] 修复saga模式下serviceTask入参autoType转化失败问题
    • [#5277] 修复控制台全局锁查询接口查到了已释放的锁
    • [#5282] 修复并行rm请求处理时数组索引越界问题
    • [#5294] 修复AT模式下pgsql/oracle的主键列自增的问题
    • [#5298] 事务提交或回滚超时不移除global session
    • [#5304] 移除基于文件存储恢复时的RollbackRetryTimeout事务
    • [#5310] 修复生成update前后镜像sql不对关键字转义的bug
    • [#5318] 修复jdk8 中 G1 参数
    • [#5330] 修复单元测试中发现的bug
    • [#5337] 修复feature#5165中关于spring使用环境下,多interceptor排序问题,同时修复order一致时无法使用BeforeTransaction(AfterTransaction)事务排序问题
    • [#5347] 修复控制台打印 unauthorized error 问题
    • [#5355] 修复自定义context-path时的问题
    • [#5362] 修复当TC端回滚返回RollbackFailed时,自定义FailureHandler的方法未执行
    • [#5373] 修复客户侧事务提交前超时未执行hook和failureHandler的问题
    • [#5395] 修复AT模式下新增字段产生的字段找不到
    • [#5426] 修复不能获取GlobalTransactional注解问题
    • [#5464] 修复saga模式全局事务状态始终为Begin的问题
    • [#5478] 修复提交事务时事务已完成不抛出异常问题
    • [#5490] 修复日志中不打印方法名的问题
    • [#5449] 修复Oracle XA模式 start 重入问题
    • [#5462] 在RM中使用@GlobalTransactional时,如果RM执行失败会抛出ShouldNeverHappenException
    • [#5498] 修复 Oracle 10g 中“setDate”条件的全表扫描问题
    • [#5531] 修复读取logback文件路径错误的问题
    • [#5523] 修复 GlobalStatus=9 在DB存储模式无法清除的问题
    • [#5558] 修复mariadb回滚失败的问题
    • [#5556] 修复 oracle 插入 undolog 失败问题
    • [#5579] 修复 resourceId 为空时,获取 RM_CHANNELS 空指针问题
    • [#5577] 修复 grpc拦截器解绑xid失败问题
    • [#5594] 修复participant情况下的重复日志
    • [#5604] 修复在DB模式下 asyncCommit 和 queueToRetryCommit 两个方法总是失败的问题
    • [#5658] 修复大写和小写列名称的转义字符
    • [#5661] 修复connectionProxyXA连接复用时timeout为null
    • [#5679] 修复 xxx.grouplist 和 grouplist.xxx 配置项兼容问题
    • [#5715] 修复取中划线配置项错误问题
    • [#5748] 修复在某些情况下,业务sql中主键字段名大小写与表元数据中的不一致,导致回滚失败
    • [#5745] 修复不满足 sofa-rpc 中 setAttachment 方法的参数前缀要求问题
    • [#5772] 修复TableMetaCache的一些字段类型,避免溢出
    • [#5787] 解决redis作为注册中心时cluster无法自定义的BUG
    • [#5810] 修复druid依赖冲突导致的XA事务开始异常与回滚失败
    • [#5821] 修复insert executor对关键字未转义的问题
    • [#5835] bugfix: 修复当 XA 事务失败回滚后,TC 还会继续重试回滚的问题
    • [#5881] 修复事务回滚时锁未删除的问题
    • [#5930] 修复存储为redis哨兵模式下哨兵密码缺失的问题
    • [#5958] 在二阶段提交状态下发生重选时需要进行解除全局锁
    • [#5971] 修复某些未弃用的配置显示"已弃用"
    • [#5977] 修复当raft server关闭时,rpc server未关闭的问题
    • [#5954] 修复保存的分支会话状态与实际的分支会话状态不一致的问题
    • [#5990] 修复redis sentinel master node 宕机时,lua脚本未同步的问题
    • [#5997] 修复全局事务钩子重复执行
    • [#6018] 修复错误的 metric 上报
    • [#6024] 修复控制台点击事务信息页面中的"查看全局锁"按钮之后白屏的问题
    • [#6015] 修复在spring环境下无法集成dubbo
    • [#6049] 修复客户端在raft注册中心类型下,网络中断时,watch线程未暂停一秒等待重试的问题
    • [#6050] 修改 RaftServer#destroy 为等待所有关闭流程结束
    • [#6033] 修复HSFRemotingParser中isReference判断逻辑,去掉关于FactoryBean的无用判断


    optimize:

  • [#5966] Saga 表达式解耦并统一格式
    • [#5928] 增加Saga模式状态机语义验证阶段
    • [#4858] 重构优化 SessionManager 用法
    • [#4881] 重新划分 SessionManager和SessionLifecycleListener 用法
    • [#5273] 优化protobuf-maven-plugin插件的编译配置,解决高版本的命令行过长问题
    • [#5278] 清理sessionmanager多例模式遗留代码
    • [#5302] 移除启动脚本的-Xmn参数
    • [#4880] 优化提交和回滚遇到异常时的日志输出
    • [#5322] 优化SPI加载日志
    • [#5326] 为全局事务超时日志添加时间信息
    • [#5328] 为全局事务和事务存储的Redis模式,增加对应的lua实现
    • [#5341] 优化 gRPC TCC模式
    • [#5342] 优化 TCC fence log 清理定时任务的 delay 参数值检查
    • [#5344] 添加配置中心、注册中心类型以及存储模式日志信息
    • [#5351] 优化 TCC 模式下的 RPC filter
    • [#5354] 重构 RPC 集成模块
    • [#5370] 优化事务失败处理 handler
    • [#5431] 优化github工作流
    • [#5461] 优化 license workflow
    • [#5456] 重构 ColumnUtils 和 EscapeHandler
    • [#5438] 优化code style检测属性
    • [#5471] 优化客户侧事务日志
    • [#5485] 优化Server日志输出
    • [#4907] 调整二阶段result线程池大小及优化代码
    • [#5487] 将branchsession中的lockholder增加final修饰
    • [#5519] 优化 Oracle FenceHandler
    • [#5501] 支持乐观锁方式更新事务状态
    • [#5419] 优化镜像发布流水线支持jdk8/17和支持maven 3.9.0
    • [#5549] 优化 gpg key 和 发布流水线
    • [#5576] 仅当 useTCCFence 设置为 true 时,才开启 Fence 表清理任务
    • [#5623] 优化异步提交线程和重试线程之间可能存在的冲突
    • [#5563] 优化channel通道可用性日志输出
    • [#5553] 支持表和列元数据大小写敏感设置
    • [#5644] 优化Server日志输出
    • [#5680] 优化大小写转义符
    • [#5686] 优化license check actions
    • [#5714] 优化分布式锁竞争日志
    • [#5723] 优化docker镜像的默认时区
    • [#5779] 删除无用的输出日志并统一日志输出路径
    • [#5802] 优化server端事务隔离级别为读已提交
    • [#5783] 支持nacos上application name配置
    • [#5524] 支持 seata-server.sh 中的更多操作命令
    • [#5836] 分离mariadb和mysql的AT实现
    • [#5869] 优化一些小的语法
    • [#5885] 优化ConnectionProxyXA中的日志
    • [#5894] 移除无license组件
    • [#5895] 移除7z压缩支持
    • [#5896] 移除 mariadb.jdbc 依赖
    • [#5384] 统一版本号管理,只需维护 build/pom.xml 中的版本号即可。
    • [#5419] 发布基于多个java版本的docker镜像
    • [#5829] 修正 codecov chart 不展示的问题
    • [#5878] 优化 httpcore 和 httpclient 的依赖定义
    • [#5917] 升级 native-lib-loader 版本
    • [#5926] 优化一些与 Apollo 相关的脚本
    • [#5938] 支持 jmx 监控配置
    • [#5944] 修复构建操作警告
    • [#5951] 删除在 jdk17 中不支持的配置项
    • [#5959] 修正代码风格问题及去除无用的类引用
    • [#6002] 移除fst序列化模块
    • [#6045] 优化MySQL衍生数据库判断逻辑


    security:

  • [#5642] 增加Hessian 序列化黑白名单
    • [#5694] 修复若干Node.js依赖安全漏洞
    • [#5801] 修复Java依赖安全漏洞
    • [#5805] 修复序列化漏洞
    • [#5868] 修复npm package漏洞
    • [#5916] 修复npm package漏洞
    • [#5942] 升级依赖版本
    • [#5987] 升级依赖版本
    • [#6013] 升级seata-server依赖的spring版本


    test:

    • [#5308] 添加单元测试用例 [FileLoader, ObjectHolder, StringUtils]
    • [#5309] 添加单元测试用例 [ArrayUtils, ConfigTools, MapUtil]
    • [#5335] 添加单元测试用例 [EnhancedServiceLoader,ExtensionDefinition,SizeUtilTest,ReflectionUtil,LowerCaseLinkHashMap,FileLoader,ObjectHolder]
    • [#5367] 修复 UpdateExecutorTest 单测失败问题
    • [#5383] 修复多Spring版本测试失败
    • [#5391] 添加 config 模块的单元测试用例
    • [#5428] 修复 FileTransactionStoreManagerTest 单测失败问题
    • [#5622] 添加单元测试用例 [ExporterType, RegistryType]
    • [#5637] 添加单元测试用例 [BatchResultMessage, HeartbeatMessage, RegisterRMResponse, ResultCode, RegisterTMResponse, MergeResultMessage, MergedWarpMessage, Version]
    • [#5893] 移除 sofa 测试用例
    • [#5845] 升级 druid 版本,并添加 test-druid.yml 用于测试seata与druid各版本的兼容性。
    • [#5863] 修复单元测试在Java21下无法正常运行的问题。
    • [#5986] 修复 zookeeper 单测失败问题
    • [#5995] 添加 RaftClusterMetadataMsg 模块的单元测试用例
    • [#6001] 添加 RaftMsgExecute 模块 branch 包下的单元测试用例
    • [#5996] 添加 RaftMsgExecute 模块 global 包下的单元测试用例
    • [#6003] 添加 RaftMsgExecute 模块 lock 包下的单元测试用例
    • [#6005] 修复 saga 异步测试未定义的行为
    • [#6009] 添加RaftServerFactory的单元测试用例
    • [#6052] UT升级 springboot 和服务器的 spring 版本


    英文版参考:https://github.com/seata/seata/releases/tag/v2.0.0


    致谢


    非常感谢以下 contributors 的代码贡献。若有无意遗漏,请报告。


    • slievrly
    • xssdpgy
    • albumenj
    • PeppaO
    • yuruixin
    • CrazyLionLi
    • xingfudeshi
    • Bughue
    • pengten
    • wangliang181230
    • GoodBoyCoder
    • funky-eyes
    • isharpever
    • mxsm
    • liuqiufeng
    • l81893521
    • dmego
    • zsp419
    • tuwenlin
    • sixlei
    • yixia
    • capthua
    • robynron
    • XQDD
    • Weelerer
    • Ifdevil
    • iquanzhan
    • leizhiyuan
    • Aruato
    • ggbocoder
    • ptyin
    • jsbxyyx
    • xxxcrel
    • fengzhenhai168
    • tobehardest
    • leezongjie


    同时,我们收到了社区反馈的很多有价值的 issue 和建议,非常感谢大家。


    社区讨论群



    常用链接


    Seata: https://github.com/seata/seata

    Samples: https://github.com/seata/seata-samples

    Release: https://github.com/seata/seata/releases

    官网:https://seata.io


    开发者招募


    如果您对 Seata 的前后端开发、测试和文档感兴趣,请您邮件联系:slievrly@gmail.com

    相关实践学习
    基于Redis实现在线游戏积分排行榜
    本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
    云数据库 Redis 版使用教程
    云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
    相关文章
    |
    6月前
    |
    自然语言处理 监控 Dubbo
    Seata常见问题之使用tcc模式配置yml如何解决
    Seata 是一个开源的分布式事务解决方案,旨在提供高效且简单的事务协调机制,以解决微服务架构下跨服务调用(分布式场景)的一致性问题。以下是Seata常见问题的一个合集
    198 4
    |
    6月前
    |
    数据库
    |
    6月前
    |
    存储 Java Nacos
    Seata常见问题之springboot 2.3.7 和高版本 seata 2.0.0,1.6.1不兼容如何解决
    Seata 是一个开源的分布式事务解决方案,旨在提供高效且简单的事务协调机制,以解决微服务架构下跨服务调用(分布式场景)的一致性问题。以下是Seata常见问题的一个合集
    769 0
    |
    23天前
    |
    前端开发 Java API
    Apache Seata(incubating) 首个版本重磅发布!
    2.1.0 是 Seata 进入 Apache 基金会的第一个 Release Version。此次发布将 io.seata 包名更改为 org.apache.seata。除了按原有的 Roadmap 技术演进外,2.1.0 进行了大量兼容性工作,实现了 API、数据和协议的兼容。用户无需修改原有的 API 和配置,即可实现到 Apache 版本的平滑升级。
    Apache Seata(incubating) 首个版本重磅发布!
    |
    5月前
    |
    Apache 开发者
    Apache Seata 如何解决 TCC 模式的幂等、悬挂和空回滚问题
    【6月更文挑战第8天】Apache Seata 是一款分布式事务框架,解决TCC模式下的幂等、悬挂和空回滚问题。通过记录事务状态处理幂等,设置超时机制避免悬挂,明确标记Try操作成功来处理空回滚。Seata 提供丰富配置和管理功能,确保分布式事务的可靠性和效率,支持复杂事务处理场景,为企业业务发展提供支持。
    200 7
    |
    6月前
    |
    存储 Java Nacos
    Seata常见问题之xa模式出现错误xid is not valid如何解决
    Seata 是一个开源的分布式事务解决方案,旨在提供高效且简单的事务协调机制,以解决微服务架构下跨服务调用(分布式场景)的一致性问题。以下是Seata常见问题的一个合集
    185 4
    |
    6月前
    |
    NoSQL Java 数据库
    Seata常见问题之xa模式下插入一条数据再更新这条数据会报错如何解决
    Seata 是一个开源的分布式事务解决方案,旨在提供高效且简单的事务协调机制,以解决微服务架构下跨服务调用(分布式场景)的一致性问题。以下是Seata常见问题的一个合集
    183 2
    |
    6月前
    |
    Java 关系型数据库 微服务
    Seata常见问题之项目一直启动不成功如何解决
    Seata 是一个开源的分布式事务解决方案,旨在提供高效且简单的事务协调机制,以解决微服务架构下跨服务调用(分布式场景)的一致性问题。以下是Seata常见问题的一个合集
    507 0
    |
    2月前
    |
    SQL NoSQL 数据库
    SpringCloud基础6——分布式事务,Seata
    分布式事务、ACID原则、CAP定理、Seata、Seata的四种分布式方案:XA、AT、TCC、SAGA模式
    SpringCloud基础6——分布式事务,Seata
    |
    6月前
    |
    存储 关系型数据库 MySQL
    基于Seata实现分布式事务
    通过以上步骤,你可以使用 Seata 实现分布式事务,确保在微服务架构中的事务一致性。Seata 支持多种语言和框架,能够满足不同业务场景的需求。欢迎关注威哥爱编程,一起学习成长。
    153 1