【Github】项目名:EasyTransaction:一站式分布式事务解决方案
一、项目简介
EasyTransaction是一个分布式事务解决方案。它统一了TCC、SAGA、FMT(seata/fescar AutoCompensation)、可靠消息、补偿等事务的使用。该框架旨在解决分布式SOA(包括微服务等)的事务问题,其是结合公司之前遇到的分布式事务场景以及支付宝程立分享的一个PPT而设计实现的。
二、特性
1. 引入JAR包即用,无需独立部署协调者(使用extensionsuite – database – starter时无需独立部署ZooKeeper)。
2. 一个框架包含多种事务形态,可混合使用。
3. 高性能,若不启用框架的幂等功能,对业务数据库的额外消耗仅为写入25字节的一行。
4. 可选的框架自带幂等实现及调用错乱次序处理。
5. 业务代码可实现完全无入侵。
6. 支持嵌套事务。
7. 分布式事务ID可关联业务ID、业务类型、APPID,便于监控。
8. 整合Seata的AT模式,改造行锁使其存储到本地,改造集中式TC为ET的分布式协调。
三、使用简介
1. 业务代码组件依赖:业务代码组件已上传到中央仓库,在pom中加入依赖:
xml
com.yiqiniu.easytrans
easytrans – starter
1.4.3
Starter里包含了默认的组件实现,若不需要可以排除。
2. 业务发起者:框架暴露接口EasyTransFacade,使用方法如下:
java
@Transactional
public void buySomething(int userId, long money) {
// 本地业务方法,下订单,并获得订单号
JdbcTemplate jdbcTemplate = util.getJdbcTemplate();
Integer id = saveOrderRecord(jdbcTemplate, userId, money);
// 声明全局事务ID
transaction.startEasyTrans(BUSINESS_CODE, id);
// 调用远程服务扣除所需的钱
WalletPayTccMethodRequest deductRequest = new WalletPayTccMethodRequest();
deductRequest.setUserId(userId);
deductRequest.setPayAmount(money/2);
Future deductFuture = transaction.execute(deductRequest);
// 调用远程服务进行账务登记
AccountingRequest accountingRequest = new AccountingRequest();
accountingRequest.setAmount(money);
accountingRequest.setUserId(userId);
Future accountingFuture = transaction.execute(accountingRequest);
// 发布消息以触发相关的业务处理
OrderMessage orderMessage = new OrderMessage();
orderMessage.setUserId(userId);
orderMessage.setAmount(money);
Future reliableMessage = transaction.execute(orderMessage);
}
3. 服务提供者:服务提供者实现对应的接口,并注册到Spring的Bean容器。如提供TCC服务的业务,需实现TccMethod接口:
java
@Component
public class WalletPayTccMethod implements TccMethod<WalletPayTccMethodRequest,WalletPayTccMethodResult> {
@Resource
private WalletService wlletService;
@Override
public WalletPayTccMethodResult doTry(WalletPayTccMethodRequest param) {
return wlletService.doTryPay(param);
}
@Override
public void doConfirm(WalletPayTccMethodRequest param) {
wlletService.doConfirmPay(param);
}
@Override
public void doCancel(WalletPayTccMethodRequest param) {
wlletService.doCancelPay(param);
}
}
四、扩展性
框架采用接口粘合各个模块,具有较强的扩展性。例如:
1. RPC实现:目前支持DUBBO,欢迎增加对SPRINGCLOUDRIBBON/EUREKA的支持。
2. 消息队列实现:目前支持阿里ONS及KAFKA,欢迎增加额外实现。
3. 序列化实现:目前使用Spring – core提供的序列化,欢迎增加更高效的实现。
4. 增删改Filter:目前有幂等Filter等,可根据需求新增。
5. 数据源选择器:目前提供单数据源选择器,可自行实现多数据源相关的选择器。
6. 事务执行日志的实现:目前提供基于关系数据库及REDIS的实现,可自行实现其他形式如文件系统、HBASE等的事务日志。
五、项目总结
EasyTransaction为分布式事务处理提供了全面的解决方案,从多种事务形态的统一到方便的使用方式以及良好的扩展性等方面都有不错的表现。欢迎大家在评论区留言讨论关于这个项目的任何问题或者使用心得等。
项目地址
数据统计
数据评估
本站链氪巴士提供的EasyTransaction:一站式分布式事务解决方案都来源于网络,不保证外部链接的准确性和完整性,同时,对于该外部链接的指向,不由链氪巴士实际控制,在2024年12月6日 上午12:00收录时,该网页上的内容,都属于合规合法,后期网页的内容如出现违规,可以直接联系网站管理员进行删除,链氪巴士不承担任何责任。
相关导航
prontera/spring - cloud - rest - tcc项目聚焦于随着业务和架构变动带来的进程间一致性需求增加的问题,以Spring Cloud Netflix为服务治理基础,结合C4Model展示基于TCC思想的分布式事务解决方案。其中提出TCC变体TCD并阐述其模型、流程、原则相关理念。还给出购入PS4场景示例,包含多服务操作及可能出现的事务冲突处理。同时介绍了项目技术栈、前置条件、部署演示等多方面内容,是深入学习分布式事务处理的不错案例。