实现分布式事务除了使用类似“两阶段提交”协议等方式外,另一种简单有效的方式使用MVCC(Multi-version Cocurrent Control,多版本并发控制)技术,最初也是在数据库系统中被提出。
(1)MVCC简介
是一种多个不同版本的数据实现并发控制的技术,其思想是为每次事务生成一个新版本的数据,在读数据时选择不同版本的数据可以实现对事务结果的完整性读取。在使用MVCC时,每个事务都是基于一个已生效的基础版本进行更新,事务可以并行进行,从而可以产生一种图状结构
如图,数据基础版本是1,同时产生两个事务A和B,分别对数据进行本地修改(仅事务自己可见,不影响真正数据),A首先提交,生成数据版本2,在基于2,发起事务C,C提交后生成数据版本3,最后B提交,B的结果与C合并,若无数据冲突,则可提交,否则B提交失败。
MVCC的流程与SVN等版本控制系统相似,事务基于基础数据版本做本地修改时,为不影响真正数据,有两种做法:
1. 将基础版本中的数据完全拷贝出来再修改,SVN check out就是拷贝过程
2. 每个事务只记录更新操作,不记录完整数据,读取数据时再将更新操作应用到基础版本数据,类似SVN的增量提交
(2)分布式MVCC
分布式MVCC的重点不是并发控制,而是实现分布式事务。
问题模型:在分布式系统中,更新操作以事务进行,每个事务包括若干个对不同节点的不同更新