文章

面试题标准答案 如何解决分布式事务问题的?

面试题标准答案 如何解决分布式事务问题的?

面试题标准答案: 如何解决分布式事务问题的?

现在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的异步确保型事务,比如电商平台的通知支付结果:

  • 积分服务:增加积分
  • 会计服务:生成会计记录

各大模式的总体对比:

属性2PCTCCSaga异步确保型事务尽最大努力通知
事务一致性
复杂性
业务侵入性
使用局限性
性能
维护成本

参考资料

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

https://segmentfault.com/a/1190000037757622

https://blog.csdn.net/qq_31960623/article/details/116429261

本文由作者按照 CC BY 4.0 进行授权