前言
之前讲解了分布式事务的解决方案之2PC和3PC,今天主要讲解事务补偿机制(TCC),Let's go !
TCC
TCC 事务补偿是基于 2PC 实现的业务层事务控制方案,它是 try, Confirm, Cancel 三个单词的首字母,含义如下:
- try 检查及预留业务资源完成提交事务前的检查,并预留好资源
- confirm 确定执行业务操作,对 try 阶段预留的资源正式执行
- cancel 取消执行业务操作,对 try 阶段预留的资源进行释放
将 TCC 机制带进业务为例:
1、try
下单业务由订单服务和库存服务协同完成,在 try 阶段订单服务和库存服务完成检查和预留资源
比如:订单服务检查当前是否可以满足提交订单,库存服务检查是否有充足的库存,并锁定资源
2、confirm
订单服务和库存服务成功完成 try 后开始正式执行资源操作。
比如:订单服务写入一条订单信息,库存服务扣除库存
3、cancel
订单服务和库存服务有一方出现失败则全部取消操作。
比如:订单服务需删除新增的订单信息,库存还原扣除的库存
特点
TCC 机制优点:
- 最终保证数据一致性,在业务层实现事务控制,灵活性好
TCC 机制缺点:
- 开发成本高,每个事务操作每个参与者都需要实现 try/commit/cancel 三个接口
由于 try,confirm,cancel 三个阶段中失败后要不断重试,所以 TCC 的 try,confirm,cancel 的三个接口都要实现幂等性。
幂等性
幂等性是指同一个操作无论请求多少次,其结果都相同。
保证幂等性的方案如下:
1、操作前在业务系统进行判断如果执行过了就不再执行
2、缓存所有请求和处理的结果,已经处理的请求则直接返回结果
3、在数据库表中添加一个状态字段,数据操作时判断处理状态