标签:
在线上生成环境用一台服务器提供数据服务时,我们会担心这台服务器停机,造成服务不可用或数据丢失,通常我们对数据进行冗余存储,保障数据服务的高可用性。
但加入更多的机器,会带来数据一致性的问题,下面我们来了解一个基于Quorum机制的强一致性存储方案。
三机Quorum机制
Quorum即多数派原则,与投票选举的方式类似,被多数同意的一项操作即可获得通过。
本文讨论基于三机的Quorum机制,我们称这三台机为A机、B机、C机。其中A、B机用于数据存储,称为数据机。当写请求落到A机时,是否能真正写入数据,至少需要获得B机或C机一方的认可;当请求同时落到A、B机,这时需要第三方仲裁,这就是C机的作用。
读写操作需要在最新的一份数据上进行,为标识哪一台数据机上的数据为最新,我们引入版本号,每一条数据记录,不单存储数据本身,同时存储本机和另一台数据机的相应版本信息:
当各机上的verA = verB时,认为各机数据一致并且都是最新数据;当verA > verB时,则认为A机上的数据最新。实际应用中通过提议、协商、同步和广播四个过程维护数据与版本信息,以数据写入A机为例,我们来看具体的写入过程。
提议与协商
对key写请求落到A机,将经历以下流程:
经过以上步骤,A机上key相应的数据B机上的不一致,并且各机上verA > verB。进一步地,我们通过同步与广播更新B机、C机信息。
同步与广播
A机数据更新后,将对B机同步数据;B机完成数据更新后会提升本机版本号,还会将该变动同步给A机、C机,具体过程如下:
同步与广播用图示表示如下:
读流程
三机Quorum下读流程较写流程简单,但也有一个问询过程,具体如下:
小结
三机Quorum提供了两数据机存储冗余的实现方案,一次写操作后,读将获取到最新数据,因而它符合强一致性。Quorum机制也可以进行扩展,例如3数据机+5版本机,以满足更多份数据冗余存储需求。
标签:
原文地址:http://www.cnblogs.com/bangerlee/p/4334009.html