分布式补偿事务

47 阅读2分钟

传统ACID

ACID有很强的一致性,伸缩性非常差。BASE一致性弱,有很好的伸缩性,可以异步批量处理,适合分布式事务。

解释下ACID含义

  • 原子性
  • 一致性
  • 隔离性
  • 持久性

微服务系统下不适合这种强一致性的要求,很难满足高性能要求。

分布式BASE

"BASE 原理为了提升分布式系统的可用性,允许短时间内的数据不一致,之后通过异步补偿机制最终达到一致性。"

解释下BASE含义

  • Basic Availaability:基本可用
  • Soft-state:软状态
  • Eventual Consistency:最终一致性

BASE允许出现短暂问题,分布式系统下出现故障是不可避免,我们可以设计出更加有弹力的系统。短时间内就算有数据不同步风险,允许新的交易发生,在业务上将可能出现问题的事务处理掉,保证最终一致性。

通过实际场景分析ACID和BASE

ACID,大家在买同一本书时候,每个用户购买请求需要把库存锁住,等减完库存后,释放锁,后续的人才能购买。

BASE,大家同时下单,这时不是去分配库存,系统先异步批量处理订单,当库存没有了,告诉用户你没有购买成功。

业务补偿

微服务涉及到多个服务之间的协调,保证每一个服务都成功,否则整个事务就是失败的。对于业务补偿,将服务变成幂等性,如果一个事务失败或者超时,我们需要不断重试,达到我们想要的状态。如果达不到我们想要的,就把服务恢复到原来的状态。

满足以下几点补偿

  • 清楚地描述出要达到什么样的状态,如果不满足其中的条件,我们要回退到哪一个状态
  • 整条业务跑起来的时候,我们可以串行或者并行地做这些事
  • 对于已经完成的事务进行整体修改,可以考虑成一个修改事务

业务补偿设计

  • 把一个业务流程执行完成
  • 执行不下去,需要启动补偿机制,回滚业务流程