Quorum NWR算法

article/2025/9/12 17:47:31

假如我们遇到这样一种事情:你开发实现了一套 AP 型的分布式系统,实现了最终一致性。业务也接入了,运行正常,一起看起来都那么美好。可是,突然有同事说,我们要拉这几个业务的数据做实时分析,希望数据写入成功后,就能立即读取到新数据,也就是要实现强一致性,数据更改后,要保证用户能立即查询到。这时你该怎么办呢?首先你要明确最终一致性强一致性有什么区别。

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

其实,为了一个临时的需求,我们重新开发一套系统,或者迁移数据到新系统,肯定是不合适的。因为工作量比较大,而且耗时也长,而我建议你通过 Quorum NWR 解决这个问题。

也就是说,在原有系统上开发实现一个新功能,就可以满足业务同学的需求了。因为通过Quorum NWR,你可以自定义一致性级别,通过临时调整写入或者查询的方式,当 W +R > N 时,就可以实现强一致性了。

其实,在 AP 型分布式系统中(比如 Dynamo、Cassandra、InfluxDB 企业版的 DATA 节点集群),Quorum NWR 是通常都会实现的一个功能,很常用。对你来说,掌握Quorum NWR,不仅是掌握一种常用的实现一致性的方法,更重要的是,后续用户可以根据业务的特点,灵活地指定一致性级别。

为了掌握 Quorum NWR,除了了解它的原理外,我们还会以 InfluxDB 企业版的实现为例,带你看一下它在实际场景中的实现,这样你可以在理解原理的基础上,掌握Quorum NWR 的实战技巧。

首先,需要了解 Quorum NWR 中的三个要素,N、W、R。因为它们是 Quorum NWR的核心内容,我们就是通过组合这三个要素,实现自定义一致性级别的。

Quorum NWR 的三要素

N 表示副本数,又叫做复制因子(Replication Factor)。也就是说,N 表示集群中同一份数据有多少个副本,就像下图的样子:

在这里插入图片描述

从图中你可以看到,在这个三节点的集群中,DATA-1 有 2 个副本,DATA-2 有 3 个副本,DATA-3 有 1 个副本。也就是说,副本数可以不等于节点数,不同的数据可以有不同的副本数。

需要你注意的是,在实现 Quorum NWR 的时候,你需要实现自定义副本的功能。也就是说,用户可以自定义指定数据的副本数,比如,用户可以指定 DATA-1 具有 2 个副本,DATA-2 具有 3 个副本,就像图中的样子。

当我们指定了副本后,就可以对副本数据进行读写操作了。那么这么多副本,你要如何执行读写操作呢?先来看一看写操作,也就是 W。

W,又称写一致性级别(Write Consistency Level),表示成功完成 W 个副本更新,才完成写操作:
在这里插入图片描述

从图中你可以看到,DATA-2 的写副本数为 2,也就说,对 DATA-2 执行写操作时,完成了 2 个副本的更新(比如节点 A、C),才完成写操作。那么有的同学会问了,DATA-2 有 3 个数据副本,完成了 2 副本的更新,就完成了写操作,那么如何实现强一致性呢?如果读到了第三个数据副本(比如节点 B),不就可能无法读到更新后的值了吗?别急,我讲完如何执行读操作后,你就明白了。

R,又称读一致性级别(Read Consistency Level),表示读取一个数据对象时需要读 R个副本。你可以这么理解,读取指定数据时,要读 R 副本,然后返回 R 个副本中最新的那份数据:

在这里插入图片描述

从图中你可以看到,DATA-2 的读副本数为 2。也就是说,客户端读取 DATA-2 的数据时,需要读取 2 个副本中的数据,然后返回最新的那份数据。

这里需要注意的是,无论客户端如何执行读操作,哪怕它访问的是写操作未强制更新副本数据的节点(比如节点 B),但因为 W(2) + R(2) > N(3),也就是说,访问节点 B,执行读操作时,因为要读 2 份数据副本,所以除了节点 B 上的 DATA-2,还会读取节点 A 或节点 C 上的 DATA-2,就像上图的样子(比如节点 C 上的 DATA-2),而节点 A 和节点 C的 DATA-2 数据副本是强制更新成功的。这个时候,返回给客户端肯定是最新的那份数据。

你看,通过设置 R 为 2,即使读到前面问题中的第三份副本数据(比如节点 B),也能返回更新后的那份数据,实现强一致性了。

除此之外,关于 NWR 需要你注意的是,N、W、R 值的不同组合,会产生不同的一致性效果,具体来说,有这么两种效果:

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

你可以看到,Quorum NWR 的原理并不复杂,也相对比较容易理解,但在这里,我想强调一下,掌握它的关键在于如何根据不同的场景特点灵活地实现 Quorum NWR,所以接下来,我带你具体问题具体分析,以 InfluxDB 企业版为例讲解一下。

如何实现 Quorum NWR?

