阿里开源高效简单易用的分布式事务解决方案——fescar

SpringBoot+ Dubbo + Mybatis + Nacos +Seata整合来实现Dubbo分布式事务 本文主要介绍SpringBoot2.1.5 + Dubbo 2.7.3 + Mybatis 3.4.2 + Nacos 1.1.3 +Seata 0.8.0整合来实现Dubbo分布式事务管理,使用Nacos 作为 Dubbo和Seata的注册中心和配置中心,使用 MySQL 数据库和 MyBatis来操作数据。如果你还对SpringBootDubboNacosSeataMybatis不是很了解的话,这里我为大家整理个它们的官网网站,如下。 阅读详情

FESCAR: 快速简单的提交和回滚

FESCAR是什么?

A distributed transaction solution with high performance and ease of use for microservices architecture.

一种高性能、易使用的微服务架构分布式事务解决方案。

在微服务中的分布式事务问题

让我门想象一下一个传统的单体应用,它的业务由三个模块构建而成,他们使用了一个单一本地数据源。

很显然,本地事务可以保证数据一致性

Monolithic App

微服务架构中一些事情需要被改变,这三个被上文提及到的模块,被设计为三个不同数据源之上的三个服务,在本地事务能够保证数据一致性。

但是对于真个业务逻辑范围如何保证数据一致性呢?

Microservices Problem

FESCAR是怎么做的?

FESCAR只是一个上述提及问题的解决方案

FESCAR solution

首先,如何明确这个分布式事务呢?

我们说,一个分布式事务是一个全局事务,由一批分支事务组成,通常分支事务只是本地事务

Global & Branch

FESCAR有三个基础组件:

  • Transaction Coordinator(TC): 全局和分支事务的状态的保持,驱动这个全局的提交和回滚.
  • Transaction Manager(TM): 明确全局事务的范围:开始一个全局事务,提交或者回滚一个全局事务.
  • Resource Manager(RM): 管理分支事务工作资源,告诉TC,注册这个分支事务和上报分支事务的状态,驱动分支事务的的提交和回滚。

Model

一个典型的FESCAR管理分布式事务的生命周期:

  1. TM询问TC开启一个新的全局事务,TC生成一个XID,代表这个全局事务

  2. XID 通过微服务的调用链传播

  3. RM将本地事务注册为XID到TC的相应全局事务的分支。

  4. TM要求TC提交或回滚XID的对应的全局事务。

  5. TC驱动整个分支在XID对应的全局事务下,去完成分支的提交或者回滚

  6. TM asks TC to begin a new global transaction. TC generates an XID representing the global transaction.

  7. XID is propagated through microservices' invoke chain.

  8. RM register local transaction as a branch of the corresponding global transaction of XID to TC.

  9. TM asks TC for committing or rollbacking the corresponding global transaction of XID.

  10. TC drives all branch transactions under the corresponding global transaction of XID to finish branch committing or rollbacking.

Typical Process

快速开始

让我们开启一个微服务例子

开启FESCAR服务

  • 下载正是安装包并解压

  • cd bin,运行启动脚本

    sh fester-server.sh /User/min.ji/Downloads/data

用例

用户购买商品的业务逻辑。整个业务逻辑有3个微服务

  • 仓储服务:扣减库存数量在给定的商品
  • 订单服务:根据购买请求创建订单
  • 账户服务:记录账户的余额

架构:

Architecture

StorageService

public interface StorageService {
    /**
     * deduct storage count
     */
    void deduct(String commodityCode, int count);
}

OrderService

public interface OrderService {
    /**
     * create order
     */
    Order create(String userId, String commodityCode, int orderCount);
}

AccountService

public interface AccountService {
    /**
     * debit balance of user's account
     */
    void debit(String userId, int money);
}

Main business logic

public class BusinessServiceImpl implements BusinessService {
    private StorageService storageService;
    private OrderService orderService;
    /**
     * purchase
     */
    public void purchase(String userId, String commodityCode, int orderCount) {

        storageService.deduct(commodityCode, orderCount);

        orderService.create(userId, commodityCode, orderCount);
    }
}
public class OrderServiceImpl implements OrderService {
    private OrderDAO orderDAO;
    private AccountService accountService;
    public Order create(String userId, String commodityCode, int orderCount) {
        int orderMoney = calculate(commodityCode, orderCount);
        accountService.debit(userId, orderMoney);
        Order order = new Order();
        order.userId = userId;
        order.commodityCode = commodityCode;
        order.count = orderCount;
        order.money = orderMoney;
        // INSERT INTO orders ...
        return orderDAO.insert(order);
    }

FESCAR分布式事务解决方案

undefined

我们就需要一个注解@GlobalTransactional在业务方法中

