Quorum机制

Quorum这个词的念作“科瑞姆”,字面意思是选举法定人数,对于自小成长于五道杠的环境,缺乏选举参与经验的各位小伙伴,即使把这个词翻译成中文也不太明白吧?其实是这样,腐朽的西方资本主义社会在举行选举时,通常要求参与人数必须达到额定的数量,才能成为一个法定有效的选举。这个额定的人数就是Quorum,这是原始的涵义。

而在计算机的世界里,Quorum机制是一种容错技术,常常出现在分布式系统设计中。据说微信后台也用,这样是不是突然觉得亲切很多?

除了常见的镜像,Raid,cluster外, Quorum机制也是常见的容错技术,经常用在分布式系统的冗余设计方案中。它采用互斥和选举两种容错执行协议,性能的衡量指标和size大小,可用性及负载都有关系。Quorum按照组织方式,拓扑结构,执行协议和容错过程的不同还有分类,多达4,5种,更详细的内容可以参考我的校友宋平04年就已经发表的论文“基于Quorum系统容错技术综述”(他师从孙建伶教授研究方向是分布式数据库,写的关于quorum的论文算是国内比较突出的)

这个技术不是新东西,而依据的数学理论就更早了,鸽笼原理,相关的论文好像是1979年发表的。

鸽笼原理很简单:若有n+1只鸽子关在n个笼子里,那么至少有一个笼子有至少2只鸽子

看起来浅显到爆吧?但其实有时候一些数学理论看起来就是很简单,简单才是大美嘛。而这么简单的理论就能保证你想要的时候肯定可以拿到数据。当然它还可以应用到其他地方,例如可以解决哈希表冲突等。

鸽笼原理在这里的具体应用其实就是读副本数+写副本要大于总副本数

分布式系统通常支持多副本,副本存放在不同节点上,读写时需要对多个副本进行操作。按照自然而然的想法,一个写操作会需要写多个副本,但是读只要读到一个副本即可。这种思路猛听起来很合理,有一个学名叫“读一写全协议”(read only write all,ROWA)但若真依此实现,每一次写都必须刷新所有副本,才能避免产生一致性问题,如此写操作就显得太“重”了,尤其是和读操作相比较,一头轻一头重,负载明显不平衡,更加显得不协调。而且写的respond time变长其实也会间接影响到读,因为不写好没法读嘛,最终拖慢整体性能。

在实际的系统中,通常Quorum指的就是一次有效读或写操作所需要完成的有效副本数。

采用Quorum机制后,写操作需要即刻完成的副本数减少,读操作需要成功读取的副本数增加,负载被间接转移了过去,一定程度上平衡了读写两种操作,系统整体性能会得到提升。

另外想起来一件事,做存储或AIX的同学们可能会在lsvg这种命令里也看过quorum,有人把quorum机制简单的理解为过半数,应该说不是很准确,在大多数情况下,过半意味着多数,所以很多系统采用这种设定。但是出于不同的考虑和需求,有些系统的设计里会提高这个下限,所以并不是所有情况下都是过半数就好。

你可能感兴趣的:(Quorum机制)