一.题目介绍
1.题目来源
实际面试中遇到,形式的话有书面解答也有口述。
2.题目
1)你是如何看待分布式系统,微服务架构的?
2)你系统里是如何处理分布式事务的?
二.具体解答
1.你是如何看待分布式系统,微服务架构的?
分布式系统,微服务架构在16年开始火,但是真正的普及是18年,其中有多少公司尝试使用这种新的架构体系可能数不胜数,分布式系统与传统的单体集成系统的最大区别是分为多个业务子服务,这些子服务为一个大的业务服务,而这套系统就是所谓的分布式系统,很多的公司一般在拆分微服务的时候都是按业务拆分,比如订单服务,会员服务,商品服务等等,按具体的业务拆分成子系统即微服务,但是其带来的挑战也是巨大的,之前在同在一个数据库里表,经过拆分以后会分到不同的数据库里,这时候想要查询一条包含其他业务的数据就得依靠一个数据中心去提供查询,还有就是分布式系统面临的最大问题,分布式事务的处理问题。
2.系统里是如何处理分布式事务的?
服务拆分后都会面临服务与服务之间交叉业务的处理,比如购买一件商品,先扣库存服务里相应商品的数量如何再发起支付在支付服务中扣除银行卡中的商品金额,如果扣库存时失败,没有处理接着往下走就有可能出现“超买”的情况,使所以在微服务里我们得保持服务与服务之间数据的一致性,也就是保证服务于服务之间的事务正常,那让我们来看看有哪些解决方案:
1)常见得有2PC、TCC和基于Spring的事务消息,但是2PC和TCC过于笨重,而且对系统代码侵入性很高,很多事务得嵌套到代码里,如果后期进行替换,工作量有点大
2)还有就是目前的开源项目中最稳定的Seata
3)中间表,针对订单这种有中间业务流转的,我们可以使用中间表结合ACK机制去确保数据的一致性
4)使用RocketMQ,目前的RocketMQ是支持事务消息的
三.题后思考
关于分布式这块的面试中,面试官问得最多的就是如何解决分布式事务,用什么方法,还有没有更好的方法,题目是开放性的,所以结合工作中的遇到的问题和解决方案回答即可。