彻底搞透分布式一致性( 四 )

  • 资源管理器:单一资源管理者,对外提供正向补偿接口和逆向补充接口,供应用程序和事务管理器使用;
  • 核心流程基本一致:
    • 正向补偿:应用流程向前推进,最终从一个状态变化为另一个状态;
    • 逆向补偿:应用流程向后推进,将所有操作进行回滚,使其恢复到前一状态;
    简单来说:事务一致性就是通过协调各个参与节点来实现分布式事务的提交或回滚,确保所有涉及到的操作 , 要么全部执行成功,要么全部不执行 。不同的实现方式只是不同的工具 , 其实现思路基本一致 。
    3. 业务一致性保障机制前人已经为我们提供足够多的工具,如何更好的使用这些工具 , 就需要对业务场景进行深入分析 。
    业务系统一致性是指在多个系统或不同的环境中,不同用户或系统操作所产生的数据在逻辑上是相同的 。它的本质是确保在任何情况下 , 不同系统或用户产生的数据都是一致的,并且在系统中的所有操作都是以预期方式进行的 。业务系统一致性是确保数据的准确性和可靠性的关键因素,可以有效地避免数据错误和丢失,提高业务系统的可用性和可靠性,保障企业的持续发展 。\如下图所示:
    彻底搞透分布式一致性

    文章插图
    图片
    如果可重试性事务间不存在依赖关系,可以并行执行,具体如下:
    彻底搞透分布式一致性

    文章插图
    图片
    在一个复杂的业务流程中,可以将事务分为三类:
    • 关键性事务:指的是系统中最为关键的一步操作,如果事务提交失败,则进行回滚操作;如果事务提交成功,则成为事实,无法回滚;
    • 可补偿性事务:指的是在关键性事务之前的事务操作,通常提供正向和逆向两组操作,正向操作失败或关键事务失败 , 在会逆序调用逆向接口,以对操作进行回滚;
    • 可重试性事务:指的是关键事务之后的事务操作,关键事务提交成功,则事实已定 , 下游通过重试的方式完成事务;
    我们以分布式系统中的下单流程为例:
    彻底搞透分布式一致性

    文章插图
    图片
    • 关键性事务:就是下单操作,将用户的信息保存到数据库 。保存失败,对已经操作的库存和优惠券进行逆向恢复;保存成功,通过重试保障下游事务的一致性;
    • 可补偿性事务:指的是优惠券和库存服务提供的正向和逆向操作,正向操作可以通过逆向操作进行恢复;
    • 可重试性事务:指的是添加自动取消任务、保存操作日志、发送 MQ,当订单数据保存成功后,这三者通过不断重试保障最终都会执行;
    3.1. 关键性事务关键性事务:指在分布式系统中 , 只有当某个事务被成功提交后,整个系统才能认为这个事务是成功的 。如果这个事务失败了,那么整个系统就会回滚到之前的状态 。例如支付、订单提交等 。
    从关键性事务的使用场景出发,最适合的工具便是关系数据库的事务保障 。
    彻底搞透分布式一致性

    文章插图
    图片
    • 事务提交成功:整个流程向前补偿,推动可重试性事务通过不断重试最终完成业务逻辑;
    • 事务提交失败:触发整个流程回滚 , 逆序调用可补偿事务的回滚接口恢复状态;
    3.2. 可补偿事务可补偿事务指在某些业务操作中 , 如果其中一些子操作执行失败,可以由后续补偿操作进行补救 , 达到一定的业务目的,例如在资金交易中 , 如果账户余额不足而支付子操作失败,可以通过撤销订单等补偿操作来保障交易的正确性 。
    对于可补偿事务,需要提供两组操作:
    1. 正向:标准的业务操作,比如库存锁定
    2. 逆向:针对正向操作的恢复操作,比如释放锁定库存
    3.2.1. SeataSeata 是一个开源的分布式事务解决方案,旨在解决分布式系统中的事务一致性问题 。在传统的分布式系统中 , 由于各个服务之间的数据交互和操作都是独立进行的 , 因此很容易出现数据不一致的情况 。这会导致系统出现各种异常情况 , 如数据丢失、重复提交等,从而影响系统的稳定性和可靠性 。


    推荐阅读