面试题标准答案 如何解决分布式事务问题的?
面试题标准答案: 如何解决分布式事务问题的?
现在Java面试,分布式系统、分布式事务几乎是标配。而分布式系统、分布式事务本身比较复杂,大家学起来也非常头疼。
```plain text 面试题:分布式事务了解吗?你们是如何解决分布式事务问题的?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Seata AT模式和Seata TCC是在生产中最常用。
- 强一致性模型,Seata AT **强一致方案** 模式用于强一致主要用于核心模块,例如交易/订单等。
- 弱一致性模型。Seata TCC **弱一致方案**一般用于边缘模块例如库存,通过TC的协调,保证最终一致性,也可以业务解耦。
面试中如果你真的被问到,可以分场景回答:
### (1)强一致性场景
对于那些特别严格的场景,用的是Seata AT模式来保证强一致性;
准备好例子:你找一个严格要求数据绝对不能错的场景(如电商交易交易中的库存和订单、优惠券),可以回答使用成熟的如中间件Seata AT模式。
```plain text
阿里开源了分布式事务框架seata经历过阿里生产环境大量考验的框架。 seata支持Dubbo,Spring Cloud。
是Seata AT模式,保障强一致性,支持跨多个库修改数据;
- 订单库:增加订单
- 商品库:扣减库存
- 优惠券库:预扣优惠券
(2)弱一致性场景
对于数据一致性要求没有那些特别严格、或者由不同系统执行子事务的场景,可以回答使用Seata TCC 保障弱一致性方案
准备好例子:一个不是严格对数据一致性要求、或者由不同系统执行子事务的场景,如电商订单支付服务,更新订单状态,发送成功支付成功消息,只需要保障弱一致性即可。
Seata TCC 模式,保障弱一致性,支持跨多个服务和系统修改数据,在上面的场景中,使用Seata TCC 模式事务
- 订单服务:修改订单状态
- 通知服务:发送支付状态
(3)最终一致性场景
基于可靠消息的最终一致性,各个子事务可以较长时间内异步,但数据绝对不能丢的场景。可以使用异步确保型事务事。
可以使用基于MQ的异步确保型事务,比如电商平台的通知支付结果:
- 积分服务:增加积分
- 会计服务:生成会计记录
各大模式的总体对比:
| 属性 | 2PC | TCC | Saga | 异步确保型事务 | 尽最大努力通知 |
|---|---|---|---|---|---|
| 事务一致性 | 强 | 弱 | 弱 | 弱 | 弱 |
| 复杂性 | 中 | 高 | 中 | 低 | 低 |
| 业务侵入性 | 小 | 大 | 小 | 中 | 中 |
| 使用局限性 | 大 | 大 | 中 | 小 | 中 |
| 性能 | 低 | 中 | 高 | 高 | 高 |
| 维护成本 | 低 | 高 | 中 | 低 | 中 |
参考资料
https://blog.csdn.net/wuzhiwei549/article/details/80692278
https://www.i3geek.com/archives/841
https://www.cnblogs.com/seesun2012/p/9214653.html
https://github.com/yangliu0/DistributedLock
https://www.cnblogs.com/liuyang0/p/6744076.html
https://www.cnblogs.com/liuyang0/p/6800538.html
https://mwhittaker.github.io/blog/an_illustrated_proof_of_the_cap_theorem/
https://www.infoq.cn/article/cap-twelve-years-later-how-the-rules-have-changed
https://www.cnblogs.com/bluemiaomiao/p/11216380.html
https://www.jianshu.com/p/d909dbaa9d64
https://book.douban.com/subject/26292004/
https://segmentfault.com/a/1190000004468442
https://blog.csdn.net/universsky2015/article/details/105727244/
https://www.cnblogs.com/wudimanong/p/10340948.html
https://blog.csdn.net/kusedexingfu/article/details/103484198
https://www.jianshu.com/p/bfb619d3eea2
http://seata.io/zh-cn/docs/dev/mode/at-mode.html
https://blog.csdn.net/kusedexingfu/article/details/103484198
https://blog.csdn.net/wsdc0521/article/details/108223310
https://blog.csdn.net/lidatgb/article/details/38468005
https://www.cnblogs.com/cuiqq/p/12175826.html
https://blog.csdn.net/qq_22343483/article/details/99638554
https://blog.csdn.net/SOFAStack/article/details/99670033
https://seata.io/zh-cn/docs/dev/mode/at-mode.html
http://t.zoukankan.com/lay2017-p-12528071.html


