龙空技术网

「Java面试题」惊呆下巴!请说一下分布式事务的理解和解决方案

跟着Mic学架构 588

前言:

现在各位老铁们对“java面试具体场景的解决方案”大体比较珍视,我们都需要知道一些“java面试具体场景的解决方案”的相关资讯。那么小编同时在网络上搜集了一些关于“java面试具体场景的解决方案””的相关内容,希望同学们能喜欢,兄弟们快快来学习一下吧!

考察目的

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

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

问题分析

通常情况下,传统的关系型数据库只能保证单个数据库中多个数据表的事务特性。

一旦多个SQL操作涉及到多个数据库,这类的事务无法解决跨库事务问题。

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

以电商项目为例,假设我们要实现电商系统中的支付功能,它的实现流程如下。

在微服务架构中,应用被拆分成以业务模块为单元的服务,并且每个服务有自己的数据库系统。

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

创建支付订单从资金服务中扣除余额从红包服务中扣除余额更新支付结果

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

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

下面来看看高手的回答。

高手:

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

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

一种是基于XA协议实现的强一致性事务方案,比如Atomikos、Seata中的XA事务模型。

基于CAP理论可以知道,如果要保证分布式事务的强一致性,就必然会带来性能的影响从而影响到可用性。

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

最终一致性事务损失了数据的强一致性,通过异步补偿的方式达到数据的最终一致。

因此在性能上比较好,适用于并发量比较高的场景。总结

大家知道怎么回答了吗?

如果你喜欢我的作品,记得点赞收藏加关注哦

需要高手面试文档合集(附赠大厂内部十万字面试文档)或者有不懂的技术面试题想咨询的小伙伴可以后台私信发送【Mic】或者直接jia\ /:mic6369。

mic6369

标签: #java面试具体场景的解决方案