分布式事务(7)之Seata简介

一、分布式事务解决方案

       2PC即两阶段提交协议,是将整个事务流程分为两个阶段,准备阶段(Prepare phase)、提交阶段(commit phase),2是指两个阶段,P是指准备阶段,C是指提交阶段。

  1. 准备阶段(Prepare phase)

  2. 提交阶段(commit phase)

        举例:张三和李四好久不见,老友约起聚餐,饭店老板要求先买单,才能出票。这时张三和李四分别抱怨近况不如意,囊中羞涩,都不愿意请客,这时只能AA。只有张三和李四都付款,老板才能出票安排就餐。但由于张三和李四都是铁公鸡,形成了尴尬的一幕:

        准备阶段:老板要求张三付款,张三付款。老板要求李四付款,李四付款。

        提交阶段:老板出票,两人拿票纷纷落座就餐。

        例子中形成了一个事务,若张三或李四其中一人拒绝付款,或钱不够,店老板都不会给出票,并且会把已收款退回。

  • 准备阶段(Prepare phase):事务管理器给每个事务参与者发送prepare消息,每个事务参与者在本地执行事务,并写本地的Undo/Redo日志,此时事务是没有提交的;
  • (Undo日志是记录修改前的数据,用于数据库回滚,Redo日志是记录修改后的数据,用于提交事务后写入数据文件)

  • 提交阶段(Commit pahse):如果事务管理器收到了所有参与者的执行失败或者是超时消息,直接给每一个事务参与者发送回滚(rollback)消息;否则,发送(commit)消息,事务参与者根据事务管理器的指令执行提交或者回滚事务,并释放资源。

具体步骤如下:

成功:

失败:

二、Seata 简介

        官网: Apache Seata

        概念: Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。

         在我们的微服务系统中,对应业务被对应的拆分成独立模块,在官方提供的架构图中,我们可以看出当前是三个服务:

  • 仓储服务:对给定的商品进行增删操作记录数量
  • 订单服务:根据采购者的需求创建订单
  • 账户服务:从用户账户中扣除余额、积分等

        在这套架构中,用户下单购买商品的业务,就需要三个服务来完成,每个服务内部的数据一致性由本地事务来保证,但是全局的数据一致性问题就没办法保证,Seata就是来进行解决这种问题的解决方案。

2.1Seata 术语

        要了解Seata,首先我们要了解一下Seata的几个关键的概念:

  • TC (Transaction Coordinator) - 事务协调者:维护全局和分支事务的状态,驱动全局事务的提交或者回滚;
  • TM(Transation Manager)事务管理者(事务发起者),定义全局事务的范围:开始全局事务、提交或回滚全局事务;
  • RM(Resource Manager)-资源管理器,就是每一个参与事务的微服务,负责分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务回滚或者提交。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值