クォーラム(Quorum)とは、分散システムにおいて、データの一貫性(Consistency)や可用性(Availability)を維持するために、ある操作(データの読み書きなど)を実行する際に、合意形成を行う必要のある最小ノード数のことを指します。
システム内の全ノードの一部が機能停止したり、ネットワーク分断(パーティション)が発生したりしても、システムが正しく動作し続けるための重要なメカニズムです。
クォーラムの基本的な概念
分散システムは、複数の独立したコンピュータ(ノード)が連携して動作するシステムです。このようなシステムでは、一部のノードが故障したり、ノード間の通信が途絶えたりすることが頻繁に発生します。クォーラムは、これらの障害条件下でも、データの矛盾を防ぎ、サービスの継続性を確保するための中心的な概念です。
主な概念は以下の通りです。
- 分散システム(Distributed System): 複数のコンピュータがネットワークを通じて連携し、単一のシステムとして機能するものです。冗長性や拡張性に優れる反面、ノード間のデータの一貫性維持が課題となります。
- 一貫性(Consistency): システム内の全てのノードが、常に同じ最新のデータを持っている状態を指します。データの一貫性が保たれないと、古いデータに基づいて誤った判断が下される可能性があります。
- 可用性(Availability): システムが常に利用可能であり、ユーザーからのリクエストに応答できる状態を指します。一部のノードが故障しても、サービスが停止しないことが重要です。
- パーティション耐性(Partition Tolerance): ネットワーク分断(一部のノードが他のノードと通信できなくなる状態)が発生しても、システムが動作し続けられる能力を指します。CAP定理において、分散システムが同時に満たせない3つの特性の一つです。
- 合意形成(Consensus): 分散システムにおいて、複数のノード間で共通の決定や状態について同意を得るプロセスです。クォーラムは、この合意形成を達成するための条件を定めます。
クォーラムの具体的な仕組みと種類
クォーラムは、リードクォーラム(読み込みクォーラム)とライトクォーラム(書き込みクォーラム)という2つの概念によって構成されるのが一般的です。これらを適切に設定することで、一貫性と可用性のバランスを調整します。
システム内のノードの総数を N とします。
1. ライトクォーラム(Write Quorum:W)
データを更新(書き込み)する際に、更新内容を同期的に書き込む必要がある最小のノード数です。
- 例えば、N=5 のシステムで、W=3 と設定した場合、データが正しく書き込まれたと見なされるには、最低3つのノードがその更新を受け付けたことを確認する必要があります。
2. リードクォーラム(Read Quorum:R)
データを読み出す際に、最新のデータを得るために、読み込みを行う必要がある最小のノード数です。
- 例えば、N=5 のシステムで、R=3 と設定した場合、データを読み出す際には、最低3つのノードからデータを取得し、それらを比較して最新のものを採用します。
クォーラムの条件(定足数条件)
データの一貫性を保証するために、ライトクォーラム W とリードクォーラム R の間には、以下の関係が成り立っている必要があります。

この条件を満たすことで、「データを書き込んだノード集合」と「データを読み込むノード集合」が、少なくとも1つの共通のノードを常に含むことが保証されます。これにより、読み込み時に必ず最新のデータが含まれるノードから情報を取得でき、データの一貫性が維持されます。
- 例: N=5 の場合
- W=3,R=3: 3+3=6>5 なので、一貫性が保証されます。
- W=4,R=2: 4+2=6>5 なので、一貫性が保証されます。
- W=2,R=2: 2+2=4≯5 なので、一貫性は保証されません。この場合、書き込みを行ったノード集合と読み込みを行うノード集合が完全に disjoint になる可能性があります。
クォーラム設定による一貫性と可用性のトレードオフ
クォーラムの設定は、システムの一貫性と可用性のバランスに大きく影響します。
特定のクォーラムモデル
- 多数決クォーラム(Majority Quorum): 最も一般的なクォーラム戦略で、W=⌊N/2⌋+1 および R=⌊N/2⌋+1 と設定します。これにより、W+R>N の条件が常に満たされ、ネットワーク分断が発生しても、システム全体が2つのパーティションに分かれた場合、どちらか一方のパーティションのみがクォーラムを形成でき、スプリットブレイン問題(データが矛盾する状態になること)を回避できます。
クォーラムの応用分野
クォーラムは、分散システムにおける信頼性と安定性を確保するための基盤技術として、様々な分野で活用されています。
クォーラム(Quorum)とは、分散システムにおいて、データの一貫性や可用性を維持するために、合意形成を行う必要のある最小ノード数のことです。特に、データを更新する際の「ライトクォーラム W」と、読み出す際の「リードクォーラム R」の概念が重要であり、W+R>N(N は総ノード数)の条件を満たすことで、データの矛盾を確実に防ぎます。
この設定により、システムの一貫性と可用性の間のトレードオフが決定されます。多数決クォーラムは一般的な戦略の一つです。クォーラムは、分散データベース、分散合意アルゴリズム、高可用性クラスター、ブロックチェーンなど、多くの現代の信頼性の高い分散システムにおいて、その安定動作を支える不可欠な基盤技術となっています。