写在前面
假设现在我们实现了AP 系统,但是公司突然要对某些业务进行实时的数据计算,并且要求按照强一致性的方式来读取数据,此时作为系统设计这的我们该怎么办呢?单独为这部分业务实时抽出最新数据?还是修改原有系统?看起来都不是很靠谱,为了一个单独临时的业务而做出这么大的动作,显然是不适合的。此时我们就可以考虑在系统中引入Quorum NWR算法,从而实现数据的强一致性(注意这里实现的强一致性是建立在系统正常的前提下,如果是系统异常将还只是保证AP)
。下面我们就来一起看下吧!
1:Quorum NWR
在Quorum NWR算法中包含N
,W
,R
三个元素,当W + R > N
时就能实现我们文章开始提到的强一致性了,分别来看下。
1.1:N
N,表示的副本数,即一个分片的复制因子,如下图data-1的N就是2,data-2的N就是3,data-3的N就是1:
注意N不要超过节点数,因为将会导致某节点上存在超过>1个的副本,当该节点故障时,分片的多个副本将会同时不可用。
1.2:W
W,代表一次更新操作,数据需要写入到多少个副本才算成功,比如设置data-2分片W设置为2,则必须更新2个副本才算成功,如下图:
1.3:R
R,代表一次读取多少个副本,并从中选择一个最新的数据,之后返回给客户端,如下data-2设置R=2,则会从data-2的3个副本中的2个副本读取数据,然后获取最新的一个版本返回给客户端,如下图:
到这里我们再看下为什么W + R > N
就能实现强一致性,因为当满足该条件时,进行数据读取的R个副本中必定有一个是拥有最新数据,所以就实现了数据强一致性。
写在后面
小结
本文分析了一个AP系统如何实现数据一致性(再次强调这里指的是系统正常情况下的数据强一致性,所以CAP不能三角依然是成立的)
参考文章列表
分布式之CAP理论分析 。