柔性事务的定义
刚性事务(如单数据库)完全遵循 ACID 规范,即数据库事务正确执行的四个基本要素:
- 原子性(Atomicity)
- 一致性(Consistency)
- 隔离性(Isolation)
- 持久性(Durability)
柔性事务(如分布式事务)为了满足可用性、性能与降级服务的需要,降低一致性(Consistency)与隔离性(Isolation)的要求,遵循 BASE 理论: - 基本业务可用性(Basic Availability)
- 柔性状态(Soft state)
- 最终一致性(Eventual consistency)
同样的,柔性事务也部分遵循 ACID 规范: - 原子性:严格遵循
- 一致性:事务完成后的一致性严格遵循;事务中的一致性可适当放宽
- 隔离性:并行事务间不可影响;事务中间结果可见性允许安全放宽
- 持久性:严格遵循
柔性事务的分类
柔性事务分为:两阶段型、补偿型、异步确保型、最大努力通知型。
- 两阶段型
分布式事务二阶段提交,对应技术上的 XA、JTA/JTS,这是分布式环境下事务处理的典型模式。
- 补偿型
TCC 型事务(Try-Confirm-Cancel)可以归为补偿型。在 Try 成功的情况下,如果事务要回滚,Cancel 将作为一个补偿机制,回滚 Try 操作;TCC 各操作事务本地化,且尽早提交(没有两阶段约束);当全局事务要求回滚时,通过另一个本地事务实现“补偿”行为。
TCC 是将资源层的二阶段提交协议转换到业务层,成为业务模型中的一部分。
- 异步确保型
将一些有同步冲突的事务操作变为异步操作,避免对数据库事务的争用,如消息事务机制。
- 最大努力通知型
通过通知服务器(消息通知)进行,允许失败,有补充机制。