Quorom 机制,是一种分布式系统中常用的,用来保证数据冗余和最终一致性的投票算法,其主要数学思想来源于鸽巢原理。
什么是鸽巢原理?
其中一种简单的表述法为:
若有n个笼子和n+1只鸽子,所有的鸽子都被关在鸽笼里,那么至少有一个笼子有至少2只鸽子。
另一种为:
若有n个笼子和kn+1只鸽子,所有的鸽子都被关在鸽笼里,那么至少有一个笼子有至少k+1只鸽子。
恩,很熟悉吧。
分布式系统通常支持多副本,副本存放在不同节点上,读写时需要对多个副本进行操作。考虑到一致性问题,可以在写操作更新所有副本,而读取时只要读其中一个副本。但是,这样写负载太重了,读很轻松,读写负载明显不平衡。
采用Quorum机制后,写操作需要即刻完成的副本数减少,读操作需要成功读取的副本数增加,一定程度上平衡了读写两种操作,系统整体性能会得到提升。比如,有5个副本,可以让写操作只要写完3个就返回。剩下的由系统内部缓慢同步完成。而读操作,则需要至少读3台,就可保证至少可以读到一个最新的数据。(鸽巢原理)
这个协议有三个关键值N、R和W:
N表示数据所具有的副本数。
R表示完成读操作所需要读取的最小副本数。
W表示完成写操作所需要写入的最小副本数。
该策略中,只需要保证R + W > N,就会提供强一致性的保证,因为读取数据的节点和被同步写入的节点是有重叠的(鸽巢原理)。
例如:N=3,W=