在 InfluxDB 企业版中,可以在创建保留策略时,设置指定数据库(Database)对应的副本数,具体的命令,就像下面的样子:

create retention policy “rp_one_day” on “telegraf” duration 1d replication 3

通过 replication 参数,指定了数据库 telegraf 对应的副本数为 3。

需要你注意的,在 InfluxDB 企业版中,副本数不能超过节点数据。你可以这么理解,多副本的意义在于冗余备份,如果副本数超过节点数,就意味着在一个节点上会存在多个副本,那么这时冗余备份的意义就不大了。比如机器故障时,节点上的多个副本是同时被影响的。InfluxDB 企业版,支持“any、one、quorum、all”4 种写一致性级别,具体的含义是这样的。

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

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

你看,如果我们像 InfluxDB 企业版这样,实现了 Quorum NWR,那么在业务临时需要实现强一致性时,就可以通过设置写一致性级别为 all,来实现了。

小结

一般而言,不推荐副本数超过当前的节点数,因为当副本数据超过节点数时,就会出现
同一个节点存在多个副本的情况。当这个节点故障时,上面的多个副本就都受到影响
了。

  • 当 W + R > N 时,可以实现强一致性。另外,如何设置 N、W、R 值,取决于我们想化哪方面的性能。比如,N 决定了副本的冗余备份能力;
  • 如果设置 W = N,读性能比较好;如果设置 R = N,写性能比较好;
  • 如果设置 W = (N + 1) / 2、R = (N + 1) / 2,容错能力比较好,能容忍少数节点(也就是 (N - 1) / 2)的故障。

最后,我想说的是,Quorum NWR 是非常实用的一个算法,能有效弥补 AP 型系统缺乏强
一致性的痛点,给业务提供了按需选择一致性级别的灵活度,建议你的开发实现 AP 型系统
时,也实现 Quorum NWR。


http://chatgpt.dhexx.cn/article/wOHc71up.shtml

相关文章

paxosquorum

注&#xff1a; 这里谈论的2PC不同于事务中的2PC&#xff0c;而是专门为了同步和高可用改过的2PC协议 问题&#xff1a; 寻求一种能够保证&#xff0c;在给定多台计算机&#xff0c;并且他们之间由网络相互连通&#xff0c;中间的数据没有拜占庭将军问题(数据不会被伪造)的前…

分布式共识算法随笔 —— 从 Quorum 到 Paxos

分布式共识算法随笔 —— 从 Quorum 到 Paxos 概览: 为什么需要共识算法&#xff1f; 昨夜西风凋碧树&#xff0c;独上高楼&#xff0c;望尽天涯路 复制(Replication) 是一种通过将同一份数据在复制在多个服务器上来提高系统可用性和扩展写吞吐的策略, 。常见的复制策略有主从…

Quorum工作原理

文章目录 1. 概述2. 逻辑架构2.1 Quorum Node2.2 Constellation&#xff08;星座&#xff09;2.3 Tessera&#xff08;特赛拉&#xff09;2.4 Transaction Manager2.5 Enclave 3. 交易&#xff08;事务&#xff09;处理3.1 公开交易3.2 隐私交易3.3 交易处理3.4 隐私交易流程&a…

Quorum共识简析

背景 区块链共识是指多个节点或代理在给定的时间点就区块链状态达成一致的能力。当涉及区块链上分散记录保存和验证的核心功能时&#xff0c;单独依靠信任来确保添加到账本的信息是正确的可能会存在问题。因为没有中央实体来进行仲裁&#xff0c;这种问题在去中心化网络中更为…

Quorum区块链原理及其概念

Quorum概述 Quorum是由摩根大通研发的企业级区块链&#xff0c;用于解决金融或满足于企业需求的行业的需求的平台[56]。Quorum是基于以太坊扩展研发的一种联盟链&#xff0c;适用于对交易效率和吞吐量比较高的企业应用。Quorum作为以太坊的许可实施方案&#xff0c;对以太坊设…

Quorum 机制(分布式系统)

Quorum 机制&#xff0c;是一种分布式系统中常用的&#xff0c;用来保证数据冗余和最终一致性的投票算法&#xff0c;其主要数学思想来源于鸽巢原理。 基于Quorum投票的冗余控制算法 在有冗余数据的分布式存储系统当中&#xff0c;冗余数据对象会在不同的机器之间存放多份拷贝…

xgboost的原理,损失函数,优化,

不经感叹大佬真多&#xff0c;本文转自https://www.jianshu.com/p/7467e616f227 xgboostd多颗树的损失子树cart树&#xff0c;并且叶子节点为分数&#xff0c;不是类别&#xff0c;所有多棵树损失和容易优化&#xff0c;速度快分步提升&#xff0c;先优化一棵树&#xff0c;后面…

XGBoost简介

本文据此对XGBoost的原理做简单的介绍... XGBoost[1]是2014年2月诞生的专注于梯度提升算法的机器学习函数库&#xff0c;此函数库因其优良的学习效果以及高效的训练速度而获得广泛的关注。仅在2015年&#xff0c;在Kaggle[2]竞赛中获胜的29个算法中&#xff0c;有17个使用了XGB…

