一线大厂面试真题——请说一下分布式事务的理解和解决方案

目录

考察目的

问题分析

问题解答


考察目

这个题考察难度不算大,考察4年以上Java开发经验的同学

分布式事务主要涉及到跨库事务处理问题,除了考察求职者对这方面知识的了解外,还想了解一下求职者的实际处理经验。

题分析

通常情况下,传统的关系型数据库只能保证单个数据库中多个数据表的事务特性。一旦多个SQL作涉及到多个数据库,这类的事务无法解决跨库事务问题。

在传统架构下,这种问题出现的情况非常少,但是在分布式微服务架构中,分布式事务的问题变得更加突出。

以电商项目为例,假设我们要实现电商系统中的支付功能,它的实现流程如下(如图)。在微服务架构中,应用被拆分成以业务模块为单元的服务,并且每个服务有自己的数据库系统。

当用发起支付时,会涉及到以下几个事务操作:

1.   创建支付订

2.   从资金服务中扣除余额

3.   从红包服务中扣除余

4.   更新支付结

这是四个典型的事务操作,而且这些操作分别属于不同的数据库,最终期望的结果是希三个服务所对应的数据是一致的,很显然传统的事务无法解决这个问题!

此就产生了分布式事务的问题,所谓分布式事务,就是事务具有分布式特性,简单理解就是如何实现多个跨数据库的小事务组成的大事务的ACID特性。

问题解答

布式事务是指存在多个跨库事务的事务一致性问题,

或者是指在分布式架构下由多个应用节点组成的多个事务之间的事务一致性问题。

目前主流的分布式事务解决方案有两种

    1、一种是基于XA协议实现的强一致性事务方案,比如Atomikos、Seata中的XA事务模型基于CAP理论可以知,如果要保证分布式事务的强一致性,就必然会带来性能的影响从而影响到可用性。所以强一致性事务性能会比较低。

    2、另一种是基于BASE理论下的弱一致性事务解决方案,比如TCC事务模型、基于可靠性消息的最终一致性方案、Seata的Saga事务模型等。

最终一致性事务损失了数据的强一致性,通过异步补偿的方式达到数据的最终一致因此在能上比较好,适用于并发量比较高的场景。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值