

# CAP の定理
<a name="cap-theorem"></a>

 可用性について考えるもう 1 つの方法は、CAP 定理との関係です。この定理では、データを格納する複数のノードで構成される分散システムでは、次の 3 つの保証のうち 2 つ以上を同時に提供することはできません。
+  **C** (一貫性): 一貫性が保証されない場合、読み取りリクエストはすべて最新の書き込みまたはエラーを受け取ります。
+  **A** (可用性): ノードがダウンしていたり利用できなくなったりしても、すべてのリクエストはエラー以外の応答を受け取ります。
+  **P** (耐パーティション): ノード間で任意の数のメッセージが失われても、システムは動作し続けます。

(詳細については、セス・ギルバートとナンシー・リンチ、「[http://dl.acm.org/citation.cfm?id=564601&CFID=609557487&CFTOKEN=15997970](http://dl.acm.org/citation.cfm?id=564601&CFID=609557487&CFTOKEN=15997970)」、*ACM SIGACT News*、第 33 巻 2 号 (2002)、51 ～ 59 ページを参照してください。) 

 ほとんどの分散システムは、ネットワーク障害に耐える必要があるため、ネットワークパーティションを許可する必要があります。つまり、これらのワークロードは、ネットワークパーティションが発生したときに一貫性と可用性のどちらかを選択する必要があります。ワークロードが可用性を選択した場合、常に応答が返されますが、データに一貫性がない可能性があります。一貫性を選択した場合、ワークロードがデータの一貫性を確認できないため、ネットワークパーティションでエラーを返す可能性があります。

 より高いレベルの可用性を提供することを目標とするワークロードでは、ネットワークパーティション中にエラーが返される (使用できない) ことを防止するため、可用性と耐パーティション (AP) を選択する場合があります。その結果、最終的な整合性または単調な整合性など、より緩やかな[整合性モデル](https://en.wikipedia.org/wiki/Consistency_model)が必要になります。