引子

本文不剖析业内分布式组件,只剖析seata这一组件的技术调研。看看是否存在接入价值。

一、概述

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

本文从核心原理、性能测试两大模块来剖析seata。

根据Seata官网介绍历史如下:

Alibaba(阿里巴巴)
  • TXC: 淘宝事务组件。阿里巴巴中间件团队从2014年开始启动该项目,以应对应用架构从单点到微服务的变化带来的分布式事务问题。
  • GTS: 全局事务服务。 TXC作为阿里云中间件产品,自2016年起更名为GTS。
  • Fescar:Fast & EaSy Commit And Rollback,从2019年开始启动基于TXC/GTS的开源项目Fescar,以便在未来与社区密切合作。
Ant Financial(蚂蚁金服)
  • XTS: 拓展事务服务。蚂蚁金服中间件团队从2007年开始开发分布式事务中间件,该中间件在蚂蚁金服得到广泛应用,解决了跨数据库和跨服务的数据一致性问题。

  • DTX: 分布式事务扩展。自2013年起,XTS在蚂蚁金服上线,命名为DTX。

Seata Community(Seata社区)
  • Seata :简单的可扩展自动事务架构(Seata=Simple Extensible Autonomous Transaction Architecture)。蚂蚁金服加入Fescar,使其成为一个更加中立、开放的分布式事务社区,Fescar更名为Seata。

二、核心原理

2.1 四种事务模式

模式 概述 优点 缺陷 适用场景
XA 二阶段提交的数据库驱动实现,套壳。
  • 业务侵⼊
  • 保证了数据的强一致。(理论上)
  • 强依赖底层数据库驱动实现
  • 并发不高性能没要求。
  • 数据的强一致要求较高且执⾏时间确定短事务的场景。
AT seata自封装UNDO_LOG实现
  • 业务侵⼊只需要在TM的地方加一个全局事务注解即可)
  • 一阶段释放本地锁,相对于XA性能较好;
  • sql支持度不高(具体参照SQL限制);
  • 默认读不隔离,需要特殊处理;
  • 会对业务数据加锁,适合单数据操作不频繁,业务流程不是特别长,且整体业务只包含简单的sql的场景
TCC 二阶段提交的应用层实现。
  • 控制资源锁粒度高性能;保证数据最终一致性;
  • 业务侵⼊大,实现难度较大,而且需要按不同失败原因进行应答.
  • 为了满足一致性,需要confirm和cancel实现幂等性
  • 可自己把控业务的API的场景。
  • 业务适合拆分一阶段校验的场景。
SAGA 逆向按顺序回滚(借鉴SAGAS论文思路实现),其实就是业内泛补偿方案的一种实现。
  • 一阶段提交本地事务,无锁高性能
  • 事件驱动架构,参与者可异步执行,高吞吐
  • 补偿服务实现
  • 提供了状态机配置WEB端,自定义业务流程。
  • 业务入侵中等,但子事务拆分粒度需好好设计。
  • 不保证隔离性。
  • 业务流程长、业务流程多
  • 参与者系统功能包含无法实现TCC时。

三、性能测试

共用一个业务场景,同一个测试方案。从请求损耗、并发吞吐2个重要指标进行测试。

3.1 测试方案

  • 本次采用Apache的开源测试工具Jmeter。
  • 本次测试模拟用户购买商品的业务逻辑,由4个微服务提供支持,具体服务调用如下图。

3.2 请求损耗

本次测试目标是针对Seata的AT、TCC、Saga、XA事务模式下正常的请求,验证在不同事务模式下请求的耗损情况

测试指标

  • 获取各事务模式下请求的耗损情况;

测试结果

注:脚本采用单线程跑,采集样本数不够大,可能会影响数据的可靠性,如果有条件可以十倍样本数。

3.2 并发吞吐

本次测试是针对Seata的AT、TCC、Saga、XA事务模式下进行分段压力测试(模拟百万账户/商品的随机下单场景),验证在不同并发下,不同事务模式的性能影响情况。

为确保下单数据足够分散,模拟产生了超过100万的账户和商品,并随机组合下单;

测试指标

  • 获取在不同事务模式下单机部署情况下最大TPS值;
  • 在分段并发下,各事务模式的吞吐量变化;

测试结果

吞吐量:

如上图所示,在并发较高的情况下,相比于不使用Seata事务,TCC和Saga事务模式服务的吞吐能力较为接近。而XA事务模式并发线程超过120之后吞吐能力急剧下降,当超过并发线程超过140,大量的事务挂起超时,服务已经接近不可用。AT事务模式介于XA与TCC/Saga之间,但整体表现比较稳定。

TPS:

如上图所示,各种事务模式下最大的TPS对比,其中,Saga和TCC事务模式的最大TPS与不使用Seata时较为接近

四、结论

结合4种模式的对比和性能测试,发现Saga和TCC比较优秀。由于Saga对事物的拆分更细,操作起来耗时更多,请求损耗较大,更适合长事务场景。TCC很明确的拆分为二阶段,整体时间较为可控。但由于Saga官网还提供了事务监控后台,有时候需要人工接入时,可以很方便的操作。

=======================================

本文测试数据来源于同事李总,特此感谢!

