[解決済み】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システムは現実的には存在しない (と主張するシステムがあるとしても)。
関連
-
[解決済み】識別関係と非識別関係の違いとは?
-
[解決済み] この2つの関係は、ユニオンのオペレーションにとって互換性があるのでしょうか?
-
[解決済み] DB2 ログファイルの制限、SQLCODE。-964
-
[解決済み] Oracle (ORA-02270) : この列に一致するユニークキーまたはプライマリキーがありません-リストエラー
-
[解決済み] 外部キーを主キーにするのは問題ないですか?
-
[解決済み] Oracle tnsnames.oraのSIDとService nameの違いについて
-
[解決済み] ORA-011033 を解決する方法。ORACLE の初期化またはシャットダウンが進行中です。
-
[解決済み】「INNER JOIN」と「OUTER JOIN」の違いは何ですか?
-
[解決済み】データベースのMongoDBダンプを作成する方法は?
-
[解決済み】データベースの正規形とは何ですか、またその例を教えてください。[クローズド]
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】識別関係と非識別関係の違いとは?
-
[解決済み】「データソース名が見つからず、デフォルトのドライバが指定されていません」と表示される理由と解決方法について教えてください。
-
[解決済み] DB2 ログファイルの制限、SQLCODE。-964
-
[解決済み] 扇形トラップ・狭間トラップ - データベース
-
[解決済み] PostgresqlのSCRAM認証の問題はどうすれば解決できますか?
-
[解決済み] 部分依存性(データベース)
-
[解決済み] Python 3 - JDBCで接続する
-
[解決済み] ORA-011033 を解決する方法。ORACLE の初期化またはシャットダウンが進行中です。
-
[解決済み】{merge: true}のあるセットとupdateの違いについて
-
[解決済み】データベースのMongoDBダンプを作成する方法は?