首页 > 其他分享 >分布式事务的原理(经典面试题)

分布式事务的原理(经典面试题)

时间:2024-10-14 16:22:42浏览次数:3  
标签:方案 面试题 管理器 事务 经典 一致性 节点 分布式

大家好,我是 ZHF,一个工作了 5 年的 Java 程序员 在互联网企业的面试中,经常会问到分布式、高并发下的技术问题,其中分布式事务问题就是其中之一。 下面我们来看一下,关于分布式事务的解决方案,一般人和高手是如何回答这个问题的! 一般人的回答: 分布式事务,就是多个事务分布在不同的节点上导致的数据一致性问题。 我们公司的业务基本上都没涉及分布式事务问题,不过我知道像开源的框架 Seata,就是用来解决分布式事务的框架。 然后,分布式事务有一个强一致性和弱一致性问题,强一致性会影响性能,弱一致性会影响数据的准确性。 这样的回答没错但是不够突出不能让面试官惊喜,下面我们来看一下高手的回答 高手的回答: 分布式事务是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于分布式系统的不同节点之上。 比如大型的电商系统中的下单场景,会涉及扣库存、优惠促销计算、订单 ID 生成。通常情况下,库存、促销、主键生成策略都位于不同的服务器和数据库表中。 下单接口的成功与否,不仅取决于本地节点的数据库操作,而且还依赖第三方系统的结果,这时候分布 式事务就保证这些操作要么全部成功,要么全部失败。 因此,本质上来说,分布式事务就是为了保证不同数据库的数据一致性。 基于 CAP 定理可以知道,对于上述情况产生的分布式事务问题,我们要么采用强一致性方案、要么采用弱一致性方案。

  •  所谓强一致性,就是指通过第三方的事务管理器来协调多个节点的事务,保证每个节点的事务达到 同时成功和同时失败,为了实现这样一个需求,我们会引入 Xopen/DTP 模型提供的 XA 协议,基 于 2pc 或者 3pc 的方式来实现。但是,在如果全局事务管理器中的多个节点中,如果任意一个节 点在进行事务提交确认时,由于网络通信延迟导致阻塞,就会影响到所有节点事务的提交,而这个 阻塞过程也会影响阻塞用户的请求线程,这对于用户体验以及整体性能的影响较大。
  • 而弱一致性方案,就是针对强一致性方案所衍生出来性能和数据一致性平衡的一个方案,简单来说 就是损失掉强一致性,数据在某一个时刻会存在不一致的状态,但是最终这些数据会达成一致。这样的好处是提升了系统的性能。
在弱一致性方案中,常见的解决方案: 1. 使用分布式消息队列,来实现最终一致性 2. 基于 TCC 事务,通过演进版本的二阶段提交实现最终一致性 3. 使用 Seata 事务框架,它提供了多种事务模式,如 AT、XA、Saga、TCC 等 以上就是我对分布式事务的理解。

标签:方案,面试题,管理器,事务,经典,一致性,节点,分布式
From: https://blog.csdn.net/ZHFAZY/article/details/142921725

相关文章

  • ‌集群与集中式部署的主要区别,集群、分布式、集中式、伪分布式的概念与区别
    主要区别在于它们对资源的利用方式和系统架构的不同。‌集中式部署将所有计算资源和数据集中在一台或多台服务器上,而集群则是将多个服务器联合起来共同工作,以提高系统的可靠性、扩展性和性能。在集中式部署中,所有计算资源和数据都集中在一台或多台服务器上,通常是一台主机带多个......
  • 分布式事务之Seata的AT模型
    在Seata的事务管理中有三个重要的角色:TC(TransactionCoordinator)-事务协调者:维护全局和分支事务的状态,协调全局事务提交或回滚。TM(TransactionManager)-事务管理器:定义全局事务的范围、开始全局事务、提交或回滚全局事务。RM(ResourceManager)-资源管理器:管理分......
  • 初学Java基础Day18---面相对象之抽象类及其抽象方法,接口的使用及其面试题
    一,抽象类及其抽象方法的使用1.抽象方法:没有代码块,使用abstract修饰的方法,交给非抽象子类去实现注意:抽象方法必须在抽象类中。2.抽象类:使用abstract修饰3.代码实现://抽象类publicabstractclassPerson{//抽象方法publicabstractvoideat();}//在......
  • Java面试题———MyBatis篇
    目录1、Mybatis中#{}和${}的区别2、当实体类中的属性名和表中的字段名不一样,怎么办3、MyBatis动态SQL了解吗4、ResultType和ResultMap有什么区别1、Mybatis中#{}和${}的区别在Mybatis中#{}和${}都可以用于在sql语句中拼接参数,但是在使用方面有很多的区别1、处理方式......
  • Java面试题———Spring篇
    目录1、谈谈你对SpringIOC的理解2、Spring中有哪些依赖注入方式3、你用过哪些Spring注解4、SpringBean的作用域有几种5、Spring中的bean线程安全吗6、谈谈你对SpringAOP的理解7、AOP的代理有几种方式8、Spring的通知类型有哪些9、了解Spring的事务管理吗10、Spring......
  • 【分布式架构】分布式数据存储
    一、写在前面从这篇文章你可以学习到分布式架构中常见的数据存储架构模式以及Mysql的常见架构模式原创不易,如果对您有帮助麻烦点赞+关注谢谢~二、分布式存储架构模式单体主备主从(读写分离)分区(分库分表)存储架构一般都是上面4个,单体和主备没有讨论的必要,实现比较简单......
  • 《深入理解分布式事务与Seata解决方案》
    分布式事务-重要1.数据库的事务1、事务概念事务是一个完整的,不可分割操作单元。整个事务要么全部执行成功,要么全部执行失败。事务具备4个特性:ACIDA:原子性【】C:一致性【数据的一致性:事务开始前和事务结束后,数据总量不变】I:隔离性【事务相互隔离,互不影响】D:持久性【事务一......
  • 什么是分布式事务?使用Seata有哪些解决方案?Seata的AT模式的执行流程
    什么是分布式事务?简单来说:在分布式系统中出现的事务问题,称为分布式事务。为什么会出现分布式事务:一个分布式事务流程图在这个业务中有3个数据库连接,就没有办法做到全局的事务控制。这就是分布式事务问题分布式事务产生的情况有两种:​ 1.业务跨多个服务实现​ 2.业务跨多......
  • 2024Java最新面试题总结(针对于一些小厂、中厂)
    这是根据个人面试经历总结出来的一些经验希望可以帮助到有需要的人。面试的时候,会先让你进行自我介绍,这个大家准备一两分钟的面试稿就可以。然后就是正式面试,面试官一般是两个人以上,开始,面试官会先提问一些基本知识,很基础,基本这个大家是没什么问题的,都可以回答应对。最重要的......
  • 学习之面试题:单例模式
    什么是单例模式?单例模式是一种设计模式,它保证一个类仅有一个实例,并提供一个全局访问点用于访问该实例。其主要目的是控制共享资源的访问。为什么我们需要单例模式?单例模式可以用于控制资源的消耗,避免频繁创建和销毁对象,同时也可以简化系统配置,使得某些类的对象在整个系统......