TCC协议

发布时间 2023-06-04 16:09:29作者: 范达尔

类似二阶段提交(tcc好处:无需锁定资源,在独立事务中锁定就行。二阶段:牺牲了可用性,强一致性)

  • try
  • confirm
  • cancel

 

 

 

交易开始 : 生成交易ID xid

  1. 库存表。item_id,amount
  2. 库存流水表 xid,status,item_id,amount。
  3. 优惠券
  4. 优惠券流水表
  1. 交易表。id,status,item_id ;status:初始化,库存冻结成功,优惠券冻结成功
  2. states=初始化
  3. 扣减库存请求
  4. try阶段  update stock set amount = amount - 1 where iten_id = ?  and amount>0 冻结了一个库存 insert 流水表
  5. state=冻结库存成功
  6. 扣优惠券
  7.  update voucher set amount = amount - 1 where voucher =?  and amount>0 冻结了一个优惠 insert 流水表
  8. state=成功
  9. 释放事物,

防止JAVA执行中断,定时任务机制,把中间状态,停留超过15分钟的,判断是继续执行还是回滚。