面试题答案
一键面试实现方案
- 使用Saga模式:
- 概念:Saga模式是一种长事务解决方案,它将一个长事务分解为多个本地事务,每个本地事务都有对应的补偿操作。
- 在Spring Cloud中的实现:可以使用Spring Cloud Saga相关框架,如Axon Framework等。
- 具体步骤:
- 订单服务:创建订单时,记录订单信息并发送创建订单成功事件。
- 库存服务:监听创建订单成功事件,扣减库存,若成功则发送库存扣减成功事件;若失败,发送库存扣减失败事件,订单服务接收到库存扣减失败事件后回滚订单。
- 支付服务:监听库存扣减成功事件,处理支付。若支付失败,发送支付失败事件。库存服务监听支付失败事件,执行库存回滚操作(补偿操作),订单服务也监听支付失败事件,回滚订单。
- 使用分布式事务框架,如Seata:
- 概念:Seata是一款开源的分布式事务解决方案,它定义了TC(Transaction Coordinator)、TM(Transaction Manager)和RM(Resource Manager)角色来协调分布式事务。
- 在Spring Cloud中的集成:将Seata与Spring Cloud项目集成,在订单服务、库存服务和支付服务中配置Seata客户端。
- 具体步骤:
- 订单服务:作为全局事务的发起者(TM),开启一个全局事务,创建订单。
- 库存服务:作为RM,接收到扣减库存请求后,在本地事务中扣减库存,并向TC报告本地事务状态。
- 支付服务:同样作为RM,处理支付,若支付失败,RM向TC报告失败状态,TC通知所有RM(包括库存服务对应的RM)回滚本地事务,从而保证数据一致性。
方案优缺点
Saga模式
- 优点:
- 松耦合:各个服务之间通过事件进行通信,耦合度低,易于维护和扩展。
- 性能较好:无需像XA事务那样长时间锁定资源,各个本地事务可以并行执行,提高系统整体性能。
- 缺点:
- 实现复杂:需要为每个本地事务编写补偿操作,并且要处理事件的顺序、重试等问题。
- 一致性问题:由于是异步处理事件,在某些极端情况下可能出现数据一致性的短暂不一致。
Seata
- 优点:
- 简单易用:对业务代码侵入性相对较小,只需要在关键业务处添加少量注解,即可实现分布式事务。
- 强一致性:通过TC协调各个RM,能保证数据的强一致性。
- 缺点:
- 性能瓶颈:XA模式下,在事务提交前会锁定资源,可能导致性能瓶颈,尤其在高并发场景下。
- 依赖问题:依赖于Seata Server(TC),增加了系统的复杂性和单点故障风险,虽然可以通过集群部署缓解,但运维成本增加。