1. 两阶段提交(2PC)

原理: 2PC是一种阻塞协议,确保所有参与者在事务中要么都提交,要么都回滚。

执行流程

  • 准备阶段
  1. 协调者询问所有参与者是否准备好提交。
  2. 参与者执行事务并返回准备状态(YES/NO)。
  • 提交阶段
  1. 协调者接收到所有YES则发送提交命令,否则发送回滚命令。

使用方法: 通常用于关系数据库的分布式场景。

优缺点

  • 优点
  • 确保数据一致性。
  • 缺点
  • 阻塞性高,参与者可能在等待响应期间被锁定。
  • 协调者故障会导致整个事务失败。

使用场景: 适用于对一致性要求高的金融系统等。


2. 三阶段提交(3PC)

原理: 3PC在2PC基础上增加了预提交阶段,减少阻塞风险。

执行流程

  • 准备阶段
  1. 协调者询问参与者准备状态。
  • 预提交阶段
  1. 如果所有参与者准备好,协调者请求预提交。
  • 提交阶段
  1. 协调者发送最终提交或回滚命令。

使用方法: 适用于对可用性有要求的场景。

优缺点

  • 优点
  • 减少阻塞,能避免长时间等待。
  • 缺点
  • 实现复杂度高,协调者和参与者间的通信增加。

使用场景: 适用于实时系统和高可用性服务。


3. 补偿事务(Sagas)

原理: 将长事务拆分为多个小事务,每个小事务都有补偿操作。

执行流程

  1. 执行所有小事务。
  2. 如果某个小事务失败,依次执行已完成的小事务的补偿操作。

使用方法: 通常用于微服务架构中。

优缺点

  • 优点
  • 高可用性,避免长时间锁定。
  • 可灵活应对部分失败。
  • 缺点
  • 需要设计补偿逻辑,可能会增加开发复杂度。

使用场景: 适用于电商、订单处理等场景。


4. 基于消息队列的事务

原理: 通过消息队列实现异步处理,确保最终一致性。

执行流程

  1. 服务处理请求并将消息发送到队列。
  2. 消费者从队列中读取消息并更新状态。

使用方法: 常用于事件驱动架构。

优缺点

  • 优点
  • 高吞吐量,降低服务间耦合。
  • 缺点
  • 消息可能丢失或重复,需要处理这些情况。

使用场景: 适用于高负载和需要异步处理的场景,如日志收集等。


5. TCC(Try-Confirm-Cancel)模式

原理: 每个服务提供尝试、确认和取消操作,确保最终一致性。

执行流程

  1. Try:执行业务逻辑并锁定资源。
  2. Confirm:所有参与者确认执行。
  3. Cancel:若任一参与者失败,执行取消操作。

使用方法: 适用于需要高一致性的分布式系统。

优缺点

  • 优点
  • 资源锁定时间短,减少阻塞。
  • 缺点
  • 实现复杂,需要对业务逻辑进行改造。

使用场景: 适用于需要高可靠性的金融交易和库存管理。