分布式事务设计之同步场景

1.同步场景:

           1)、 读场景:首页推荐商品列表:商品信息,用户信息,社交信息

            2)、 写场景 购买商品:下单-》A ; 减库存-》B ;支付-》C

2.解决方案:

           1)、基于异步补偿的分布式事务

            2)、架构设计的三大关键点

                                                        分布式事务设计之同步场景_第1张图片

如以写场景为例:针对每个步骤的请求都需要在事务补偿服务的数据库中存放事务id , state, ts , 每个微服务数据访问层提供补偿接口,如下图:

分布式事务设计之同步场景_第2张图片

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.补偿策略

       调用执行失败,修改事务组状态,

       分布式事务补偿服务异步执行补偿

 

你可能感兴趣的:(架构之美)