QFramework UIKit:告别Find与GetComponent,让UI仔更加简单上手
2026/7/1 9:15:26
先喝口水,再看一眼分布式系统,然后你会发现:没有事务,心里没底;有了事务,系统要命。
作为一名写了很多年 Java 的老兵,今天我们来聊一个在微服务世界里既不完美、但很实用的方案——Saga 分布式事务模式。
在单体应用里,事务是这样的:
BEGIN A 表扣钱 B 表加库存 C 表创建订单 COMMIT / ROLLBACK一切都很美,直到:
你会发现:
分布式系统里,没有一个“全局数据库事务”在等你。
2PC / XA:
于是我们开始思考:
能不能不要强一致,但系统还能跑?
答案就是:Saga。
Saga = 一连串本地事务 + 对应的补偿事务
换句话说:
听起来是不是有点像:
“做错了事,靠后悔药解决。”
没错,但这药在分布式系统里,很值钱。
每个服务:
Saga 的世界里:
执行补偿操作(Compensation Action)
一句话总结:
Saga 不保证你时时开心,但保证你最后不崩。
有一个指挥官,统一调度流程。
优点:
缺点:
但对 Java 后端来说,这个“胖”是可以接受的。
没有指挥官,全靠服务自己“看消息办事”。
优点:
缺点:
一旦系统大了,没人知道谁在跳哪支舞。
publicvoidcreateOrderSaga(CreateOrderCmdcmd){try{orderService.create(cmd);paymentService.pay(cmd);inventoryService.deduct(cmd);}catch(Exceptione){inventoryService.compensate(cmd);paymentService.refund(cmd);orderService.cancel(cmd);throwe;}}看起来很普通,对吧?
但它解决的是分布式事务这个“世纪难题”。
幂等不是优化,是底线。
分布式系统里,
时间不能倒流,只能对冲。
否则:
系统一重启,你会失忆。
| 维度 | Saga | 2PC |
|---|---|---|
| 一致性 | 最终一致 | 强一致 |
| 性能 | 高 | 低 |
| 实现复杂度 | 中 | 高 |
| 可用性 | 高 | 低 |
| 微服务友好度 | ⭐⭐⭐⭐⭐ | ⭐ |
结论一句话:
微服务时代,用 Saga;银行核心,用 2PC。
常见组合:
进阶框架: