• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

分布式事务--TCC的间件--选型/对比

武飞扬头像
IT利刃出鞘
帮助1

简介

说明

本文介绍分布式事务的TCC的一些中间件。包括:Seata,TCC-transaction、ByteTCC、Himly、EasyTransaction、LCN

为什么要使用TCC中间件

感知各个阶段的执行情况以及推进执行下一个阶段的这些事情,不太可能自己手写实现,太复杂了。

中间件介绍

中间件名称

Github地址

star数量

简介

Seata

https://github.com/seata/seata

18.3K

阿里。TCC模式仅支持dubbo,不支持feign。

tcc-transaction

https://github.com/changmingxie/tcc-transaction

4.9K

个人。不支持SpringBoot!!

LCN

https://github.com/codingapi/tx-lcn

3.9K

CodingApi团队。依赖太多:Redis、Zookeeper、Consul;目前(2021.02.24)还不支持TCC模式。

Hmily

https://github.com/dromara/hmily

3.5K

碧桂园。文档完善,SpringCloud与SpringBoot均支持,网上资料多。

ByteTCC

https://github.com/liuyangming/ByteTCC

2.5K

北京新奥集团

EasyTransaction

https://github.com/QNJR-GROUP/EasyTransaction

2.2K

个人。(资料少、文档少)

预测: Hmily的star数量会逐渐追平并超越LCN和tcc-transaction。

功能对比

框架名称

幂等性

嵌套调用

RPC框架支持

SpringBoot支持

支持的事务日志

Seata

   

Dubbo。(springcloud:AT模式支持,TCC模式不支持)

支持

file、DB、redis

tcc-transaction

不支持

不支持

不耦合RPC框架。即:底层使用任何RPC都可以。

但实际上:已对dubbo支持。

不支持

file、DB、redis、ZK

LCN 不支持 不支持   支持。(需5.0版本以上)  

Hmily

不支持

不支持

Dubbo、motan、springcloud

 

file、DB、redis、mongodb、ZK

ByteTCC

不支持

不支持

Dubbo、springcloud

 

file

EasyTransaction

支持

支持

Dubbo、SpringCloud、Ribbon/Eureka

 

DB、Redis

说明:是否支持幂等和嵌套调用不重要。原因:

  • 我们业务中一般要自己处理幂等(无论框架是否支持幂等);
  • 若框架不支持嵌套调用,我们不嵌套调用即可。

LCN

说明

LCN TXC TCC 三种事务模式,且可混合支持。

LCN本质上是一个BestEffors 1PC的框架:大多数情况下,只要应用不Crash就不会导致不一致。

优点

  • 性能优秀
  • 可靠性强
  • 代码入侵性小
    在本次对比的所有框架中,LCN实现的分布式事务处理模式,编码复杂性和入侵代码量最低。

缺点

  • 需额外部署tx-manager服务节点。
  • 由于需要lock资源这种处理方式,如果集中更新某几个热门商品时,LCN的性能衰减量大于TCC模式。
  • 服务超时时,会造成其他服务的资源被锁住,比如支付服务超时过程中,相关商品库存会一直无法操作。
  • 容易导致数据不一致:对于数据出现不一致时,必须修复的情况
    • 我们必须要写对应的修复程序。这实际上跟TCC/补偿等工作量一样了
    • 使用BestEffors1PC写的业务代码在出现数据异常时,并不能保证其后续的补偿是可执行的。
    • 举个例子,转账,出现了给别人加钱了,但是自己没有扣钱的数据异常,此时两位客户就有可能立马把钱取出来用掉

EasyTransaction

优点

  • 针对远程调用采用多线程并发处理的模式,性能优化较好
  • 可靠性强
  • 整合简单,无需额外部署事务管理节点

缺点

  • 对比其他框架,入侵性和编码量是偏大的
  • RPC请求超时处理尚未实现

hmily

说明

“采用disruptor框架进行事务日志的异步读写。

优点

通过注解的形式声明TCC的的confirm与cancel方法,代码入侵性较小。

缺点

  • 多线程的锁机制有待优化。
  • 分布式事务中RPC请求串行处理,请求的响应时间长
  • 不可靠:异步写入事务日志就等于TCC是不可靠的

easy-transaction

优点

  • 真正的高性能,对IO做了大量优化,多个独立三方公司横向评测分布式事务框架时,同等场景及同等可靠性保证下性能最佳(可自行验证测试)
  • 理论上只要外部组件不丢数据,在ET内部是不会出现事务不完整的情况(相对于上面一些框架,其原理就不可靠,运行出现异常可以说是必然的)
  • 支持框架幂等,业务程序程序不再需要接管 幂等、调用时序错乱处理等繁琐重复逻辑(这个是一个繁琐重复的工作,貌似只有ET对本项进行了完整支持)
  • 基于扩展的实现,而非基于修改的实现,更易理解,风险更小,功能更强大
  • 支持多种事务形态(TCC,补偿,可靠消息,SAGAs等)混合使用,可按照最适合业务的选择最贴切的事务形态(这时ET创建之初的理念及特点,也是其他框架所不具有的特性)

缺点

  • 文档很少

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhiaejfg
系列文章
更多 icon
同类精品
更多 icon
继续加载