分布式事务的解决方案

来源:互联网 发布:nginx 403拒绝访问 编辑:程序博客网 时间:2024/05/17 15:04
        根据分布式系统的特点以及BASE等相关理论,目前分布式事务的解决方案一般采取柔性事务的处理方案。柔性事务的类型一般可分为:两阶段型、补偿型、异步确保型和最大努力通知型四类。

        一.柔性事务中的服务模式

        柔性事务的方案中,要实现柔性事务,根据技术方案和业务场景的不同需要,系统需要提供一定的服务模式,服务模式是柔性事务流程中的特殊操作实现。这些服务模式主要有:

        1.可查询操作:服务操作具有全局唯一标识(如订单号、交易流水号等)或者组合标识(如商户号+商户订单号),使用全局唯一的服务操作标识,查询操作执行结果。使用时间区段与(或)一组服务操作的标识,批量查询一批操作执行结果。

        2.幂等操作(Idempotenty):重复调用多次产生的业务结果与调用一次产生的业务结果相同,即f(f(x)) = f(x)

        3.TCC操作:将一步操作拆分成try、confirm、cancel。Try: 尝试执行业务,完成所有业务检查(一致性),预留必须业务资源(准隔离性)。Confirm:确认执行业务,真正执行业务,不作任何业务检查,只使用Try阶段预留的业务资源。Cancel: 取消执行业务,释放Try阶段预留的业务资源。Confirm和Cancel操作要满足幂等性。

        4.可补偿操作:完成业务处理后,可进行补偿操作,抵销(或部分抵销)正向业务操作的业务结果。补偿操作满足幂等性,TCC操作中的Confirm操作和Cancel操作,其实也可以看作是补偿操作。


        二.柔性事务在实际应用中的解决方案

        目前实际应用中,广泛使用的柔性事务解决方案主要有以下三种:

        1.可靠消息最终一致方案(异步确何型)

        2.TCC方案 (两阶段型、补偿型)

        3.最大努力通知方案(非可靠消息、定期校对)

        当然还有其它一些方案,这里不做重点介绍。这三种方案各自用到一些服务模式,有各自的优缺点,在后面的文章中再做详细阐述。