24 条回复  ·  292 次点击
xueyuehua 小成 2024-8-21 14:23:59

分布式事务到是什么

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

分布式事务到是什么

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

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

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

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

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

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

分布式事务到是什么

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

分布式事务到是什么

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

分布式事务到是什么

@bthulu {哭笑脸} “打日志警告人工处理”,项目初期很受用。
123
返回顶部