ACID过时?用 Sagas搞定数据一致性(3)

ACID过时?用 Sagas搞定数据一致性(3)


Ebay的Dan Pritchett 提出:

In partitioned databases, trading some consistency for availability can lead to dramatic improvements in scalability.

并有一个著名的Base理论。

Base: An Acid Alternative

Basically Available

Soft state

Eventually consistent


ACID过时?用 Sagas搞定数据一致性(3)


sagas 可以追溯到1987年的论文


1987年普林斯顿大学的Hector Garcia-Molina和Kenneth Salem发表了一篇Paper Sagas,讲述的是如何处理long lived transaction(长活事务)。Saga是一个长活事务可被分解成可以交错运行的子事务集合。其中每个子事务都是一个保持数据库一致性的真实事务。


ACID过时?用 Sagas搞定数据一致性(3)


ACID过时?用 Sagas搞定数据一致性(3)


ACID过时?用 Sagas搞定数据一致性(3)


ACID过时?用 Sagas搞定数据一致性(3)


Saga的组成

  • 每个Saga由一系列sub-transaction Ti 组成
  • 每个Ti 都有对应的补偿动作Ci,补偿动作用于撤销Ti造成的结果

可以看到,和TCC相比,Saga没有“预留”动作,它的Ti就是直接提交到库。

Saga的执行顺序有两种:

  • T1, T2, T3, ..., Tn
  • T1, T2, ..., Tj, Cj,..., C2, C1,其中0 < j < n

Saga定义了两种恢复策略:

  • backward recovery,向后恢复,补偿所有已完成的事务,如果任一子事务失败。即上面提到的第二种执行顺序,其中j是发生错误的sub-transaction,这种做法的效果是撤销掉之前所有成功的sub-transation,使得整个Saga的执行结果撤销。
  • forward recovery,向前恢复,重试失败的事务,假设每个子事务最终都会成功。适用于必须要成功的场景,执行顺序是类似于这样的:T1, T2, ..., Tj(失败), Tj(重试),..., Tn,其中j是发生错误的sub-transaction。该情况下不需要Ci
上一篇:ACID过时?用 Sagas搞定数据一致性(1)


下一篇:阿里巴巴旗下半导体公司平头哥重磅发布了公司自研的云芯片