Seata简介
什么是Seata
Seata是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。
在Seata开源之前,其内部版本在阿里系内部一直扮演着应用架构层数据一致性的中间件角色,帮助经济体平稳的度过历年的双11,对上层业务进行了有力的技术支撑。经过多年沉淀与积累,其商业化产品先后在阿里云、金融云上售卖。2019.1为了打造更加完善的技术生态和普惠技术成果,Seata正式宣布对外开源,未来Seata将以社区共建的形式帮助用户快速落地分布式事务解决方案。
Seata官网地址:
https://seata.io/
微服务中的分布式事务问题
单体应用
让我们想象一个传统的单体应用程序,它的业务由3个模块组成。他们使用单一的本地数据源。自然地,数据的一致性会由本地事务来保证。
如下图示:
微服务架构
而微服务架构中的情况却发生了变化,上面提到的3个模块被设计为3个独立的服务(且每个服务单独数据源)。每个服务中的数据一致性自然由本地事务保证。
但是整个业务逻辑范围呢?
Seata分布式事务解决方案
如下图示:
首先,如何定义分布式事务?
我们说,分布式事务是由一批分支事务组成的全局事务,而通常情况下分支事务就是本地事务。
Seata Framework中一共有三个角色:
- Transaction Coordinator(TC):事务协调器,维护全局和分支事务的状态,驱动全局提交和回滚。
- Transaction Manager(TM):定义全局事务的范围:开始一个全局事务,提交或回滚一个全局事务。
- Resource Manager(RM):管理分支事务处理的资源,与TC对话以注册分支事务和报告分支事务的状态,并驱动分支事务的提交或回滚。
seata-framework.png
Seata托管分布式事务的典型生命周期:
- TM要求TC开始新的全局事务。TC生成一个代表全局事务的XID。
- XID通过微服务的调用链传播。
- RM将本地事务作为XID对应的全局事务的一个分支注册到TC。
- TM请求TC提交或回滚XID对应的全局事务。
- TC驱动XID对应的全局事务下的所有分支事务完成分支提交或回滚。
原文地址:https://github.com/seata/seata
(完)