1.同步场景:
1)、 读场景:首页推荐商品列表:商品信息,用户信息,社交信息
2)、 写场景 购买商品:下单-》A ; 减库存-》B ;支付-》C
2.解决方案:
1)、基于异步补偿的分布式事务
2)、架构设计的三大关键点
如以写场景为例:针对每个步骤的请求都需要在事务补偿服务的数据库中存放事务id , state, ts , 每个微服务数据访问层提供补偿接口,如下图:
3.业务逻辑层proxy设置(基于AOP实现)
3.1.逻辑层调用上加上事务注解@Around("execution(* *(..)) && @annotation(TX)")
3.2.Proxy在真正业务逻辑被调用之前,生成一个全局唯一TXID标示事务组,TXID保存在ThreadLocal变量里,方法开始前写入,完成后清除,并向远端数据库写入TXID并把事务组置为开始状态
3.3.业务逻辑层调用数据库访问层之前,通过RpcProxy代理记录当前调用参数
3.4.如果业务正常,调用完成后,当前方法的调用记录存档或删除
3.5.如果业务异常,查询调用链反向补偿
4.数据访问层设计
4.1.原子接口
4.2.补偿接口
谁来提供, 幂等性保证
4.3.基于原则接口方法,在方法名加注解标注补偿方法名
@Compensable (cancelMethod="cancelRecord")
5.分布式事务补偿服务
5.1.事务组表(数据库表TDB)
记录事务组状态
txid\state\timestamp
5.2.事务调用组表(数据库表TDB)
记录事务组内的每一次调用 以及相关参数
Txid,actionid,callmethod,pramatype,params
5.3.补偿策略
调用执行失败,修改事务组状态,
分布式事务补偿服务异步执行补偿