SEATA第一篇:简介

​    Seata 是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。这句话是官方描述,有两个知识点:分布式,事物。

     在了解seata之前我们先说下分布式和事物。

分布式:

     分布式是从原来单一服务演变过来的。

     单一服务臃肿,耦合,扩展性差等缺点,当某个功能点挂了全盘皆挂。当然优点是结构简单,易于开发维护

当上述单一服务不满足于业务发展则出现了伪分布式的架构,通过Nginx进行反向代理,对于客户来说访问的地址是一样的,但是对于系统来说是分开处理的。优点是扩展性比单一服务强很多,但是同样所有功能都耦合到一个服务,臃肿,代码可读性差等缺点依然存在。

    接下来真正的分布式服务架构出现了,同时提出来一个微服务的概念,对原有臃肿的服务进行拆分,根据业务或者模块功能划分为多个服务,这种服务我们统称它为微服务。每个微服务之间可以互相依赖调用(rpc)同时也为上层服务提供支撑,当前市面比较流行的rpc框架有dubbo,spring cloud。分布式服务架构优点:可扩展性增强,系统高可用,代码划分清晰,耦合大大降低。当然随之而来的问题就出现了:部署复杂,运维难度提高,架构的学习曲线大,代码实现需要考虑更多东西等,当然本节讲的分布式事物也在其中

    

本章分布式架构不会再细讲,接下来我们铺垫下事物

事物:

        数据库事务( transaction)是访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。事务由事务开始与事务结束之间执行的全部数据库操作组成。

        上述文本是百科描述,总结为简单的一句话:不可分割的工作单位,具有原子性,一致性,持久性,隔离性。此章节不会去详细讲解事物的组成与原理。

        

使用seata的业务场景

        1.分布式数据库事物(一个服务操作多个数据库)。

                当一个数据库支撑不起我们的业务,我们会想办法优化数据库。通过业务将数据划分多个模块分别存放到不同的数据库中;或者对一张大表进行的横向切割。这样我们普通的事物失效了,夸库了。

                

         2.分布式服务事物(一次请求多个服务处理)

                在分布式服务中,一次业务处理需要多个服务参与完成。当夸服务普通的事物也会失效。举个很简单的场景:

小伙伴们可以自己想一下。

            3.分布式数据库+分布式服务事物

                       虽然可以在每个服务中加上事物,但也只能保障自身数据正确,我们现在需要的是数据的最终一致性,这三个服务中的数据要摸一起成功要摸一起失败,保障原子性。

分布式事物理论基础

        CAP和BASE大家想要深入了解看下网上资料,看着很高大上,其实就是一句话:最终一致性。

        为了实现最终一致性,我们引入2PC:两阶段提交协议。

            

             事物管理器协调资源管理器,第一阶段是各个资源管理器的准备阶段,都准备成功后进入到第二阶段提交,如果有一个准备失败则回滚。一阶段准备,二阶段提交/回滚。

 

seata术语

        

    TC - 事务协调者

    维护全局和分支事务的状态,驱动全局事务提交或回滚。

    TM - 事务管理器

    定义全局事务的范围:开始全局事务、提交或回滚全局事务。

    RM - 资源管理器

    管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。

 

    seata分为客户端和服务端,seata-server需要单独启动角色就是上述的TC。客户端分为TM和RM。

 

seata模式

    模式具体描述以及原理放到后面文章讲解这里只是说明适用场景

     AT模式

          基于支持本地 ACID 事务的关系型数据库。通过jdbc访问数据库,AT是通过拦截jdbc执行过程实现数据的提交回滚。当前支持的DB:mysql,oracle,PostgreSQL等。代码0入侵但数据源需要替换为seata指定的数据源。适用于执行逻辑不包含调用三方接口逻辑,这里举个返例:A逻辑中包含向A库插入数据且调用三方接口通知,回滚只能回滚数据库数据不能回滚三方接口业务。

     

    TCC模式

          同样基于两阶段提交,不过是调用自身实现的接口逻辑。自身需要实现三个接口:prepare,commit,rollback。prepare数据准备阶段,commit数据提交,rollback数据回滚。自身处理逻辑写在Prepare中,commit和rollback负责提交和回滚业务。代码入侵大,但适用性强。还是拿上述场景:A逻辑中包含向A库插入数据且调用三方接口通知,当某个步骤执行失败可以通过rollback对数据库数据回滚且调用三方接口进行回滚通知。适用大多数业务场景,但是改动成本以及维护成本比较高。

     

     SAGA模式

           saga适用于业务流程场且业务流程多,很多项目无法维护无法入侵试的编写代码。saga可以理解为一个外挂的状态机,对流程中每一个步骤都进行补偿。

 

好了小伙伴们,seata的简介到此结束了,有什么不足的地方大家踊跃提出来,下一章咱们讲解seata的安装启动,以及常见问题解决。希望大家多多关注我的公众号。
    

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值