Quorum

Quorum

转载自http://blog.csdn.net/turkeyzhou/article/details/9307551

和http://blog.csdn.net/zxk364961978/article/details/51865640的结合

分布式系统的设计中会涉及到许多的协议、机制用来解决可靠性问题、数据一致性问题等,Quorum 机制就是其中的一种。我们通过分布式系统中的读写模型来简单介绍它。

分布式系统中的读写模型

  分布式系统是由多个节点(指代一台服务器、存储设备等)构成,由于网络异常、宕机等节点并不能保证正常工作,特别是在节点数量很大的时候,出现异常状况的节点几乎是肯定的。为了保证系统的正常运行,能够提供可靠的服务,分布式系统中对于数据的存储采用多份数据副本(注:这里的副本并非只用来备份,它可参与提供系统服务)来保证可靠性,也就是其中一个节点上读取数据失败了那么可以转向另外一个存有相同数据副本的节点读取返回给用户。这个过程对于用户来说是透明的。那么随之而来的就会带来数据的副本数据的不一致性,例如:用户提交一次修改后,那么原先保存的副本显然就与当前数据不一致了。解决这个问题最简单的方法 Read Only Write All ,就是在用户提交修改操作后,系统确保存储的数据所有的副本全部完成更新后,再告诉用户操作成功;而读取数据的时候只需要查询其中的一个副本数据返回给用户就行了。 在很少对存储的数据进行修改的情形下(例如存档历史数据供以后分析),这种解决方案很好。如遇到经常需要修改的情形,写操作时延时现象就很明显,加上并发或者连续的执行的话效率就可想而知了。实质,这是由于 Write 和 Read 负载不均衡所致,Read 很轻松,Write 深表压力!


 

  那么有没有一种方案能够不需要更新完全部的数据,但又保证返回给用户的是有效数据的解决方案呢?Quorum机制便是一种选择。

 

从小学的抽屉原理说起

      为什么从抽屉原理说起?一来大家对这个比较熟悉,二来它与Quorum机制有异曲同工的地方。回顾抽屉原理,2个抽屉每个抽屉最多容纳2个苹果,现在有3个苹果无论怎么放,其中的一个抽屉里面会有2个苹果。那么我们把抽屉原理变变型,2个抽屉一个放了2个红苹果,另一个放了2个青苹果,我们取出3个苹果,无论怎么取至少有1个是红苹果,这个理解起来也很简单。我们把红苹果看成更新了的有效数据,青苹果看成未更新的无效数据。便可以看出来,不需要更新全部数据(并非全部是红苹果)我们就可以得到有效数据,当然我们需要读取多个副本完成(取出多个苹果)。这就是Quorum机制的原型,其实质是将Write All 的负载均衡到 Read Only 上。

 

Quorum机制

         苹果抽屉理论只是对它的理解,引用参考文献中对Quorum的定义:

                  

      简单概括说来就是, Quorum 是一种集合 , l 中任意取集合S,R ,S,R 都存在交集。当然,本文并不打算多讲它的数学定义方面的理解,这里只是提供个信息,看不懂也没事联系到前面的分布式读写模型就能很容易理解这个了。

      回到文章的开头,我们来看看是怎么运用Quorum机制来解决读写模型中读写的负载均衡。其实,关键的是更新多少个数据副本后,使得读取时总能读到有效数据?回想我们的的红苹果,假设总共有 N 个数据副本,其中 k 个已经更新,N-k 个未更新的,那么我们任意读取 N-k+1 个数据的时候就必定至少有1个是属于更新了的k个里面的,也就是 Quorum 的交集,我们只需比较 读取的 N-k+1 中版本最高的那个数据返回给用户就可以得到最新更新的数据了。

      那么对于写模型呢?我也只需要完成 k个副本的更新后,就可以告诉用户操作完成而不需要 Write All 了,当然告诉完用户完成操作后,系统内部还是会慢慢的把剩余的副本更新,这对于用户是透明的。可以看到,我们把 Write 身上的部分负载转移到了Read上,Read读取多个副本,使得Write不会过于劳累,不好的是弱化了分布式系统中的数据一致性。至于转移多少负载比较合适,这个需要根据分布式系统的具体需求中对数据一致性的要求。不过,CAP 理论告诉我们没有完美的方案。

  提高到数学公式:

