暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Quorum NWR算法

原创 chirpyli 2022-10-27
640

在分布式场景中,扩展性、可靠性可以通过复制数据副本实现。如果多个服务分别向三个节点写数据,为了保证强一致,就必须要求三个节点全部写成功才返回。这样在读的时候可以读任意节点,就不会有不一致的情况了。但是,同步写三个节点的性能较低,如果换一个思路,一致性并不一定要在写数据的时候完成,可以在读的阶段决策,只要每次能读到最新的版本就可以了。这就是Quorum机制的核心思想。

简单来说,Quorum机制就是要满足公式 W+R>N,式中N代表副本个数,W,又称写一致性级别, 表示成功完成W个副本更新,才完成写操作,R,又称读一致性级别,表示读操作至少要读取R个副本(然后返回R个副本中最新的那份数据)。这个公式把选择权交给了业务用户,让用户来做出最终决策。

我们举个例子说明:假设对某一数据,设定N=5,即五副本,我们定义,W=3,即写一致性级别为3,为此我们假定原有副本数据为v0,写操作成功后,至少有3副本的数据更新为v1,此时进行读操作,虽然仍有可能存在没有更新的副本,但因为读操作至少要读R>N-W,即R>2,我们只要读3个副本,选择3副本(至少有一个是更新后的副本)中最新的副本数据即可读到最新写入的值,这样就实现强一致性了。

  • 强一致性:能保证写操作完成后,任何后续访问都能读到更新后的值;
  • 最终一致性:只能保证如果对某个对象没有新的写操作了,最终所有后续访问都能读到相同的最近更新的值。也就是说,写操作完成后,后续访问可能读到旧数据。

可以想到,通过调整N、W、R值的不同组合,会产生不同的一致性效果,具体来说,有如下两种效果:

  • 当W+R>N时,对于客户端来讲,整个系统能保证强一致性,一定能返回更新后的那份数据。
  • 当W+R<=N时,对于客户端来讲,整个系统只能保证最终一致性,可能会返回旧数据。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论