网站首页 > 精选教程 正文
考察目的
这个问题考察难度不算大,考察4年以上Java开发经验的同学。
分布式事务主要涉及到跨库事务处理问题,除了考察求职者对这方面知识的了解以外,还想了解一下求职者的实际处理经验。
问题分析
通常情况下,传统的关系型数据库只能保证单个数据库中多个数据表的事务特性。
一旦多个SQL操作涉及到多个数据库,这类的事务无法解决跨库事务问题。
在传统架构下,这种问题出现的情况非常少,但是在分布式微服务架构中,分布式事务的问题变得更加突出。
以电商项目为例,假设我们要实现电商系统中的支付功能,它的实现流程如下。
在微服务架构中,应用被拆分成以业务模块为单元的服务,并且每个服务有自己的数据库系统。
当用户发起支付时,会涉及到以下几个事务操作:
- 创建支付订单
- 从资金服务中扣除余额
- 从红包服务中扣除余额
- 更新支付结果
这是四个典型的事务操作,而且这些操作分别属于不同的数据库,最终期望的结果是希望这三个服务所对应的数据是一致的,很显然传统的事务无法解决这个问题!
因此就产生了分布式事务的问题,所谓分布式事务,就是事务具有分布式特性,简单理解就是如何实现多个跨数据库的小事务组成的大事务的ACID特性。
下面来看看高手的回答。
高手:
分布式事务是指存在多个跨库事务的事务一致性问题,或者是指在分布式架构下由多个应用节点组成的多个事务之间的事务一致性问题。
目前主流的分布式事务解决方案有两种
- 一种是基于XA协议实现的强一致性事务方案,比如Atomikos、Seata中的XA事务模型。
基于CAP理论可以知道,如果要保证分布式事务的强一致性,就必然会带来性能的影响从而影响到可用性。
所以强一致性事务性能会比较低。 - 另一种是基于BASE理论下的弱一致性事务解决方案,比如TCC事务模型、基于可靠性消息的最终一致性方案、Seata的Saga事务模型等。
最终一致性事务损失了数据的强一致性,通过异步补偿的方式达到数据的最终一致。
因此在性能上比较好,适用于并发量比较高的场景。
总结
大家知道怎么回答了吗?
如果你喜欢我的作品,记得点赞收藏加关注哦
需要高手面试文档合集(附赠大厂内部十万字面试文档)或者有不懂的技术面试题想咨询的小伙伴可以后台私信发送【Mic】或者直接jia\ /:mic6369。
- 上一篇: java高频面试题整理
- 下一篇: Java架构师大厂面试致命十连问,你接得住吗?
猜你喜欢
- 2025-03-06 阿里大数据技术架构师整理分享java面试核心知识点框架篇文档
- 2025-03-06 2020最新拼多多Java面试题(现场五面),全面涵盖Java高级到高并发
- 2025-03-06 探索Jenkins:25道面试题及答案之旅
- 2025-03-06 面试完腾讯,总结了这12道Zookeeper面试题
- 2025-03-06 面试20K的职位必须要熟悉的Java线程池面试题
- 2025-03-06 独家Java架构师题,面试再不过找我来要赔偿,谢谢
- 2025-03-06 2023年史上最全的中高级Java工程师面试题汇总!
- 2025-03-06 最全Java架构师130面试题:微服务、高并发、大数据...
- 2025-03-06 每天一篇Java面试之Redis热门面试答案汇总
- 2025-03-06 Spring Cloud的18道面试题及答案(收藏版)
你 发表评论:
欢迎- 04-11Java面试“字符串三兄弟”String、StringBuilder、StringBuffer
- 04-11Java中你知道几种从字符串中找指定的字符的数量
- 04-11探秘Java面试中问的最多的String、StringBuffer、StringBuilder
- 04-11Python字符串详解与示例(python字符串的常见操作)
- 04-11java正则-取出指定字符串之间的内容
- 04-11String s1 = new String("abc");这句话创建了几个字符串对象?
- 04-11java判断字符串中是否包含某个字符
- 04-11关于java开发中正确的发牌逻辑编写规范
- 最近发表
-
- Java面试“字符串三兄弟”String、StringBuilder、StringBuffer
- Java中你知道几种从字符串中找指定的字符的数量
- 探秘Java面试中问的最多的String、StringBuffer、StringBuilder
- Python字符串详解与示例(python字符串的常见操作)
- java正则-取出指定字符串之间的内容
- String s1 = new String("abc");这句话创建了几个字符串对象?
- java判断字符串中是否包含某个字符
- 关于java开发中正确的发牌逻辑编写规范
- windows、linux如何后台运行jar(并且显示进程名)
- 腾讯大佬私人收藏,GitHub上最受欢迎的100个JAVA库,值得学习
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)