N表示数据所具有的副本数。

R表示完成读操作所需要读取的最小副本数,即一次读操作所需参与的最小节点数目。

W表示完成写操作所需要写入的最小副本数,即一次写操作所需要参与的最小节点数目。

由Quorum的理论可知,W和R是关联的,W值决定R值,要获取最新数据,R > N - W。

假设N=5, 如果R=1, 那么W必须是5. 所以就是写入所有的节点是全部节点,那么读取任何一个节点就可以最新的数据。 有点就是像读写锁了。

如果R=5, 那么W只要是1就可以了。 那么写的效率就非常高。 读取的效率比较低。 

如果R=N/2+1, W=N/2, 读写之间为达到某个平衡。 是不错的策略。兼顾了性能和可用性,Dynamo系统的默认设置就是这种。

由此可得,只需要保证R + W>N,就可以保证强一致性。

=====================================================================

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

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

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

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

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

第一条规则保证了一个数据不会被同时读写。当一个写操作请求过来的时候,它必须要获得Vw个冗余拷贝的许可。而剩下的数量是V-Vw 不够Vr,因此不能再有读请求过来了。同理,当读请求已经获得了Vr个冗余拷贝的许可时,写请求就无法获得许可了。

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

算法的好处

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

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

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




Quorum-manager是一个分布式系统的关键组件,它主要用于管理节点间的共识机制。在分布式环境中,当有多个节点参与数据处理和服务提供时,确保所有节点之间的一致性和协调性变得至关重要。这通常涉及通过特定算法达成一致状态的过程,即所谓的共识协议。 在分布式数据库、一致性存储系统以及某些类型的区块链网络中,quorum-manager的作用尤为关键。它的目标是确定哪些节点的数量和组合被视为足够的“多数”来进行决策,例如更新某个值或验证交易的有效性。这个“足够多数”的规则就是所谓的“投票集”或“阈值”。 ### Quorum-manager的工作原理 1. **配置**:首先,在系统的设置阶段,需要指定各个操作所需的最少活跃节点数以及它们的分布策略。例如,可以设定任何五个活跃节点中的三个即可形成有效的表决集,这就是一个具体的门槛设置。 2. **节点注册与监控**:系统需要跟踪所有参与者的状态,并能够快速判断当前有多少活跃成员。节点可能会因故障而离线,因此实时监测至关重要。 3. **决策过程**:当需要作出重要决策时,quorum-manager会基于当前活跃节点的情况,选择一组足以构成有效表决集的节点集合。例如,如果系统中有6个活跃节点,且规定了至少需要4个节点同意才能做出决策,则任何由这四个节点组成的任意组合都视为合法的决策基础。 4. **决策传播**:一旦决策得到足够的支持,quorum-manager负责将这一结果广播到整个网络,以便其他节点知晓并更新其状态。 ### 实现与应用 Quorum-manager的设计通常考虑到高效性、容错能力和安全性。高效的通信和计算减少延迟;容错能力使得系统能在部分节点不可用的情况下继续运行;安全性则确保只有经过正当程序的决策才被执行,防止恶意攻击导致的数据不一致。 在实际应用场景中,比如在分布式数据库系统中,quorum-manager可以用于确保数据一致性,即使在部分节点故障的情况下也能保持服务可用性和数据完整性。对于区块链技术而言,它帮助维护链的安全性和去中心化特性,确保所有的参与者都能就交易记录达成一致意见。 ### 相关问题: 1. **如何设计一个有效的quorum管理系统以适应高可用性需求?** 2. **在分布式系统中引入quorum管理系统可能面临哪些挑战?** 3. **有哪些常见的共识算法,它们是如何与quorum管理系统协同工作的?**
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值