Quorum([‘kwɔ:rəm])字面意思是选举法定人数,在西方资本主义社会在举行选举时,通常要求参与人数必须达到额定的数量,才能成为一个法定有效的选举,这个额定的人数就是Quorum
Quorum机制是一种容错技术,是一种分布式系统中常用的用来保证数据冗余和最终一致性的投票算法,其主要数学思想来源于鸽笼原理
鸽笼原理很简单:若有n+1只鸽子关在n个笼子里,那么至少有一个笼子有至少2只鸽子
Quorum NRW机制
分布式系统通常支持多副本,副本存放在不同节点上,读写时需要对多个副本进行操作,Quorum NRW机制如下:
- N表示数据所具有的副本数
- R表示完成读操作所需要读取的最小副本数,即一次读操作所需参与的最小节点数目
- W表示完成写操作所需要写入的最小副本数,即一次写操作所需参与的最小节点数目
如果R + W ≤ N,这时读取和写入操作是不重叠的;只需要保证R + W > N,就可以保证强一致性
quorum由多个节点构成(一般是3个,AWS Dynamo默认就是3个),quorum内节点之间通过互相通信和数据复制等方式来保持数据操作的一致性。同时,各个quorum之间又通过相交节点来把各自quorum内部的数据复制到其它quorum的所有节点
各种quorum系统容错技术的主要区别在于组织方式、拓扑结构、执行协议的不同,以及由此带来的性能和应用领域的差异
容错协议
选举
选举协议允许写quorum中节点含有数据不同和读quorum中节点含有数据丢失或者不一致的错误或者故障,但是只要当前quorum有效节点所包含正确数据信息足够多,客户端任然能从quorum的返回数据中获取有效数据
客户端根据返回数据的时间戳来将最新时间戳的数据作为可靠数据选择样本,当所有返回数据值相等且超过quorum规模的一半,就认为数据有效,否则认为数据无效
如果整个系统都没有有效读quorum,则系统失效
互斥
互斥协议从不含故障或者错误节点的有效quorum的节点中获得有效数据
读操作:从其它有效quorum中获取有效数据,如果整个系统都没有有效读quorum,则系统失效
写操作:如果对同一数据进行写操作,则时间戳早或者优先权高的优先操作;如果对不同数据进行写操作且数据之间存在同步关系,则时间戳早或者优先权高的优先操作,否则如果无同步关系,则先到者先操作
系统特征
很多特征都是双刃剑,如何权衡是一种艺术,需要结合具体的场景
规模(size)
数量越大则节点间通信成本越高,同步时长越长;反之,数量越小则冗余量越小,含有有效数据的节点比例也越低;规模是把双刃剑,如何选择是种艺术,一般选择3个节点可用性(availability)
可用性即节点出错时系统仍能可靠运行的概率,该值越大则系统可用性越高,容错性能也越好最大失效节点个数
系统在满足可用性的前提下所能容忍失效节点的最大数量,值比例越大则容错性越好负载(load)
系统中最小quorum
的最忙节点
的最小访问概率
- quorum越小则其内部节点参与quorum之间相交的概率越大
- 最小quorum中参与quorum之间相交最多的节点即为最忙节点
- 节点被访问的最小概率可作为整个系统所有节点被访问的最小概率上限,该值越大则利用率越高,同时也要求最忙节点的可靠性也就越高
读容量(read-capability)
系统最大可并行进行读操作且不相交读quorum的个数;在系统总节点数固定的情况下,读容量越大则系统提供并行数据服务的能力越高
特殊用例
- 当W = 1,R = N时,系统对写操作有较高的要求,但读操作会比较慢,若N个节点中有节点发生故障,那么读操作将不能完成
- 当R = 1,W = N时,系统要求读操作高性能、高可用,但写操作性能较低,用于需要大量读操作的系统,若N个节点中有节点发生故障,那么写操作将无法完成
- 当R = Q,W = Q,Q = N / 2 + 1时,系统在读写性能之间取得了平衡,兼顾了性能和可用性,AWS Dynamo系统的默认设置就是这种,即N=3,W=2,R=2