面试题答案
一键面试1. 性能对比
- Saga模式:由于Saga模式是通过事件驱动来协调各个服务完成事务,每个步骤都是异步执行,所以在高并发场景下,其性能表现较好,能有效避免资源长时间占用。例如订单系统与库存系统交互,订单创建成功后通过消息队列异步通知库存系统扣减库存,不会阻塞订单创建流程。
- TCC模式:TCC模式的Try阶段会对资源进行初步锁定,Confirm或Cancel阶段再释放或回滚资源。在高并发时,资源锁定可能导致性能瓶颈,因为同一时间只有有限资源能被操作,性能相对Saga模式会差一些。例如,在电商秒杀场景中,多个用户同时抢购,TCC模式的资源锁定可能造成大量请求等待。
- Seata:Seata的AT模式基于数据的快照机制来保证事务一致性,在事务执行过程中需要记录数据的前后镜像,这会带来一定的性能开销。相比Saga模式的异步无锁操作,Seata在高并发场景下性能压力更大。
2. 数据一致性保证
- Saga模式:通过一系列本地事务按顺序执行来保证最终一致性。如果某个步骤失败,会通过补偿事务回滚前面已执行的步骤。但在网络波动等异常情况下,可能出现部分补偿事务执行成功,部分失败的情况,需要额外的重试机制或人工干预来确保最终数据一致性。例如,在一个涉及订单、支付、物流的Saga事务中,支付成功后物流系统出现故障,订单和支付的补偿事务可能执行不一致。
- TCC模式:TCC模式通过Try阶段预留资源,Confirm阶段正式提交,Cancel阶段回滚资源,能严格保证事务的一致性。因为资源在Try阶段就被锁定,后续Confirm或Cancel操作都是基于锁定的资源进行,不会出现数据不一致的情况。如在转账场景中,从账户A向账户B转账,TCC模式能确保A账户扣钱和B账户加钱的操作要么都成功,要么都失败。
- Seata:Seata的AT模式通过全局锁和undo_log来保证数据一致性。在事务提交前,全局锁会防止其他事务对相关数据进行修改,undo_log用于回滚数据到事务开始前的状态,保证了强一致性。例如,在电商订单创建与库存扣减事务中,Seata能确保订单创建成功则库存一定扣减,否则都回滚。
3. 系统复杂度
- Saga模式:Saga模式的实现相对简单,各个服务之间通过事件消息进行通信,每个服务只需关注自身的业务逻辑和补偿逻辑。但它的事务协调依赖于事件机制,需要处理事件的可靠投递、重复消费等问题,增加了一定的复杂度。例如,在一个分布式订单系统中,订单服务、库存服务、支付服务通过消息队列传递事件,要保证消息不丢失、不重复消费需要额外的处理。
- TCC模式:TCC模式需要业务代码实现Try、Confirm、Cancel三个阶段的逻辑,增加了业务开发的复杂度。而且TCC模式对网络可靠性要求较高,因为Confirm或Cancel阶段如果失败需要重试,重试逻辑也需要精心设计,系统复杂度较高。比如在一个复杂的供应链系统中,每个环节都要实现TCC的三个阶段,代码量大幅增加。
- Seata:Seata对业务侵入性较小,只需在业务代码中添加少量注解。但其底层原理相对复杂,涉及到全局事务协调器(TC)、事务管理器(TM)和资源管理器(RM)之间的复杂交互,以及全局锁、undo_log等机制,对运维和开发人员的技术要求较高,系统复杂度也较高。
4. 适用场景
- Saga模式:适用于业务流程较长、对性能要求较高、能容忍最终一致性的场景。例如,电商的订单流程,从下单、支付、库存扣减到物流配送,整个流程较长且各环节可以异步处理,Saga模式能很好地满足需求。再如,酒店预订系统,从预订房间、支付到入住登记,也适合使用Saga模式。
- TCC模式:适用于对数据一致性要求极高、业务逻辑相对简单且资源可锁定的场景。如银行转账业务,必须保证资金的准确转移,TCC模式能满足这种强一致性要求。又如,机票预订系统中座位锁定与支付确认,TCC模式可以保证座位不会被重复预订。
- Seata:适用于对一致性要求高、业务代码对分布式事务框架侵入性要求低的场景。在电商微服务架构中,多个服务之间的事务操作,如订单创建、库存扣减、积分增加等,Seata能在不改变太多业务代码的情况下保证事务一致性。
5. Saga模式独特优势举例
在一个电商平台的营销活动场景中,当用户参与满减活动下单时,需要依次调用订单服务创建订单、库存服务扣减库存、优惠券服务核销优惠券、积分服务增加积分。这个业务流程长且涉及多个服务,对性能要求高,同时各服务操作允许最终一致性。如果使用Saga模式,订单创建成功后通过消息队列异步通知其他服务,即使某个服务暂时出现故障,也可以通过补偿事务进行回滚,不会影响整体业务流程的执行,并且能有效提升系统的并发处理能力。而TCC模式由于资源锁定可能在高并发下出现性能瓶颈,Seata的AT模式在这种长流程异步场景下不如Saga模式灵活,此时Saga模式展现出其独特优势。