1. ホーム
  2. データベース

[解決済み】CAPの定理 - 可用性とパーティションの許容性

2022-04-01 02:55:59

質問

CAPのquot;Availability"(A)とquot;Partition tolerance"(P)を理解しようとしていますが、いろいろな記事で説明されていることが理解しにくいことがわかりました。

AとPは両立できるような気がする(そうでないことは分かっているからこそ、理解に失敗するのだ!)。

わかりやすく説明すると、AとPとは何か、その違いは?

解き方は?

一貫性とは、クラスタ全体でデータが同じであることを意味し、どのノードから/どのノードに読み書きしても、同じデータを得ることができることを意味します。

可用性とは、クラスタ内のノードが停止してもクラスタにアクセスできることを意味します。

パーティション耐性とは、2つのノード間でパーティション(通信断)が発生しても、クラスターが機能し続けることです(両ノードは起動しているが、通信できない)。

可用性とパーティション耐性を両立させるためには、一貫性をあきらめなければなりません。XとYという2つのノードが、マスターとマスターのセットアップで存在する場合を考えてみましょう。ここで、XとYの間のネットワーク通信が途絶えたため、更新を同期できなくなったとします。このとき、あなたは次のどちらかを行います。

A) ノードが同期しなくなるのを許容する(一貫性を放棄する)、または

B) クラスタがダウンしているとみなす(可用性をあきらめる)。

利用できる組み合わせはすべて

  • CA - のデータは、すべてのノードがオンラインである限り、すべてのノード間で一貫しており、どのノードから読み書きしても同じデータであることを確認できますが、ノード間にパーティションが発生した場合、データは同期されなくなります(パーティションが解決されると再同期されなくなります)。
  • CP - また、ノードダウン時に利用できなくなることで、パーティション・トレランス(データの非同期化)を維持します。
  • AP - ノード同士が通信できなくてもオンライン状態を維持し、パーティションが解決されるとデータを再同期しますが、すべてのノードが同じデータを持つことは保証されません(パーティション中、パーティション後のいずれでも)。

注意すべきは CAシステムは現実的には存在しない (と主張するシステムがあるとしても)。