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

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

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

  • FESCAR是啥?

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

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

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

 

[[255360]]
local transaction

 

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

 

[[255361]]

distribution transaction

 

  • FESCAR怎么做?

 

[[255362]]
distribution transaction

 

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

 

[[255363]]

define distribution transaction

 

FESCAR有三个基本组件:

  • Transaction Coordinator(TC):事务协调器,维护着全局事务和分支事务的状态, 它来决定全局的提交还是回滚。

  • Transaction Manager(TM): 事务管理器,定义全局事务的范围:开始一个全局事务,提交或者回滚一个全局事务。

  • Resource Manager(RM): 资源管理器,管理分支事务处理的资源,与TC通信以注册分支事务并报告分支事务的状态,并驱动分支事务提交或回滚.

 

[[255364]]
FESCAR 3 components

 

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

  1. TM向TC请求开启一个全局事务,TC生成一个XID,一个表示全局事务的***ID;

  2. 通过微服务的调用链,XID被广播出去(图中绿色线路);

  3. RM向TC注册一个属于XID表示的分布式事务下的本地事务(红色箭头);

  4. TM向TC询问是提交还是回滚XID表示的全局事务;

  5. TC驱动XID表示的全局事务下的所有分支事务,完成提交或者回滚动作。

如下图所示:

 

[[255365]]
lifecycle

 

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

责任编辑:张燕妮 来源: 阿飞的博客
相关推荐

2023-11-30 07:19:08

.NET开源

2020-05-28 09:35:05

分布式事务方案

2023-09-14 15:44:46

分布式事务数据存储

2024-03-26 12:08:53

分布式事务存储

2010-07-21 13:53:41

SQL Server分

2019-07-25 15:32:35

分布式事务微服务系统架构

2021-09-28 09:43:11

微服务架构技术

2024-12-09 09:35:00

2024-06-13 08:04:23

2019-09-09 10:09:51

分布式事务 数据库

2023-03-05 18:23:38

分布式ID节点

2021-06-28 10:03:44

分布式数据库架构

2020-03-31 16:13:26

分布式事务方案TCC

2023-08-17 10:23:07

扩展方案

2020-09-23 09:52:01

分布式WebSocketMQ

2010-06-30 17:27:32

SQL Server数

2022-05-30 10:37:35

分布式事务反向补偿

2021-06-25 10:35:58

分布式代码Java

2022-03-24 07:51:27

seata分布式事务Java

2023-09-28 08:39:23

分布式锁Redis
点赞
收藏

51CTO技术栈公众号