最新分布式事务中间件 Seata学习系列之一:初识Seata(2),最新整理

最后总结

搞定算法,面试字节再不怕,有需要文章中分享的这些二叉树、链表、字符串、栈和队列等等各大面试高频知识点及解析

最后再分享一份终极手撕架构的大礼包(学习笔记):分布式+微服务+开源框架+性能优化

image

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

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

我的面试宝典:一线互联网大厂Java核心面试题库

以下是我个人的一些做法,希望可以给各位提供一些帮助:

整理了很长一段时间,拿来复习面试刷题非常合适,其中包括了Java基础、异常、集合、并发编程、JVM、Spring全家桶、MyBatis、Redis、数据库、中间件MQ、Dubbo、Linux、Tomcat、ZooKeeper、Netty等等,且还会持续的更新…可star一下!

image

283页的Java进阶核心pdf文档

Java部分:Java基础,集合,并发,多线程,JVM,设计模式

数据结构算法:Java算法,数据结构

开源框架部分:Spring,MyBatis,MVC,netty,tomcat

分布式部分:架构设计,Redis缓存,Zookeeper,kafka,RabbitMQ,负载均衡等

微服务部分:SpringBoot,SpringCloud,Dubbo,Docker

image

还有源码相关的阅读学习

image

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

n.net/forums/4f45ff00ff254613a03fab5e56a57acb)收录**

需要这份系统化的资料的朋友,可以点击这里获取

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值