    @GlobalTransactional
    public void purchase(String userId, String commodityCode, int orderCount) {
        ......
    }

由Dubbo + FESCAR的例子

第一步:设置数据库

  • 需求:mysql中的InnoDB引擎

笔记:事实上,在我们使用的例子中,应该有三个服务使用三个这样的数据库,然而,我们可以简单穿件一个数据库,但创建三个数据源。

根据你创建的数据库修改springXML文档

dubbo-account-service.xml dubbo-order-service.xml dubbo-storage-service.xml

    <property name="url" value="jdbc:mysql://x.x.x.x:3306/xxx" />
    <property name="username" value="xxx" />
    <property name="password" value="xxx" />

第二步:创建UNDO_LOG表

UNDO_LOG表在FESCAR AT模式中需要被用到

CREATE TABLE `undo_log` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `branch_id` bigint(20) NOT NULL,
  `xid` varchar(100) NOT NULL,
  `rollback_info` longblob NOT NULL,
  `log_status` int(11) NOT NULL,
  `log_created` datetime NOT NULL,
  `log_modified` datetime NOT NULL,
  `ext` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `idx_unionkey` (`xid`,`branch_id`)
) ENGINE=InnoDB AUTO_INCREMENT=159 DEFAULT CHARSET=utf8

第三步:创建例程业务逻辑表

