简介
本文仅对目前市面上现存的分布式事务框架做简短介绍,用于在实际框架选型中做初步参考.
TX-LCN
“LCN不生产事务,仅仅是本地事务的协调者”,简单理解LCN通过”协调者服务”来协调各服务内部的本地服务,最终实现分布式事务.
TX-LCN由两大模块组成, TxClient、TxManager,TxClient作为模块的依赖框架,提供TX-LCN的标准支持,TxManager作为分布式事务的控制放。事务发起方或者参与反都由TxClient端来控制。
5.0以后由于框架兼容了LCN、TCC、TXC三种事务模式,为了避免区分LCN模式,特此将LCN分布式事务改名为TX-LCN分布式事务框架。
优点:
接入成本低,依赖本地事务即可实现分布式事务,原理类似于通过本地消息表实现分布式事务,避免了手动搭建的繁琐,能够提供较完整的分布式事务控制.
缺点:
由于其依赖TxManager协调者,因此根据目前的版本来看协调者之间不支持多点部署,存在单点问题.
Apache ServiceComb Pack
首先简单介绍下Apache ServiceComb项目,该项目是针对微服务应用而提供的相关微服务中间件工具,例如微服务框架SDK\服务注册和发现\分布式事务\配置中心等等.其中就具备Apache ServiceComb Pack分布式事务中间件,为了便于叙述,下面简称为ASCP.
ASCP是最终一致性分布式事务解决方案,目前提供TCC和Saga两种分布式事务实现方式,其中Alpha作为协调者服务,Omega作为参与者服务.
特点
- 高可用:支持高可用的集群模式部署。
- 高可靠:所有的关键事务事件都持久化存储在数据库中。
- 高性能:事务事件是通过高性能gRPC来上报的,且事务的请求和响应消息都是通过Kyro进行序列化和反序列化。
- 低侵入:仅需2-3个注解和编写对应的补偿方法即可引入分布式事务。
- 部署简单:支持通过容器(Docker)进行快速部署和交付。
- 补偿机制灵活:支持前向恢复(重试)及后向恢复(补偿)功能。
- 扩展简单:基于Pack架构很容实现多种协调协议,目前支持TCC、Saga协议,未来还可以添加其他协议支持。
Apache Camel SAGA EIP
camel首先是一款规则引擎,其次是一款基于规则快速实现消息流转的开发组件,集成该组件后,你的程序可以编写最少的代码实现复杂的消息在不同的协议规则间流转。
Apache Camel 作为集成项目的利器,针对应用集成场景的抽象出了一套消息交互模型,通过组件的方式进行第三方系统的接入,目前Apache Camel已经提供了300多种组件能够接入HTTP,JMS,TCP,WS-*,WebSocket 等多种传输协议。Apache Camel结合企业应用集成模式(EIP)的特点提供了消息路由,消息转换等领域特定语言(DSL),极大降低了集成应用的开发难度。Apache Camel通过URI的方式来定义需要集成的应用节点信息,用户可以按照业务需求使用DSL快速编写消息路由规则,而无需关注集成协议的细节问题。与传统的企业集成服务总线(ESB)相比,Apache Camel的核心库非常小巧(是一个只有几M的jar包),可以方便地与其他系统进行集成。
Apache Camel 作为基于知名的企业应用模式(Enterprise Integration Patterns)多功能的整合框架.其内部也提供了SAGA EIP组件用于实现SAGA模式,可以自由设定路由规则,设定消息的回滚和补偿方案,在某种程度上可以实现分布式事务.
Eventuate Tram
EventuateTram(以下简称ET)作为内嵌在微服务框架中的平台致力于解决分布式数据管理问题.ET针对基于java/Spring的微服务应用构建,采用JDBC/JAP为基础的一致性模型,其最大的特点是接入成本低,改动小.
特点
- 能够实现saga模式
- 支持跨服务的查询指令
- 基于CQRS(Command Query Responsibility Segregation)的视图
- 可发布/订阅事件
- 支持异步收发命令
ET应用架构如上图,应用由两部分组成:
- Todo Service:将接收到的消息持久化到MySQL数据库分别是TODO表和Message表并支持Todo View Service的订阅和消费.
- Todo View Service:负责订阅事件并更新到ES
ET支持saga模式并提供补偿机制,本质上是BASE理论的实践能够达到最终一致性,是本地消息表+分布式消息的结合.但是ET的缺点也比较明确,CDC依然存在单点问题,事务逻辑依赖Mysql,消息依赖kafka,查询依赖ES,如果原有架构不兼容以上几种组件那么在现有项目实施时会遇到巨大障碍.
Seata/Fescar
Fescar 是 阿里巴巴 开源的 分布式事务中间件,以 高效 并且对业务0侵入的方式,解决 微服务场景下面临的分布式事务问题。由2014年最初的TXC发展成2016年的GTS最后到2019年的Fescar.Fescar更名为Seata,两者是同一个东西.详情可见官网[Seata]
优点
- 支持AT\TCC\SAGA\XA等多种分布式事务模式
- 对业务无侵入/侵入小(AT)
- 高性能(TCC)
- TC独立部署可以方便分布式事务的监控
- 文档相对齐全\社区相对活跃\上手难度小
缺点
- 目前依然不是太完善,正在不断优化中,如XA模式正在开发
- TC目前不支持集群模式,无法避免单点问题
EasyTransaction
一站式解决分布式SOA(包括微服务等)的事务问题
特点
- 引入JAR包即用,无需独立部署协调者,无需独立部署ZooKeeper(使用extensionsuite-database-starter时)
- 一个框架包含多种事务形态,一个框架搞定所有类型的事务
- 多种事务形态可混合使用
- 高性能,大多数业务系统瓶颈在业务数据库,若不启用框架的幂等功能,对业务数据库的额外消耗仅为写入25字节的一行
- 可选的框架自带幂等实现及调用错乱次序处理,大幅减轻业务开发工作量,但启用的同时会在业务数据库增加一条幂等控制行
- 业务代码可实现完全无入侵
- 支持嵌套事务
- 分布式事务ID可关联业务ID,业务类型,APPID,便于监控各个业务的分布式事务执行情况
- 整合Seata的AT模式,改造行锁使其存储到本地,改造集中式TC为ET的分布式协调
- 不存在TC的单点问题,设计架构理念更先进
缺点
- 没有相对活跃的社区,作者维护频率略低
- 没有相对完善的学习文档,上手要花费不少时间
其它分布式事务框架
[tcc-transaction].https://github.com/changmingxie/tcc-transaction
[Hmily].https://github.com/yu199195/hmily
[ByteTCC].https://github.com/liuyangming/ByteTCC
[TransactionEssentials].https://www.atomikos.com/Main/WebHome
参考链接:
[TX-LCN].https://www.txlcn.org/zh-cn/docs/principle/control.html
[Apache ServiceComb].http://servicecomb.apache.org/developers/
[Apache ServiceComb Pack].https://github.com/apache/servicecomb-pack/blob/master/README_ZH.md
[Apache Camel SAGA EIP].https://camel.apache.org/manual/latest/saga-eip.html
[Apache Camel简介].https://my.oschina.net/u/3569919/blog/3129377
[Eventuate Tram].http://eventuate.io/abouteventuatetram.html
[Seata].https://seata.io/zh-cn/docs/overview/what-is-seata.html
[EasyTransaction].https://github.com/QNJR-GROUP/EasyTransaction
版权声明:本文为博主原创文章,欢迎转载,转载请注明作者、原文超链接,感谢各位看官!!!
本文出自:monkeyGeek
座右铭:生于忧患,死于安乐
欢迎志同道合的朋友一起交流、探讨!