Seata的技术调研的更多相关文章

  1. 多屏广告技术调研 & 广告基础介绍

    之前做的多屏广告产品调研,并简单介绍了一些基础广告知识.见ppt:多屏广告技术调研

  2. 逐步把Nginx及Redis引入项目组之负载均衡技术调研初版总结

    本篇以一个Nginx服务.两个Tomcat服务.一个Redis搭建一个负载均衡环境,由于就一台电脑暂以随机分配client请求策略开展,详细工作中推荐以IP地址来实现client请求的动态负载策略.省 ...

  3. 关于Windows Phone平台音乐播放的的技术调研

    希望看到这篇文章的开发者能提供你们的想法,让我们一起来探讨一款wp平台上面一款能流畅播放.能流畅拖拽进入条.只发一次请求就可以缓存的最好的播放器.希望大家能对我下面遇到的问题作出回答. 现在出了Win ...

  4. webp图片技术调研最终结论(完全真实数据可自行分析)

    关于webp图片格式调研及测试 资料收集 什么是 WebP? WebP(发音 weppy),是一种支持有损压缩和无损压缩的图片文件格式,派生自图像编码格式 VP8.根据 Google 的测试,无损压缩 ...

  5. app开发技术调研

    l  面向消费者与公众的应用系统,主要分为3种主流的渠道: 1.   web应用 2.   基于腾讯微信开放api构建的微信app 3.   移动端app ll 在移动端app方面,通过调研,现主流的 ...

  6. Android 虚拟多开系列一——技术调研

    参考链接:http://weishu.me Github源码链接:             国内Xposed框架源码链接                               VirtualAp ...

  7. 指尖前端重构(React)技术调研分析

    摘要:重构前的技术文档调研与分析,包括技术选型为什么选择react,应用过程中的注意事项等. 一.为什么选择React React是当前前端应用最广泛的框架.三大SPA框架 Angular.React ...

  8. 技术调研,IDEA 插件怎么开发「脚手架、低代码可视化编排、接口生成测试」?

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 不踩些坑,根本不是成熟的码农! 你觉得肯德基全家桶是什么?一家人一起吃的桶吗,就那么 ...

  9. 【技术调研】最强Node-RED初探总结

    在某个项目中需要调研下node-red的功能,我大概花了三天时间研究了相关的官方文档,写了几个Demo总结了下node-red相关的功能.如需转载,请注明出处 https://www.cnblogs. ...

  10. MySQL数据库分片技术调研

    将这段时间了解的MySQL分片技术和主从复制只是整理清楚画了思维导图记录一下,希望能给需要的人一些帮助 P.S.:个人整理,可能会有错误之处,还望指出~ 要解决的问题 1.海量数据的操作超出单表.单库 ...

随机推荐

  1. 基于50W携程出行攻略构建事件图谱(含码源):交通工具子图谱、订酒店吃饭事件图谱等

    基于50W携程出行攻略构建事件图谱(含码源):交通工具子图谱.订酒店吃饭事件图谱等 项目构成 本项目由两个部分的组成,具体包括语料的获取以及基于语料的事件挖掘两个部分,具体项目目录包括: news_s ...

  2. 2023中国高校计算机大数据挑战赛:论文学科分类baseline|清华主办

    2023中国高校计算机大数据挑战赛:论文学科分类baseline|清华主办 官方地址:https://www.heywhale.com/home/competition 项目码源见文末 1.比赛介绍 ...

  3. 10.1 C++ STL 模板适配与迭代器

    STL(Standard Template Library)标准模板库提供了模板适配器和迭代器等重要概念,为开发者提供了高效.灵活和方便的编程工具.模板适配器是指一组模板类或函数,它们提供一种适配机制 ...

  4. 使用JAAS文件登陆kerberos(zookeeper)

    Kerberos 5 Configuration Since the SPNEGO mechanism will call JGSS, which in turns calls the Kerbero ...

  5. VSCode实现GDB图形界面远程调试

    前言 在习惯了集成开发环境的图形界面调试时,首次使用GDB远程调试必定很不习惯,下面讲述如何利用VSCode实现GDB图形界面远程调试 代码在Linux服务器上,而平常都在Windows上使用,那么V ...

  6. 记录一则因主机名讹误导致的RAC启动异常

    1.故障现象 2.解决方案 环境:RHEL 7 + Oracle 19.5 RAC 1.故障现象 最近遇到客户的一套19c测试环境,在一次主机重启后发现集群无法启动,使用crsctl stat res ...

  7. DHCP的安装与配置

    一:前期准备 1.打开windows虚拟机,使用仅主机模式 (虚拟机(M)→设置(S)→网络适配器) 2.修改Windows ip可选范围为192.168.1.204到192.168.1.207 对应 ...

  8. MySQL 8 查询优化新工具 Explain Analyze

    1. Explain Analyze 介绍 Explain 是我们常用的查询分析工具,可以对查询语句的执行方式进行评估,给出很多有用的线索.但他仅仅是评估,不是实际的执行情况,比如结果中的 rows, ...

  9. MySQL-顺序IO和随机IO的区别

    顺序IO是指读写操作的访问地址连续.在顺序IO访问中,HDD所需的磁道搜索时间显着减少,因为读/写磁头可以以最⼩的移动访问下一个块.数据备份和日志记录等业务是顺序IO业务.随机IO是指读写操作时间连续 ...

  10. [Ngbatis源码学习]Ngbatis源码阅读之连接池的创建

    Ngbatis源码阅读之连接池的创建 1. NebulaPool的创建 NgbatisBeanFactoryPostProcessor 这个类实现了 BeanFactoryPostProcessor ...