分布式协议与算法实战——Quorum NWR算法(笔记)

在最终一致性系统中某个模块需要强一致性,为避免重新开发一套系统,可以使用Quorum NWR协议 解决这个问题。也就是说,在原有系统上开发实现一个新功能,就可以满足业务同学的需求了。因为通过Quorum NWR,你可以自定义一致性级别,通过临时调整写入或者查询的方式,当 W +R > N 时,就可以实现强一致性了。

Quorum NWR 的三要素

N 表示副本数,又叫做复制因子(Replication Factor):表示集群中同一份数据有多少个副本。副本数可以不等于节点数,不同的数据可以有不同的副本数。在实现 Quorum NWR 的时候,需要实现自定义副本的功能。也就是说,用户可以自定义指定数据的副本数。
W,又称写一致性级别(Write Consistency Level):表示成功完成 W 个副本更新,才完成写操作。
R,又称读一致性级别(Read Consistency Level):表示读取一个数据对象时需要读 R个副本。即,读取指定数据时,要读 R 副本,然后返回 R 个副本中最新的那份数据。

W + R > N 的时候,对于客户端来讲,整个系统能保证强一致性,一定能返回更新后的那份数据。
W + R < N 的时候,对于客户端来讲,整个系统只能保证最终一致性,可能会返回旧数据。

实现 Quorum NWR

InfluxDB 企业版,支持“any、one、quorum、all”4 种写一致性级别:

  • any:任何一个节点写入成功后,或者接收节点已将数据写入 Hinted-handoff 缓存(也就是写其他节点失败后,本地节点上缓存写失败数据的队列)后,就会返回成功给客户端;
  • one:任何一个节点写入成功后,立即返回成功给客户端,不包括成功写入到 Hinted-handoff 缓存;
  • quorum:当大多数节点写入成功后,就会返回成功给客户端。此选项仅在副本数大于 2时才有意义,否则等效于 all;
  • all:仅在所有节点都写入成功后,返回成功。

注:对时序数据库而言,读操作常会拉取大量数据查询性能是挑战,是必须要考虑优化的,因此,在 InfluxDB 企业版中,不支持读一致性级别,只支持写一致性级别。另外,我们可以通过设置写一致性级别为 all,来实现强一致性。

猜你喜欢

转载自blog.csdn.net/weixin_42094659/article/details/107574638