Quorum 机制(分布式系统)

article/2025/9/13 2:39:09

Quorum 机制,是一种分布式系统中常用的,用来保证数据冗余和最终一致性的投票算法,其主要数学思想来源于鸽巢原理。

基于Quorum投票的冗余控制算法

在有冗余数据的分布式存储系统当中,冗余数据对象会在不同的机器之间存放多份拷贝。但是同一时刻一个数据对象的多份拷贝只能用于读或者用于写。

该算法可以保证同一份数据对象的多份拷贝不会被超过两个访问对象读写。

算法来源于[Gifford, 1979][3][1]。 分布式系统中的每一份数据拷贝对象都被赋予一票。每一个读操作获得的票数必须大于最小读票数(read quorum)(Vr),每个写操作获得的票数必须大于最小写票数(write quorum)(Vw)才能读或者写。如果系统有V票(意味着一个数据对象有V份冗余拷贝),那么最小读写票数(quorum)应满足如下限制:

  1. Vr + Vw > V
  2. Vw > V/2

V:

Vw +Vr > V :说明Vw 和 Vr 有交集地方

Vw   > V/2

第一条规则保证了一个数据不会被同时读写。

       当一个写操作请求过来的时候,它必须要获得Vw个冗余拷贝的许可。而剩下的数量是V-Vw 不够Vr,因此不能再有读请求过来了。

       同理,当读请求已经获得了Vr个冗余拷贝的许可时,写请求就无法获得许可了。

第二条规则保证了数据的串行化修改。一份数据的冗余拷贝不可能同时被两个写请求修改。

算法的好处

在分布式系统中,冗余数据是保证可靠性的手段,因此冗余数据的一致性维护就非常重要。一般而言,一个写操作必须要对所有的冗余数据都更新完成了,才能称为成功结束。比如一份数据在5台设备上有冗余,因为不知道读数据会落在哪一台设备上,那么一次写操作,必须5台设备都更新完成,写操作才能返回。

对于写操作比较频繁的系统,这个操作的瓶颈非常大。Quorum算法可以让写操作只要写完3台就返回。剩下的由系统内部缓慢同步完成。而读操作,则需要也至少读3台,才能保证至少可以读到一个最新的数据。

Quorum的读写最小票数可以用来做为系统在读、写性能方面的一个可调节参数。写票数Vw越大,则读票数Vr越小,这时候系统读的开销就小。反之则写的开销就小。

参考文献

  1. ^ Gifford, David K. SOSP '79: Proceedings of the seventh ACM symposium on Operating systems principles. Pacific Grove, California, United States: ACM: 150–162. 1979. doi:10.1145/800215.806583. |contribution=被忽略 (帮助)

鸽巢原理

鸽巢原理,又名狄利克雷抽屉原理鸽笼原理

其中一种简单的表述法为:

  • 若有n个笼子和n+1只鸽子,所有的鸽子都被关在鸽笼里,那么至少有一个笼子有至少2只鸽子。

另一种为:

  • 若有n个笼子和kn+1只鸽子,所有的鸽子都被关在鸽笼里,那么至少有一个笼子有至少k+1只鸽子。

集合论的表述如下:

  • 若A是n+1元集,B是n元集,则不存在从A到B的单射。

拉姆齐定理是此原理的推广。

例子

虽然鸽巢原理看起来很容易理解,但有时使用鸽巢原理会得到一些有趣的结论:

  • 比如:北京至少有两个人头发数一样多。
    • 证明:常人的头发数目在15万左右,可以假定没有人有超过100万根头发,但北京人口大于100万。如果把每个鸽巢定义为“头发的数量”,便共有100万个鸽巢。打一个比方,一根头发的人就会被编排在一根头发属于的巢、两根就在两根头发属于的巢,如此类推。鸽子则对应于人,那就变成了有大于100万只鸽子要进到100万个巢中(另一种说法是把多于100万个人编排到他们身上头发所属的鸽巢,比如有一个人有三根头发,他便会进了属于有三根头发的人的鸽巢)。因为北京人口多于100万,如果受访的前100万人头发数目刚好不同,第100万零一个的北京市民就必定会进了一个已经有一人在内的鸽巢。因此,我们便可以得到“北京至少有两个人头发数一样多”的结论。

