MVCC(Multi-version Cocurrent Control)

MVCC相比2PC是一种更简单有效的分布式事务解决方案。

假设一种场景,一个分布式事务在A,B两个节点更新数据,要么同时成功,要么同时失败。

MVCC 中,为每个事务分配一个递增的事务编号,有一个中心的元数据管理单元,记录最新的已提交的事务编号。

假设A,B节点状态如下:

节点     操作                             事务序号 

A         set var1 = 1                 1

A         set var2 = 2                 1

A         set var1 = var1 + 2     2

B         set var3 = 2                 1

B         set var4 = 1                 2

1. 若此时全局元信息中的最大的生效事务序号为 1,则在节点 A 上:var1=1,var2=2,在节点 B上:var3 =2; 

2. 若此时全局元信息中的最大的生效事务序号为 2,则在节点 A 上:var1= 1+2=3,var2=2,在节点 B 上:var3=2,var4=1;

从这个例子可以看出,每个节点上保存了对数据的更新操作,也就是数据的增量(delta),从而可以在读取数据时将应用不同的更新操作得出不同的数据版本。上例中,计算编号小于等于 1 的事务操作得出的数据即为版本号为 1 的数据,计算编号小于等于 2 的事务操作得出的数据即为版本号为 2 的数据。在新事务执行过程中,虽然更新操作已经逐步记录到各个节点,但只要全局元信息不修改,始终不会读到没有生效的事务数据,从而实现了全局一致性。

原文地址:https://www.cnblogs.com/gm-201705/p/10765527.html