花了三个小时打磨这道JAVA面试题,谈谈你对Seata的理解?

简介: Seata在大厂也是属于高频的面试题,有一位3年工作经验的小伙伴被问到一道这样的面试题,说“谈谈你对Seata的理解”。那么,今天我给大家来聊一聊。

Seata在大厂也是属于高频的面试题,有一位3年工作经验的小伙伴被问到一道这样的面试题,说“谈谈你对Seata的理解”。那么,今天我给大家来聊一聊。

1、Seata是什么

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

1bcefa01531ca65c1e9e557150390a56.png

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

image.png


1、强一致性,

acba20b94296bfa701120c54b152688f.png

就是所有的事务参与者要么全部成功,要么全部失败,全局事务协调者需要知道每个事务参与者的执行状态,再根据状态来决定数据的提交或者回滚!

dc37590e91224f86b8116060eb1909e8.png

2、最终一致性,也叫弱一致性,

726662bbcde05f3de3b8ae42a44e6a8b.png

也就是多个网络节点的数据允许出现不一致的情况,但是在最终的某个时间点会达成数据一致。

f0e7432067faa69ca590b4167e4acbc0.png

基于 CAP 定理我们可以知道,强一致性方案对于应用的性能和可用性会有影响,所以对于数据一致性要求不高的场景,就会采用最终一致性算法。


在分布式事务的实现上,对于强一致性,我们可以通过基于 XA 协议下的二阶段提交来实现,对于弱一致性,可以基于 TCC 事务模型、可靠性消息模型等方案来实现。市面上有很多针对这些理论模型实现的分布式事务框架,我们可以在应用中集成这些框架来实现分布式事务。而 Seata 就是其中一种,它是阿里开源的分布式事务解决方案,提供了高性能且简单易用的分布式事务服务。

1、Seata事务模式

d7be3c5c2d97d9383225b9e247695f9b.png

Seata 中封装了四种分布式事务模式,分别是:AT模式、TCC 模式、Saga 模式和XA 模式。下面我给大家详细介绍一下:


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

image.png


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

image.png


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

image.png


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

image.png


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


以上就是我对Seata的理解!面试的时候经常会遇到这种宽泛的面试题,一般就是问“谈谈你对XX的理解”。遇到这类面试题,先不用慌,我告诉大家一个回答的思路。可以按照技术发展的逻辑,就是先在自己的大脑中的建立一个知识索引,然后基于索引来定位你的知识。

image.png


比如,对于这类问题,一般可以建立一个这样的思维逻辑:


它是什么?


它能解决什么问题?


它有哪些特点和优势?


它的核心原理是什么?


为什么它能解决这类问题?


大家对照这个逻辑去回答这类面试题,是不是感觉思路异常更清晰呢?


我是被编程耽误的文艺Tom,关注我,面试不再难!

最后,我把往期分享的面试题全部整理成了1份10W字的文档,希望能够以此来提高各位粉丝的通过率

ee90d9963df444db88b33d6e798a5b94.gif

相关文章
|
2天前
|
Java
【Java多线程】面试常考 —— JUC(java.util.concurrent) 的常见类
【Java多线程】面试常考 —— JUC(java.util.concurrent) 的常见类
12 0
|
2天前
|
安全 Java 程序员
【Java多线程】面试常考——锁策略、synchronized的锁升级优化过程以及CAS(Compare and swap)
【Java多线程】面试常考——锁策略、synchronized的锁升级优化过程以及CAS(Compare and swap)
6 0
|
4天前
|
Java
三个可能的Java面试题
Java垃圾回收机制自动管理内存,回收无引用对象的内存,确保内存有效利用。多态性允许父类引用操作不同子类对象,如Animal引用可调用Dog的方法。异常处理机制通过try-catch块捕获和处理程序异常,例如尝试执行可能导致ArithmeticException的代码,catch块则负责处理异常。
26 9
|
15天前
|
Java
【JAVA面试题】static的作用是什么?详细介绍
【JAVA面试题】static的作用是什么?详细介绍
|
15天前
|
Java
【JAVA面试题】final关键字的作用有哪些
【JAVA面试题】final关键字的作用有哪些
|
15天前
|
JavaScript 前端开发 Java
【JAVA面试题】什么是引用传递?什么是值传递?
【JAVA面试题】什么是引用传递?什么是值传递?
|
15天前
|
安全 Java
【JAVA面试题】什么是对象锁?什么是类锁?
【JAVA面试题】什么是对象锁?什么是类锁?
|
15天前
|
存储 自然语言处理 Java
【JAVA面试题】什么是代码单元?什么是码点?
【JAVA面试题】什么是代码单元?什么是码点?
|
15天前
|
Java 程序员
【JAVA面试题】基本类型的强制类型转换是否会丢失精度?引用类型的强制类型转换需要注意什么?
【JAVA面试题】基本类型的强制类型转换是否会丢失精度?引用类型的强制类型转换需要注意什么?
|
15天前
|
Java
【JAVA面试题】什么是深拷贝?什么是浅拷贝?
【JAVA面试题】什么是深拷贝?什么是浅拷贝?