谈谈Seata

  1. 在微服务架构下,由于数据库和应用服务的拆分,导致原本一个事务单元中的多个 DML 操作, 变成了跨进程或者跨数据库的多个事务单元的多个 DML 操作, 而传统的数据库事务无法解决这类的问题,所以就引出了分布式事务的概念。

DDL(数据定义语言),数据定义语言是由SQL语言集中负责数据结构定义与数据库对象定义的语言,并且由CREATE、ALTER、DROP和TRUNCATE四个语法组成
DML(数据操纵语言),数据操纵语言全称是Data Manipulation Language,主要是进行插入元组、删除元组、修改元组的操作。主要有insert、update、delete语法组成。
DQL(数据查询语言),数据查询语言全称是Data Query Language,所以是用来进行数据库中数据的查询的,即最常用的select语句
DCL(数据控制语言),数据控制语言:Data Control Language。用来授权或回收访问数据库的某种特权,并控制数据库操纵事务发生的时间及效果,能够对数据库进行监视。

  1. 分布式事务本质上要解决的就是跨网络节点的多个事务的数据一致性问题,业内常见的解决方法有两种

     a. 强一致性,就是所有的事务参与者要么全部成功,要么全部失败,全局事务协调者需要知道每个事务参与者的执行状态,再根据状态来决定数据的提交或者 回滚! 
    
     b. 最终一致性,也叫弱一致性,也就是多个网络节点的数据允许出现不一致的情况,但是在最终的某个时间点会达成数据一致。 基于 CAP 定理我们可以知道,强一致性方案对于应用的性能和可用性会有影响,所以对于数据一致性要求不高的场景,就会采用最终一致性算法。
    

CAP:

Consistency(一致性)
Availability(可用性)
Partition tolerance(分区容忍性)
3. 在分布式事务的实现上,对于强一致性,我们可以通过基于 XA 协议下的二阶段提交来实现,对于弱一致性,可以基于 TCC 事务模型、可靠性消息模型等方案来实 现。


1.XA协议
是X/OPEN 提出的分布式事务处理规范。XA则规范了TM与RM之间的通信接口,在TM与多个RM之间形成一个双向通信桥梁,从而在多个数据库资源下保证ACID四个特性。目前知名的数据库,如Oracle, DB2,mysql等,都是实现了XA接口的,都可以作为RM。

XA是数据库的分布式事务,强一致性,在整个过程中,数据一张锁住状态,即从prepare到commit、rollback的整个过程中,TM一直把持折数据库的锁,如果有其他人要修改数据库的该条数据,就必须等待锁的释放,存在长事务风险。

两阶段提交(Two-phase Commit,2PC)
是XA用于在全局事务中协调多个资源的机制
顾名思义,两阶段提交在处理分布式事务时分为两个阶段:voting(投票阶段,有的地方会叫做prepare阶段)和commit阶段。

两阶段提交协议解决的是分布式数据库数据强一致性问题

三阶段提交(3PC)
三阶段提交协议在协调者和参与者中都引入超时机制,并且把两阶段提交协议的第一个阶段拆分成了两步:询问,然后再锁资源,最后真正提交。三阶段提交的三个阶段分别为:can_commit,pre_commit,do_commit。


  1. 市面上有很多针对这些理论模型实现的分布式事务框架,我们可以在应用中集成这些框架来实现分布式事务。 而 Seata 就是其中一种,它是阿里开源的分布式事务解决方案,提供了高性能且简单易用的分布式事务服务。

Seata 中封装了四种分布式事务模式,分别是:

(1) AT 模式,是一种基于本地事务 + 二阶段协议来实现的最终数据一致性方案,也是 Seata 默认的解决方案

在这里插入图片描述

    (2)TCC 模式,TCC 事务是 Try、Confirm、Cancel 三个词语的缩写,
    简单理解就是 把一个完整的业务逻辑拆分成三个阶段,然后通过事务管理器在业务逻辑层面根据 
    每个分支事务的执行情况分别调用该业务的 Confirm 或者 Cacel 方法。

在这里插入图片描述

    (3)Saga 模式,Saga 模式是 SEATA 提供的长事务解决方案,在 Saga 模式中,
    业务 流程中每个参与者都提交本地事务,当出现某一个参与者失败则补偿前面已经成功的参与者。

在这里插入图片描述

        (4)XA 模式,XA 可以认为是一种强一致性的事务解决方法,它利用事务资源(数据库、 消息服务等)
        对 XA 协议的支持,以 XA 协议的机制来管理分支事务的一种 事务 模式。

在这里插入图片描述

从这四种模型中不难看出,在不同的业务场景中,我们可以使用 Seata 的不同事务模型 来解决不同业务场景中的分布式事务问题,因此我们可以认为 Seata 是一个一站式的分布式事务解决方案。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值