一、TCC模式

TCC(Try-Confirm-Cancel)分布式事务模型最早由微软架构师Pat Helland提出,针对分布式系统环境下的数据一致性问题,采用服务化的两阶段编程模型。

1. Try阶段(资源预留)

  • 作为一阶段操作,负责完成所有业务检查
  • 预留必要的业务资源
  • 采用”柔性检查”机制,不直接操作实际业务数据

2. Confirm阶段(业务提交)

  • 作为二阶段提交操作,执行真正的业务逻辑
  • 必须保证幂等性设计
  • 实际扣减Try阶段预留的资源

3. Cancel阶段(资源释放)

  • 回滚Try阶段预留的资源
  • 同样需要保证幂等性
  • 通常在业务异常或超时情况下触发

相比传统XA协议的优势

  1. 单点故障问题:将事务控制权交给业务发起方
  2. 同步阻塞问题:引入超时机制,细粒度资源控制
  3. 数据一致性问题:提供完善的补偿机制

二、队列模式

基本概念

队列模式是一种实现最终一致性的分布式事务解决方案,其核心思想是将分布式事务拆分为多个本地事务进行处理。

实现原理

  1. 事务拆分:将复杂的分布式事务拆分为多个独立的本地事务
  2. 消息日志:通过消息日志记录事务状态和操作指令
  3. 异步执行:利用消息队列实现各服务间的异步通信

技术实现

  • 消息中间件选择:Kafka、RocketMQ、RabbitMQ
  • 消息存储方案:本地文件系统、数据库存储、专用消息中间件

异常处理机制

  1. 自动重试:配置消息消费的最大重试次数
  2. 人工干预:提供管理界面查看失败消息
  3. 死信队列:超过最大重试次数的消息转入死信队列

优缺点

  • 优点:系统解耦、提高系统吞吐量、降低资源锁定时间
  • 缺点:实现复杂度较高、存在短暂的数据不一致窗口期

三、Saga模式

Saga模式最早起源于1987年Hector Garcia-Molina和Kenneth Salem发表的数据库论文,将长事务分解为一系列短事务。

基本原理

一个Saga事务是由多个本地事务组成的全局事务,每个本地事务都有预定义的补偿事务。

Saga事务的执行流程

  1. 正向执行:按照预定顺序依次执行各个子事务
  2. 反向补偿:当某个子事务执行失败时,按照相反顺序执行补偿操作

基本协议

  • 向前恢复(forward recovery):执行过程中遇到失败时进行重试
  • 向后恢复(backward recovery):发生错误后撤销之前所有成功的子事务

与传统2PC相比的优势

  1. 避免了长时间的资源锁定
  2. 更适合松耦合的微服务架构
  3. 具有更好的可扩展性
  4. 对业务侵入性较小

局限性

  1. 补偿事务不一定能完全恢复原始状态
  2. 需要业务层面设计完备的补偿逻辑
  3. 可能存在”脏读”问题