一、产生背景
-
业务服务化拆分,原本一个服务能完成的业务操作现在需要跨多个服务;
-
分库分表,写操作可能跨多个数据库;
二、理论基础
2.1 2PC协议
角色说明
- 事务管理器:负责分布式事务的发起与结束,以及失败重试等(事务发起方);
- 资源管理器:本地事务涉及资源的管理(事务参与方);
协议过程
- 阶段一: 事务管理器开启分布式事务,通知资源管理器准备资源;(Prepare)
- 阶段二: 事务管理器判断资源准备情况,如果所有资源管理器都已经准备好资源,则通知资源管理进行提交;否则,进行回滚;(Commit/Rollback)
2.2 TCC协议
TCC协议是服务化的两阶段提交协议,通过改造业务逻辑实现数据最终一致性,原先一个服务接口需要改成try/confirm/cancel三个接口,每个接口作用如下:
- try:检测预留资源;
- confirm:真正的业务操作提交;
- cancel:预留资源释放;
以减库存场景为例,一阶段try接口的逻辑是检查库存是否充足,如果库存不足则返回错误;如果库存充足,则预扣库存(冻结或锁定的意思);二阶段,confirm接口则真正的扣除库存,cancel接口则是释放预扣的库存。TCC协议是BASE理论很好的说明,保证扣减库存服务可用的前提下,通过增加库存的临时状态,实现库存数据的最终一致性。