02.支付中分布式事务
分布式事务解决方案确保不同服务操作在事务中断时保持一致性。
TCC模式通过Try、Confirm、Cancel三个阶段保证强一致性,适用于金融系统,设计难点在于Cancel操作的复杂性和幂等性要求。
SAGA模式通过补偿机制保证最终一致性,适合电商、物流系统,挑战在于补偿逻辑和事务链的复杂性。
两者可混合使用,如TCC用于资金操作,SAGA用于订单和库存,确保数据一致性和系统性能。
# 01.分布式事务解决方案
- 设计一个分布式事务解决方案时,主要目标是确保系统中
不同服务间的操作
可以在事务失败或中断时保持一致性
- 比如支付系统,涉及多个子系统(如订单、账户、支付渠道等),选择合适的分布式事务模式非常关键
# 1、TCC(Try-Confirm-Cancel)模式
Try 阶段:预先占用资源(如冻结账户金额、生成支付记录)
Confirm 阶段:确认支付完成,提交所有事务操作(如扣款、记录支付成功状态)
Cancel 阶段:如果任何步骤失败,取消操作并释放资源(如解冻资金)
注:TCC 的优势是能够提供较好的数据一致性,但在业务逻辑复杂的场景中,Cancel 操作的设计会较为复杂
# 1)适用场景
- 金融系统或对数据一致性要求非常高的系统
- 实时性要求高,不允许发生数据不一致或延迟较大的场景,如银行转账、证券交易等
# 2)设计步骤
Try 阶段
- 各子系统预留资源,但不实际提交
- 如冻结账户金额、锁定订单状态、支付渠道准备支付授权等
- 所有资源都被暂时锁定,等待确认阶段
Confirm 阶段
- 在所有子系统都准备好后,系统进入确认阶段
- 此时,各子系统完成实际操作,如扣除账户余额、记录交易成功、通知支付渠道完成扣款
Cancel 阶段
- 如果任何子系统在 Try 阶段或 Confirm 阶段出错,系统将调用 Cancel 操作,回滚之前的操作
- 例如,解冻账户资金、释放订单状态等
# 3)设计挑战
- Cancel 操作的设计复杂性:Cancel 阶段必须保证每一个系统的状态能够安全回滚到初始状态,设计 Cancel 逻辑时需要处理较多的边界情况
- 幂等性:Try、Confirm 和 Cancel 操作需要具有幂等性,确保操作可以被重复调用而不会产生副作用
- 锁定时间:因为在 Try 阶段会冻结资源,如果 Confirm 阶段长时间未完成,系统可能会出现性能瓶颈
# 4)优化方案:
- 使用超时机制:为 Try 阶段设置合理的超时时间,避免长时间占用资源
- 并行处理:不同子系统的 Try 和 Confirm 操作可以异步并行执行,提高效率
# 2. SAGA 模式
SAGA 模式通过分布式的补偿机制保证最终一致性
每个事务步骤(如订单创建、扣款、发货)都由一系列子事务组成,且每个子事务都有对应的补偿操作
当某个子事务失败时,会调用补偿事务进行回滚
# 1)适用场景:
- 电商、物流系统等,要求最终一致性,但允许在短时间内数据不一致的业务场景
- 高容错性和延迟容忍度较高的场景,如订单支付、库存管理等
# 2)设计步骤
子事务链条
- 每个服务(如订单、账户、支付渠道)执行各自的事务操作
- 如订单系统生成订单、账户系统扣款、支付渠道完成支付
补偿操作
- 每个子事务有对应的补偿操作
- eg:如果账户扣款失败,系统可以调用补偿操作退还已扣资金,取消订单,通知支付渠道停止支付流程
最终一致性
- 如果某个子事务失败,系统会根据已经完成的事务按顺序执行补偿操作,最终保证所有服务回滚到一致的状态
# 3)设计挑战
- 补偿逻辑的复杂性:
- 每个子事务都需要设计相应的补偿逻辑,确保系统能够应对事务链条中的部分失败
- 事务链条过长:
- 事务链条越长,故障的可能性越大,补偿操作的复杂性随之增加
- 实时性要求的权衡:
- SAGA 模式无法保证强一致性,部分操作的延迟可能影响用户体验
# 4)优化方案
- 并行执行事务链:将可以独立处理的事务并行化,减少延迟
- 提前检查策略:
- 在执行事务前,进行必要的校验(如账户余额检查、库存检查),减少事务链中断的可能性
# 3、解决方案选择
# 1)基于支付系统的需求分析
- TCC 模式
- 适合在对数据一致性要求非常高的场景
- 如银行级别的支付系统,保证每个步骤都必须成功或者全部回滚
- SAGA 模式
- SAGA 更适用于电商支付场景
- 允许部分操作失败后通过补偿机制进行回滚,能够在最终保证一致性的同时,提升系统的并发性和容错能力
# 2)综合方案设计
- 在支付系统中,可以混合使用 TCC 和 SAGA
- 对于账户系统(资金扣款等高一致性要求场景),可以采用 TCC 模式确保强一致性
- 而在订单系统和库存系统等允许一定延迟的场景,可以使用 SAGA 模式来保证最终一致性,提升系统的可扩展性和性能
# 3)方案架构图
+-------------------+ +-------------------+
| Order Service | --------> | Payment Service |
| (SAGA Transaction) | | (TCC Transaction) |
+-------------------+ +-------------------+
| |
V V
+-------------------+ +-------------------+
| Inventory Service | | Account Service |
| (SAGA Transaction) | | (TCC Transaction) |
+-------------------+ +-------------------+
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
上次更新: 2024/10/15 16:27:13