⭐⭐⭐ Spring Boot 项目实战 ⭐⭐⭐ Spring Cloud 项目实战
《Dubbo 实现原理与源码解析 —— 精品合集》 《Netty 实现原理与源码解析 —— 精品合集》
《Spring 实现原理与源码解析 —— 精品合集》 《MyBatis 实现原理与源码解析 —— 精品合集》
《Spring MVC 实现原理与源码解析 —— 精品合集》 《数据库实体设计合集》
《Spring Boot 实现原理与源码解析 —— 精品合集》 《Java 面试题 + Java 学习指南》

摘要: 原创出处 https://www.jianshu.com/p/82b98f037034 「阿飞」欢迎转载,保留摘要,谢谢!


🙂🙂🙂关注**微信公众号:【芋道源码】**有福利:

  1. RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表
  2. RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址
  3. 您对于源码的疑问每条留言将得到认真回复。甚至不知道如何读源码也可以请教噢
  4. 新的源码解析文章实时收到通知。每周更新一篇左右
  5. 认真的源码交流微信群。

艿艿粗布统计了下,代码量大概 1w 多行。艿艿后续会更新源码解析到公众号中。

FESCAR:阿里重磅开源分布式事务解决方案

FESCAR名字的由来:Fast & EaSy Commit And Rollback

  • FESCAR是啥?

被用在微服务架构中的高性能分布式事务解决方案。

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

让我们想象一个传统的应用,由3个模块构成,并且这三个模块使用同一个数据源。很明显,数据一致性由数据库提供的本地事务就能搞定。

local transaction

然而,一切美好都被在微服务架构中被打破。3个模块变成了3个服务,每个服务有独立的数据源(参考https://microservices.io/patterns/data/database-per-service.html)。每个服务的数据一致性由本地事务保证,但是跨服务的业务呢?如下图所示,某个业务既需要操作库存(Storage),又需要操作订单(Order),还需要操作账户(Account)。

distribution transaction

  • FESCAR怎么做?

distribution transaction

首先,如果定义分布式事务?我们认为一个分布式事务是由多个分支事务组成的全局事务,通常来说,分支事务就是本地事务。

define distribution transaction

FESCAR有三个基本组件:

  • Transaction Coordinator(TC):事务协调器,维护着全局事务和分支事务的状态, 它来决定全局的提交还是回滚。
  • Transaction Manager(TM): 事务管理器,定义全局事务的范围:开始一个全局事务,提交或者回滚一个全局事务。
  • Resource Manager(RM): 资源管理器,Manage resources that branch transactions working on, talk to TC for registering branch transactions and reporting status of branch transactions, and drive the branch transaction commit or rollback.

img

FESCAR 3 components

一个典型的FESCAR维护的分布式事务的生命周期如下:

  1. TM向TC请求开启一个全局事务,TC生成一个XID,一个表示全局事务的唯一ID;
  2. 通过微服务的调用链,XID被广播出去(图中绿色线路);
  3. RM向TC注册一个属于XID表示的分布式事务下的本地事务(红色箭头);
  4. TM向TC询问是提交还是回滚XID表示的全局事务;
  5. TC驱动XID表示的全局事务下的所有分支事务,完成提交或者回滚动作。

如下图所示:

lifecycle

参考:https://github.com/alibaba/fescar

文章目录