分布式事务中间件 Seata学习系列之一:初识Seata

一、什么是分布式事务


事务的概念大家应该都比较清楚了,这里简单回顾下。完成一项事情需要好几个操作,而事务就是将这些操作包裹成一个不可分割的执行单元,在这个执行单元中,只有当所有的操作都正常完成,这个执行单元才可以进行完整提交。但是如果该单元中有任何的操作失败,则整个单元无法提交,需要回滚至执行操作之前的状态, 可以这么说事务是天蝎座的,要么就要全部的爱,要么就不爱,从来不是半糖主义。正所谓要么什么都不做,要么就做全套(All or Nothing)

在这里插入图片描述

所谓分布式事务就是事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同服务器节点之上。简单来说就是完成事务中的各个操作都是分布在不同的服务器节点上,分布式事务需要保证这些不同服务器的给个操作要么都成功,要么都失败。

分布式事务的产生主要是伴随着微服务的高速发展而来的,服务节点的不断扩充以及资源节点的分布式为分布式事务问题的产生奠定物理基础。

二、当前分布式事务痛点


既然分布式事务使我们在微服务改造以及开拓路上不得不面对的问题,那么目前针对该问题都有哪些解决方案呢?我们一起来看下。分布式事务的解决方案主要可以分为对使用方业务有侵入性的以及无侵入性的。

1、基于数据库 XA 协议的两段式提交(2PC)方案

该方案是一种业务无侵入的实现方案。它要求本地数据库支持 XA 协议,且由于 XA 协议自身的特点,它会造成事务资源长时间得不到释放,锁定周期长,而且在应用层上面无法干预,因此它性能很差,它的存在相当于七伤拳那样“伤人七分,损己三分”,因此在互联网项目中并不是很流行这种解决方案。

使用两阶段提交来完成一个全局事务, XA 规范的基础是两阶段提交协议。

第一阶段是表决阶段,所有参与者都将本事务能否成功的信息反馈发给协调者;第二阶段是执行阶段,协调者根据所有参与者的反馈,通知所有参与者,步调一致地在所有分支上提交或者回滚。

在这里插入图片描述

在这里插入图片描述

2、TCC(Try-Confirm-Cancel)方案

TCC 其实就是采用的补偿机制,其核心思想是:针对每个操作,都要注册一个与其对应的确认和补偿(撤销)操作。它分为三个阶段:

(1)try

一般都是锁定某个资源,设置一个预备类的状态,冻结部分数据,。简单的说就是通知各个业务被调方预留相关的业务资源。

(2)confirm

确认执行各个业务方的资源操作

(2)cancel

取消执行每个业务方的资源操作

三、Seata是何方神圣


1、什么是Seata

Seata(Simpe Extensible Autonomous Transcaction Architecture)那么什么样的分布式事务解决方案才是好呢,我想应该是对于现有业务无侵入同时满足高性能的解决方案。Seata`便是一种高性能、方便使用且对业务零侵入的针对微服务的一种分布式事务解决方案。

如下图所示,可以看下Seata是如何解决分布式事务的,如下所示,Seata 的设计思路是将一个分布式事务可以理解成一个全局事务,下面挂了若干个分支事务,而一个分支事务是一个满足 ACID 的本地事务,因此我们可以操作分布式事务像操作本地事务一样。

在这里插入图片描述

Seata中包含了三种基本的组件来处理全局事务与分支事务的状态维护与管理,分别如下:

(1)Transaction Coordinator(TC):事务协调器。维护全局和分支事务的状态,驱动全局事务进行提交或回滚。

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

(3)Resource Manager(RM):资源管理器。管理处于运作的分支事务的资源,与事务协调器协作,包括注册分支事务以及报告分支事务的状态,驱动分支事务的提交与回滚。

如下图所示:

在这里插入图片描述

我们一起看下Seata中的全局事务的大致执行步骤是怎样的,如下:

(1)TMTC 申请开启一个全局分布式事务,TC 创建全局事务后返回全局唯一的 XIDXID 会在涉及微服务的整个全局事务的上下文中进行传播;

(2)RMTC 注册本地分支事务,该分支事务归属于拥有相同 XID 的全局事务;

(3)TMTC 发起全局事务的提交或回滚,对应于响应的XID

(4)TC 调度并且驱动 XID 下的分支事务完成提交或者回滚。
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

感受:

其实我投简历的时候,都不太敢投递阿里。因为在阿里一面前已经过了字节的三次面试,投阿里的简历一直没被捞,所以以为简历就挂了。

特别感谢一面的面试官捞了我,给了我机会,同时也认可我的努力和态度。对比我的面经和其他大佬的面经,自己真的是运气好。别人8成实力,我可能8成运气。所以对我而言,我要继续加倍努力,弥补自己技术上的不足,以及与科班大佬们基础上的差距。希望自己能继续保持学习的热情,继续努力走下去。

也祝愿各位同学,都能找到自己心动的offer。

分享我在这次面试前所做的准备(刷题复习资料以及一些大佬们的学习笔记和学习路线),都已经整理成了电子文档

拿到字节跳动offer后,简历被阿里捞了起来,二面迎来了P9"盘问"

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
Gg-1713537762785)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值