DROP TABLE IF EXISTS `storage_tbl`;
CREATE TABLE `storage_tbl` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `commodity_code` varchar(255) DEFAULT NULL,
  `count` int(11) DEFAULT 0,
  PRIMARY KEY (`id`),
  UNIQUE KEY (`commodity_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


DROP TABLE IF EXISTS `order_tbl`;
CREATE TABLE `order_tbl` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` varchar(255) DEFAULT NULL,
  `commodity_code` varchar(255) DEFAULT NULL,
  `count` int(11) DEFAULT 0,
  `money` int(11) DEFAULT 0,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


DROP TABLE IF EXISTS `account_tbl`;
CREATE TABLE `account_tbl` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` varchar(255) DEFAULT NULL,
  `money` int(11) DEFAULT 0,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

第五步:运行,启用



作者:kevin0016
链接:https://www.jianshu.com/p/16b5900bb484

Vivado用户指南高效阅读:FPGA开发流程、Tcl脚本与时序收敛实战 在FPGA开发中,掌握一套完整的数字设计工具链至关重要。Vivado Design Suite作为业界主流平台,其用户指南常因厚重而让人望而却步。本文从工具链认知出发,阐释综合、实现、约束与调试的核心原理,讲解如何利用Tcl脚本自动化编译流程,并针对时序收敛给出实用策略。还涵盖常见错误排查与高效学习路径,适合从新手到进阶的工程师参考。 阅读详情

相关推荐

Dubbo分布式事务解决方案

微服务架构的分布式事务处理方案

从零开始学Seata(Fescar)-简介

Seata(Fescar)是阿里巴巴集团在2019年1月开源的分布式事务解决方案。 本篇文章主要参考了官方网站的github的README.md,并在对其翻译的基础上,进行了编辑。 本文所有图片均来自官网。 定义 Seata(Fescar)是一种易于使用,高性能,基于Java的开源分布式事务解决方案。 官方定义原文: Seata(Fescar) is an easy-to-use, h...

穿过午夜 7502

【v4l2】在Android SDK中交叉编译v4l2-ctl

为调试Android设备中camera的相关功能,需要引入v4l2-ctl工具。由于厂商提供的Android SDK源码中未集成v4l2-utils(包含v4l2-ctl以及其它组件的工具包),故需要下载v4l2-utils源码,并在Android SDK中交叉编译生成v4l2-ctl可执行文件。本文讲述其过程步骤。

rentong123的博客 1328

dubbo分布式事务

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34072637的博客 479

STM32CubeMX实战:FreeRTOS内存管理5种方案全解析(附heap_4避坑指南)

本文深入解析了STM32CubeMX环境下FreeRTOS的5种内存管理方案(heap_1到heap_5),重点介绍了heap_4的优化策略与避坑指南。通过对比分析各方案的特点、性能指标及适用场景,帮助开发者根据项目需求选择最优内存管理策略,提升嵌入式系统开发效率与稳定性。

aa123的博客 620

从Jira到Notion:用Sequential Thinking重构你的敏捷工作流(含GPT-6配置模板)

本文探讨了如何利用Sequential Thinking这一AI认知模型,重构敏捷开发工作流。通过连接Jira、Notion等工具,构建动态依赖图谱,实现从被动响应到主动规划的转变。文章提供了详细的配置教程和GPT-6配置模板,帮助团队实现任务自动拆解、智能看板生成与跨平台协调,从而提升项目管理效率。

gpt4scribbler的博客 205

【SpringCloud】Dubbo中分布式事务Seata解决方案

背景 ​ 目前开发的项目是分布式架构的,数据库也是分开的,各个子工程之间是通过dubbo调用,由于没有考虑分布式事务的问题,导致接口出错回滚时,调用端正常回滚了但是被调用端却不能回滚,产生了很多垃圾数据。 演示场景 这里创建三个模块,消费者,暴露接口,提供者。 暴露接口 用户服务更新积分 余额服务更新余额 提供者 2个方法的具体实现。 消费者 这个就是发起服务之间调用的边界,所以要在这注入关键注解 @GlobalTransactional。 访问 正常情况 ​ 在正常情况下,更新sco

分享记录开发中的问题,欢迎一起探讨! 4371

mmpretrain学习笔记

(4)数据集路径 data_root=‘data/imagenet’–》data_root=‘data/Fruits Dataset/images’(7)适当的修改num_workers、epochs、batch_size、lr等。3、训练优化 :梯度下降算法、学习率参数、训练总轮次、学习率变化策略等。my_resnet18_8xb32_in1k.py 完整的配置文件。(6)split=‘train’、split='val’注释掉。2、数据:数据集划分、数据文件路径、批大小、数据增强策略等。

吃葡萄不吐葡萄皮 937

分布式事务中间件Fescar—RM模块源码解读

原文已被阿里中间件团队收录 阿里中间件团队云栖社区文章链接,点击可跳转 阿里中间件团队微信公众号文章链接,点击可跳转 前言 在SOA、微服务架构流行的年代,许多复杂业务上需要支持多资源占用场景,而在分布式系统中因为某个资源不足而导致其它资源占用回滚的系统设计一直是个难点。我所有团队也遇到了这个问题,为解决这个问题上,团队采用的是阿里开源的分布式中间件...

测试0901-1 328

lammps构建高熵合金模型+结构优化初步筛选能量最小的结构

lammps构建高熵合金模型+结构优化初步筛选能量最小的结构

qq_45834835的博客 2605

【华为OD机试真题 新系统】1021、API请求日志去重分析 | 机试真题+思路参考+代码解析(C++、Java、Py、C语言、JS)

【华为OD机试真题 新系统】1021、API请求日志去重分析 | 机试真题+思路参考+代码解析(C++、Java、Py、C语言、JS) 华为od机试,华为od机试真题,华为od机试E卷,华为odE卷,华为od机试真题E卷,华为OD,华为OD机试,华为OD机试真题,华为od机考,华为od机试D卷,华为od机试真题D卷,华为od手撕代码,华为od,华为od机试C卷,华为od e卷,华为2026e卷,od机试,2026E卷,华为OD机试E卷,什么是华为od,华为od介绍,全面了解华为od,2026华为od,如何备

KJ.JK 147

分布式事务解决方案FESCAR

最近读了下raincat,hmily的源码,也看了ByteTcc,tcc-transaction,lcn等框架的比较。但是对于技术选型而言,还是希望学习下BAT这种体量的公司用的是什么解决方案,恰巧在查阅资料选型时,阿里开源了FESCAR,开源当天就提了几个issue,一个是有些小疑问,还有就是,想看看这个项目遇到问题时维护者是否能及时解答。事实证明,维护者和社区还是很活跃的,问题都很快得到解答。...

IT云清 5865

【WorkBuddy从入门到精通实战教程】实战案例 第 41 章 论文阅读与文献综述

本文系统讲解如何用WorkBuddy高效阅读论文并撰写文献综述。针对“读了一天没记住”的痛点,提出“三遍阅读法”:快速评估相关性、结构化提炼核心内容、批判性分析局限。结合提示词工程,实现单篇精读、多篇对比与综述框架搭建,显著提升效率。强调学术诚信,严防AI幻觉,要求所有引用与数据必须回源核对。最终目标是借助AI辅助理解与组织,但坚持自主思考与写作,真正掌握科研能力。

企鹅码农的专属播客,分享10多年的实战案例和经验解读,包含YOLO、RT-DETR、AI等各个工作领域。 144

阿里巴巴开源分布式事务解决方案 FESCAR【转】

偶然间看到阿里开源的分布式事务中间件,期待有投入到生产阶段的栗子。从蓝图上看出目前有支持dubbo的解决方案,后续0.5.x版本会推出支持spring cloud的方案。 下面看官方正文,喜欢的可以去官方Github上瞧瞧看看。 Fescar 是 阿里巴巴 开源的 分布式事务中间件,以 高效 并且对业务 0 侵入 的方式,解决 微服务 场景下面临的分布式事务问题。 1. 什么是微服务化带来的分布...

大萌小路 1853

解决Office 365 SMTP问题:C#邮件发送详解

本文介绍了如何在C#中使用Office 365 SMTP服务发送邮件。重点讲解了正确配置SMTP客户端的关键参数:必须使用587端口并启用TLS加密(EnableSsl=true),同时通过NetworkCredential进行身份验证。虽然SmtpClient已不推荐用于新项目,但本文提供的代码示例仍适用于临时项目或系统维护,并建议未来可考虑使用MailKit等现代邮件库。文章还包含了错误处理机制,确保程序健壮性。

2501_90323865的博客 141

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

alibaba/fescar 阿里巴巴 开源 分布式事务中间件

Fescar 是阿里巴巴开源的分布式事务中间件,以高效并且对业务0 侵入的方式,解决微服务场景下面临的分布式事务问题。 示例:https://github.com/windwant/spring-dubbo-service/tree/master/serverx 概览 用户指南 快速开始 API 指南 部署指南 运维指南 参数配置说明 原理与设计...

weixin_30376509的博客 161

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

分布式事务解决方案 Fescar 入门实例及实现原理源码解析

Fescar 是阿里巴巴最近开源的分布式事务解决方案框架,这篇 Chat 我们通过以下几个方面进行学习和了解 Fescar 在解决分布式事务方面所提供的功能。 本场 Chat 主要内容: 简单介绍、学习和了解目前常用的分布式事务解决方案(XA、TCC、事务消息,Saga 等); Fescar 相关实现架构简单介绍; Fescar 简单入门实例介绍; 基于实例通过源码分析介绍 Fescar 三个模...

GitChat 1373

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

阿里分布式事务框架GTS开源啦!

点击上方“Java后端技术”,选择“置顶或者星标”每天带你看高清大图哦!整理:开源中国就在9号这天,阿里分布式事务框架GTS开源了一个免费社区版Fescar,看到了这个消...

Java后端技术 763

分布式事务解决方案 FESCAR

关于分布式解决方案 Fescar 关于 Fescar Fescar (Fast & Easy Commit And Rollback) 是一个用于微服务架构的分布式事务解决方案,它的特点是高性能且易于使用,旨在实现简单并快速的事务提交与回滚。 Fescar 是 阿里巴巴 开源的 分布式事务中间件,以 高效 并且对业务0侵入的方式,解决微服务场景下面临的分布式事务问...

u013646034的博客 278

阿里分布式事务框架GTS开源啦! 侵立删

整理:开源中国 就在9号这天,阿里分布式事务框架GTS开源了一个免费社区版Fescar,看到了这个消息内心非常的激动!在微服务系统中,分布式事务一直是痛点,也是难点。社区里也有一些开源的分布式解决方案的框架,比如ByteTCC、LCN,但是这些框架没有一个权威的组织在维护,或多或少大家都有点不敢用。阿里开源的分布式事务解决框架Fescar会不会一统分布式事务江湖,大家拭目以待! 我们现在来看看...

心神沫沫的收藏 237

seata-分布式事务注解

2019 年 1 月,阿里巴巴中间件团队发起了开源项目Fescar(Fast & EaSy Commit And Rollback),和社区一起共建开源分布式事务解决方案。Fescar 的愿景是让分布式事务的使用像本地事务的使用一样,简单和高效,并逐步解决开发者们遇到的分布式事务方面的所有难题 ...

java技术专家全栈成长之路 3169

更开放的分布式事务 | 蚂蚁金服共建 Seata 社区

SOFAStack(Scalable Open Financial Architecture Stack)是蚂蚁金服自主研发的金融级分布式架构,包含了构建金融级云原生架构所需的各个组件,历经蚂蚁金服超过十年的业务历练。SOFAStack 于 2018 年 4 月宣布开源,并逐步开源 SOFABoot、SOFARPC、SOFALookout、SOFATra...

weixin_34090562的博客 193
上一篇: Docker指向多个私有镜像仓库地址
下一篇: Registry & Portus搭建详解
hxpjava1
博客等级 码龄19年 1365粉丝 511原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值