XGBoost原理及应用

XGBOST原理 XGBoost是使用梯度提升框架实现的高效、灵活、可移植的机器学习库&#xff0c;全称是EXtreme Gradient Boosting. XGBoost算法原理 其实算法的原理就是在一颗决策树的基础上不断地加树&#xff0c;比如在n-1颗树地基础上加一棵树变成n颗树的同时算法的精确率不断…

XGBoost原理与实例分析

这几天一直在研究XGboost的基本原理与代码调参&#xff0c;其原理是在GBDT的基础上进行优化&#xff0c;但也有很多的不同之处&#xff1b;所以自己准备更新两篇博客分为XGBoost原理与实例和XGBoost实战与调参优化来巩固这方面的知识。 一、XGBoost原理分析 在机器学习的问题…

XGBoost原理

前言 之前接触并实现过Adaboost和Random Forest。作为去年开始很火爆的&#xff0c;对结构化数据效果极佳的XGBoost&#xff0c;当然也需要了解一下了。下面将分段叙述XGBoost原理&#xff0c;以及与GBDT的关系等等内容。 ①、XGBoost vs GBDT 说到XGBoost&#xff0c;不得不说…

XGBoost算法原理以及实现

想问&#xff1a;在CSDN如何编辑数学公式呢&#xff1f; XGBoost算法是由GBDT算法演变出来的&#xff0c;GBDT算法在求解最优化问题的时候应用了一阶导技术&#xff0c;而XGBoost则使用损失函数的一阶导和二阶导&#xff0c;不但如此&#xff0c; 还可以自己定义损失函数&…

XGBoost原理介绍------个人理解版

本人第一次写博客&#xff0c;这是篇算法总结的文章&#xff0c;希望能对大家的学习有所帮助。有什么错误之处&#xff0c;还望留言指出&#xff0c;希望能与大家一起进步。 XGBoost全名叫&#xff08;eXtreme Gradient Boosting&#xff09;极端梯度提升&#xff0c;经常被用…

XGBoost原理及目标函数推导详解

前言 XGBoost&#xff08;eXtreme Gradient Boosting&#xff09;全名叫极端梯度提升&#xff0c;XGBoost是集成学习方法的王牌&#xff0c;在Kaggle及工业界都有广泛的应用并取得了较好的成绩&#xff0c;本文较详细的介绍了XGBoost的算法原理及目标函数公式推导。 一、XGBoo…

机器学习——XGboost原理及python实现

XGboost原理及实战 原理1 xgb是什么1.1 CART 回归树1.2 应用1.3 目标函数 2 xgb数学推导2.1 回归树2.2 加法模型2.3 前向分步算法2.4 目标函数2.5 正则项处理2.6 损失函数的处理 3 确定树的结构3.1 精确贪心法 4 具体算法流程&#xff1a;5 优化思路&#xff1a;5.1 压缩特征数…

XGBoost简单介绍

1. 概述 XGBoost本身的核心是基于梯度提升树实现的集成算法&#xff0c;整体来说可以有三个核心部分&#xff1a;集成算法本身&#xff0c;用于集成的弱评估器&#xff0c;以及应用中的其他过程。 1.1 提升集成算法&#xff1a; XGBoost的基础是梯度提升算法&#xff0c;因此…

XGBoost算法原理及基础知识

XGBoost原理——理论基础、公式推导、单机实现 前言一.简述XGBoost1.1算法类型&#xff1a;集成学习、监督学习1.2应用场景&#xff1a;回归、分类、排序1.3模型原理&#xff1a;串行方法、加法模型 二.集成学习及主要方法2.1Boosting 串行方法2.2Bagging 并行方法2.3Stacking …

xgboost算法原理

xgboost算法原理 1.xgboost的介绍 xgboost的全称&#xff08;extreme gradient boosting)极限梯度提升&#xff0c;经常被用在一些比赛中&#xff0c;其效果显著。它是大规模并行boosted tree 的工具&#xff0c;是目前最快最好的开源Boosted tree工具包。xgboost所应用的算法…

Xgboost算法之原理+代码

https://blog.csdn.net/kwame211/article/details/81098025 这里有一套系统的XGBoost学习方法&#xff0c;结合学习吧&#xff01; 1. XGBoost简介 xgboost一般和sklearn一起使用&#xff0c;但是由于sklearn中没有集成xgboost&#xff0c;所以才需要单独下载安装。xgboost是…

xgboost算法原理与实战

xgboost算法原理与实战 之前一直有听说GBM&#xff0c;GBDT&#xff08;Gradient Boost Decision Tree&#xff09;渐进梯度决策树GBRT&#xff08;Gradient Boost RegressionTree&#xff09;渐进梯度回归树是GBDT的一种&#xff0c;因为GBDT核心是累加所有树的结果作为最终结…