另一个例子:

  • 盒子里有10只黑袜子、12只蓝袜子,你需要拿一对同色的出来,最多需要拿出几只?假设总共只能拿一次,只要3只就无法回避会拿到两只相同颜色的袜子,因为颜色只有两种(鸽巢只有两个),而有三只袜子(三只鸽子),从而得到“拿3只袜子出来,就能保证有一双同色”的结论。

另一个例子:

  • 某男性先后有过4位妻子,合共生有2子3女,则至少有2位子女有同一位母亲,且至少1位妻子没有女儿,至少2位妻子没有儿子。
    • 至少有2位子女有同一位母亲 → 若非如此,即任何2位子女都没有相同的母亲,则该男性至少要有5位妻子,矛盾。
    • 至少1位妻子没有女儿 → 若非如此,即每位妻子都有女儿,则该男性至少要有4位女儿,矛盾。
    • 至少2位妻子没有儿子 → 若非如此,即最多1位妻子没有儿子,则该男性至少要有3位儿子,矛盾。

更不直观一点的例子:

  • 有n个人(至少2人)互相握手(随意找人握),必有两人握过手的人数相同。
    • 这里,鸽巢对应于握过手人数,鸽子对应于人,每个人都可以与[0,n-1]人握过手(但0和n-1不能同时存在,因为如果一个人不和任何人握手,那就不会存在一个和所有其他人都握过手的人),所以鸽巢是n-1个。但有n个人(n只鸽子),因此证明了命题正确。

鸽巢原理经常在计算机领域得到真正的应用。比如:哈希表的重复问题(冲突)是不可避免的,因为Keys的数目总是比Indices的数目多,不管是多么高明的算法都不可能解决这个问题。这个原理,还证明任何无损压缩算法,在把一些输入变小的同时,作为代价一定有其他的输入增大,否则对于长度为L的输入集合,该压缩算法总能将其映射到一个更小的长度小于L的输出集合,而这与鸽巢理论相悖。

推广

一种表达是这样的:如果要把n个对象分配到m个容器中,必有至少一个容器容纳至少{\displaystyle \left\lceil {\frac {n}{m}}\right\rceil }个对象。

数学证明

反证法

设把n+1个元素分为n个集合{\displaystyle A_{1},A_{2},\cdots ,A_{n}},记{\displaystyle a_{i}=|A_{i}|(i=1,2,\cdots ,n)}表示这n个集合里相应的元素个数。

假设{\displaystyle \forall a_{i}<2(i=1,2,\cdots ,n)}

因为{\displaystyle a_{i}\in \mathbb {N} }

所以{\displaystyle a_{i}\leq 1}

所以{\displaystyle a_{1}+a_{2}+\cdots +a_{n}\leq 1+1+\cdots +1=n<n+1}

这与题设矛盾,因此结论得证。

概率方法

将m个元素随机放入n个集合{\displaystyle A_{k}}中(m > n)。规定{\displaystyle \left\lceil {\frac {m}{n}}\right\rceil ={\frac {m}{n}}}如果n整除m。随机选择一个集合,它的大小的期望值是: {\displaystyle \sum _{k=1}^{n}|A_{k}|{\frac {1}{n}}={\frac {|A_{1}|+|A_{2}|+\cdots +|A_{n}|}{n}}={\frac {m}{n}}} 由于{\displaystyle |A_{k}|}只能是整数,所以必有一个m,使得{\displaystyle |A_{m}|\geq \left\lceil {\frac {m}{n}}\right\rceil }

更强的形式

设 q1, q2, ..., qn 皆是正整数,现有

{\displaystyle q_{1}+q_{2}+\cdots +q_{n}-n+1}

个对象要分配在n个箱子中,那么以下叙述至少一者成立:

  • 第1个箱子包含至少q1个对象;
  • 第2个箱子包含至少q2个对象;
  • ......
  • n个箱子包含至少qn个对象。[1]

这个原理一样可以使用反证法证明,即假设上述所有叙述为假并得出矛盾,方法与前述简单情况类似。

无穷集中的情况

借由康托的无穷基数可将鸽巢原理推广到无穷集中:如果集合A的势大于集合B的势,那么不存在由A到B的单射。

