《Dubbo 实现原理与源码解析 —— 精品合集》 《Netty 实现原理与源码解析 —— 精品合集》
《Spring 实现原理与源码解析 —— 精品合集》 《MyBatis 实现原理与源码解析 —— 精品合集》
《Spring MVC 实现原理与源码解析 —— 精品合集》 《数据库实体设计合集》

摘要: 原创出处 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

文章目录