Quorum

· 639 words · 2 minute read

最近在看 consul 资料的时候,又碰到了之前研究 DRBD 9 时碰到的一个概念:quorum.

Quorum 的中文直译是 法定人数 - 所谓“法定人数”是指选举制度下,参与选举的人数要达到额定的数量,才能成为一个法定有效的选举。在分布式计算中, 它的定义从维基百科 摘取如下:

A quorum is the minimum number of votes that a distributed transaction has to obtain in order to be allowed to perform an operation in a distributed system.

Quorum-based voting for replica control 🔗

在实际的系统中,通常Quorum指的就是一次有效读或写操作所需要完成的有效副本数。基于 Quorum 机制的选举算法经常用来实现副本更新策略,该方案被记为 RWN(或者NRW)。其中:

  • R代表执行读取操作时所需联系的最小节点数
  • W代表确认写入操作时所需征询的最小节点数
  • N代表复制因子(比如,存储系统的副本数)

三者应该满足如下限制:

1. R + W > N
2. W > N/2

第一条规则保证了一个数据不会被同时读写。第二条规则保证了数据的串行化修改。

write quorum 🔗

假设系统是三副本,为了保证强一致性,不需要所有节点都确认写入操作,而是只需要两个节点(也就是超过半数:W > N/2)确认即可。这种情况下,如果发生两个相互冲突的写入操作,那么只有其中一个操作能为超过半数的节点所认可, 这就是写入仲裁(write quorum)。

read quorum 🔗

读取仲裁(read quorum),也就是说想保证能够读到最新的数据,必须与多少个节点联系才行。假设写入操作需要两个节点来确认(W=2),那么我们至少得联系两个节点,才能保证获取到最新数据。然而,假如某些写入操作只被一个节点所确认(W=1),那么我们就必须3个节点都通信一遍,才能确保获取到的数据是最新的。

comments powered by Disqus