参见

  • 其他组合原理,如:
    • 容斥原理
    • 乘法原理

来源

  • Grimaldi, Ralph P. Discrete and Combinatorial Mathematics: An Applied Introduction. 4th edn. 1998. ISBN 0-201-19912-2. pp. 244–248.
  • Jeff Miller, Peter Flor, Gunnar Berg, and Julio González Cabillón. "Pigeonhole principle". In Jeff Miller (ed.) Earliest Known Uses of Some of the Words of Mathematics. Electronic document, retrieved 11 November 2006.
  • 抽屉原理[永久失效链接]

外部链接

  • 鸽笼原理 (页面存档备份,存于互联网档案馆);谢聪智对鸽巢原理的介绍。
  • "The strange case of The Pigeon-hole Principle (页面存档备份,存于互联网档案馆)"; Edsger Dijkstra investigates interpretations and reformulations of the principle.
  • "The Pigeon Hole Principle (页面存档备份,存于互联网档案馆)"; Elementary examples of the principle in use by Larry Cusick.
  • "Pigeonhole Principle from Interactive Mathematics Miscellany and Puzzles (页面存档备份,存于互联网档案馆)"; basic Pigeonhole Principle analysis and examples by Cut-the-Knot.
  • "The Puzzlers' Pigeonhole"; Cut-the-Knot on the importance of the principle in the field of puzzle solving and analysis.
  1. ^ Brualdi 2010,第74 Theorem 3.2.1页

参考:

Quorum机制 - 知乎

https://zh.wikipedia.org/wiki/%E9%B4%BF%E5%B7%A2%E5%8E%9F%E7%90%86

https://zh.wikipedia.org/wiki/Quorum_(%E5%88%86%E5%B8%83%E5%BC%8F%E7%B3%BB%E7%BB%9F)


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

相关文章

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核心是累加所有树的结果作为最终结…

【原创】XGBoost分类器原理及应用实战

本文结合作者对xgboost原理的理解及使用xgboost做分类问题的经验&#xff0c;讲解xgboost在分类问题中的应用。内容主要包括xgboost原理简述、xgboost_classifier代码、xgboost使用心得和几个有深度的问题 XGBoost原理简述 xgboost并没有提出一种新的机器学习算法&#xff0c…

xgboost 算法原理

1、xgboost是什么 全称&#xff1a;eXtreme Gradient Boosting 作者&#xff1a;陈天奇(华盛顿大学博士) 基础&#xff1a;GBDT 所属&#xff1a;boosting迭代型、树类算法。 适用范围&#xff1a;分类、回归 优点&#xff1a;速度快、效果好、能处理大规模数据、支持多种…

xgboost入门与实战(原理篇)

xgboost入门与实战(原理篇) 前言: xgboost是大规模并行boosted tree的工具,它是目前最快最好的开源boosted tree工具包,比常见的工具包快10倍以上。在数据科学方面,有大量kaggle选手选用它进行数据挖掘比赛,其中包括两个以上kaggle比赛的夺冠方案。在工业界规模方面,x…

xgboost原理分析以及实践

摘要 本文在写完GBDT的三篇文章后本来就想写的&#xff0c;但一直没有时间&#xff0c;终于刚好碰上需要&#xff0c;有空来写这篇关于xgboost原理以及一些实践的东西&#xff08;这里实践不是指给出代码然后跑结果&#xff0c;而是我们来手动算一算整个xgboost流程&#xff0…

机器学习—XGboost的原理、工程实现与优缺点

文章目录 一、xgboost简介二、xgboost原理1.从目标函数生成一棵树1.1学习第t颗树1.2xgboost的目标函数1.3泰勒公式展开1.4定义一棵树1.5定义树的复杂度1.6叶子节点归组1.7树结构打分 2.一棵树的生成细节2.1最优切分点划分算法2.1.1贪心算法2.1.2近似算法 2.2加权分位数缩略图2.…

XGBoost原理介绍

1. Introduction 在这篇文章中&#xff0c;我将介绍XGBoost&#xff08;eXtreme Gradient Boosting&#xff09;&#xff0c;一种tree boosting的可扩展机器学习系统。这个系统可以作为开源的软件包使用。该系统的影响已经在大量的机器学习和数据挖掘挑战中被广泛地认可。这些…