分布式事务到是什么

Saber299 · 2024-8-20 22:44:50 · 287 次点击
今天面试了一家外包公司,被问到分布式事务场景,我回答系统对接和微服务应用之间业务数据同步,直接被面试官打断结束面试了,想问下大家分布式事务是什么?
举报· 287 次点击
登录 注册 站外分享
24 条回复  
justdoit123 小成 2024-8-22 13:59:28

分布式事务到是什么

@bthulu {哭笑脸} “打日志警告人工处理”,项目初期很受用。
Plutooo 小成 2024-8-22 10:19:42

分布式事务到是什么

先从事务讲起,单体服务的事务 ACID 由 spring 管理、数据库保证
然后讲微服务下,A 服务调用 B 服务,为什么原来能在单体用的事务不生效了
接着讲怎么解决,讲最终一致性(本地消息表、事务消息)、强一致性( 2PC 、TCC )
讲市面上对应的中间件 rocketmq ? seata ?
最后说你们项目怎么做的
bthulu 小成 2024-8-22 08:53:01

分布式事务到是什么

从来不用分布式事务, 都是调接口, 成功了就算了, 不成功, 就调回退接口, 回退接口也失败了, 打日志告警人工处理.
现实中哪有真正的分布式事务? 你一次捞到多个数据库连接, 依次开启事务, 执行 sql, 然后 commit 的时候, 有几个成功了, 有几个失败了, 你怎么办? 提供成功的事务, 哪个数据库支持回滚? 就算支持回滚, 也会出现有几个回滚成功了, 有几个回滚失败了, 这时候你又咋办?
mikasyou 小成 2024-8-21 14:44:34

分布式事务到是什么

事务和线程很相似,但又不是很相似。得先认识到并发线程原子性和事务原子性的区别。

一个是不可打断,不可继续分割;一个是存在回退机制,不会出现”错误数据“。

其它的就可以利用你”如何安全的并发编程“相关理论,来认识分布式事务。就像一个变量参与多个线程,一个数据同步到多个数据库。

你是如何控制这个变量在多个线程同步的?
- 锁:最简单的阻塞,同步
- 协程:有局限性但很合适的调度
- 事件/回调:可用但也仅仅可用

你又是如何控制这个服务在多个数据库保存操作中不会部分成功,部分失败的?
- 多个事务当然也可以阻塞:一致性拉满,可用性降低,与线程锁的特性高度一致。
- 多个事务当然也可以协作:可用性提高,一致性降低。倾斜程度根据协作方式而定,
- 多个事务当然也可以回调:或许就是最终一致性了,到回调完成那一刻,数据才会变得正确。

我认为分布式事务本身没什么复杂的,更多是因为涉及分布式事务的业务太复杂了。导致分布式事务看起来很难。其实回到本质还是同步问题。
xueyuehua 小成 2024-8-21 14:23:59

分布式事务到是什么

简单说就是一个 api 会经过多个微服务,其中一个挂了,导致数据对不上,比如给用户显示转账成功了,但是实际却扣钱了,但是钱没到另一个账号
wei2629 小成 2024-8-21 14:04:23

分布式事务到是什么

我的理解简单来说就是原子性,只有成功和失败两种情况。
isno 小成 2024-8-21 11:22:16

分布式事务到是什么

https://www.thebyte.com.cn/distributed-transaction/transaction.html

我这里介绍了 4 中分布式事务:BASE 、TCC 、SAGA  你可以看看。
silencil 小成 2024-8-21 10:35:47
八股文学习了一大堆,面试不到我学习的内容五分之一,工作内容涉及不到十分之一。
dyllen 小成 2024-8-21 10:24:45
数据同步也没什么大问题呀。就是多个系统之间的原子操作,要么成功要么失败,用处就是保证跨系统的业务操作数据的强一致性,和本地数据库的事务一个目的。
pangdundun996 初学 2024-8-21 10:17:51
@laminux29 这个例子不太合适,银行这个是因为信用卡核心系统基本都是双信息系统,要等夜间跑批清算才能入账,跟分布式事务没关系
123下一页
返回顶部