web-dev-qa-db-ja.com

CAP定理-可用性とパーティションの許容度

CAPの「可用性」(A)と「パーティショントレランス」(P)を理解しようとしていますが、さまざまな記事の説明を理解することは困難でした。

私はAとPが一緒に行くことができると感じます(これはそうではないことを知っているので、理解できないのです!)。

簡単な用語で説明すると、AとPは何であり、それらの違いは何ですか?

158
learninghuman

一貫性とは、クラスター全体でデータが同じであることを意味するため、任意のノードとの間で読み取りまたは書き込みを行い、同じデータを取得できます。

可用性とは、クラスター内のノードがダウンした場合でもクラスターにアクセスできることを意味します。

パーティショントレランスとは、2つのノード間に「パーティション」(通信の中断)(両方のノードがアップしているが通信できない)がある場合でも、クラスターが機能し続けることを意味します。

可用性とパーティション許容度の両方を得るには、一貫性を放棄する必要があります。マスターとマスターのセットアップにXとYの2つのノードがあるかどうかを検討してください。現在、XとYの間のネットワーク通信は中断されているため、更新を同期できません。この時点で、次のいずれかを実行できます。

A)ノードの同期が外れるようにする(一貫性をあきらめる)、または

B)クラスターが「ダウン」していると考えます(可用性を放棄します)

利用可能なすべての組み合わせは次のとおりです。

  • CA-データはすべてのノード間で一貫しています-すべてのノードがオンラインである限り-任意のノードから読み取り/書き込みができ、データは同じですが、ノード間でパーティションを開発した場合、データは同期されません(パーティションが解決されると再同期されません)。
  • CP-データはすべてのノード間で一貫しており、ノードがダウンしたときに使用できなくなることでパーティションの許容範囲を維持します(データの非同期化を防ぎます)。
  • AP-ノードは互いに通信できなくてもオンラインのままであり、パーティションが解決されるとデータを再同期しますが、そうではありませんすべてのノードが同じデータを持つことを保証します(パーティション中またはパーティション後)

CAシステムは実際には存在しない (一部のシステムが存在すると主張する場合でも)に注意する必要があります。

308
Chris Heald

PをCおよびAと同等に考えることは少し間違いであり、C、A、Pの「3つのうち2つ」という概念は誤解を招く可能性があります。 CAP定理を説明する簡潔な方法は、「分散データストアでは、ネットワークパーティション時に一貫性または可用性のいずれかを選択する必要があり、両方を取得することはできません」です。新しいNoSQLシステムは可用性に焦点を合わせようとしていますが、従来のACIDデータベースは一貫性に重点を置いていました。

本当にCAを選択することはできません。ネットワークパーティションは誰もが望んでいるものではなく、分散システムの望ましくない現実であり、ネットワークは失敗する可能性があります。質問は、それが発生したときにアプリケーションのトレードオフを選択します。この 記事 は、その用語を最初に定式化した男性からのこのことを非常に明確に説明しているようです。

28
jayadev

ここで、特にPについてCAPについて説明します。

CAは、モノリシックの単一サーバーデータベースで問題がない場合にのみ可能です(レプリケーションを使用することもできますが、1つの「障害ブロック」上のすべてのデータ-サーバーは部分的に障害とは見なされません)。

問題がスケールアウト、分散、およびマルチサーバーを必要とする場合、ネットワークパーティションが発生する可能性があります。あなたはすでにPを要求しています。私がアプローチする問題は、単一サーバー常時パラダイムに適しています(または、Stonebrakerが言ったように、「分配はテーブルステークス」です)。 CAの問題を見つけることができる場合、従来の非スケールアウトRDBMSのようなソリューションには多くの利点があります。

私にとっては、まれです。ですから、AP対CPの議論に移ります。

パーティションがある場合にのみ、APまたはCP操作を選択します。ネットワークとハードウェアが正常に動作している場合は、ケーキを手に入れて食べます。

AP/CPの区別について説明しましょう。

AP-ネットワークパーティションがある場合、独立した部分を自由に動作させます。

CP-ネットワークパーティションがある場合、ノードをシャットダウンするか、読み取りと書き込みを許可しないため、確定的な障害が発生します。

いくつかの問題はAPであり、いくつかはCPであり、一部のデータベースは両方を実行できるため、両方を実行できるアーキテクチャが好きです。 CPおよびAPソリューションには、微妙な点もあります。

たとえば、APデータセットでは、一貫性のない読み取りと書き込みの競合の両方が発生する可能性があります。これらは2つの異なるAPモードです。システムは、読み取りの可用性が高いAP用に構成できますが、書き込みの競合は許可されませんか?または、強力で柔軟な解決システムを使用して、APシステムが書き込みの競合を受け入れることができますか?最終的には両方が必要になりますか、それとも一方のみを実行するシステムを選択できますか?

CPシステムでは、小さなパーティション(単一サーバー)がある場合、どれだけの可用性が得られませんか?複製が大きくなると、CPシステムでの使用不能が増加する可能性がありますが、システムはこれらのトレードオフをどのように処理しますか?

これらはすべてCPとAPで尋ねる質問です。

現在、この分野の素晴らしい記事は、Brewerの「12年後」の投稿です。私はこれがCAPの議論を明確に進めると信じており、強くお勧めします。

http://www.infoq.com/articles/cap-twelve-years-later-how-the-rules-have-changed

17
Brian Bulkowski

CAP Theorem

一貫性:

読み取りは、特定のクライアントの最新の書き込み(ACIDなど)を返すことが保証されています。 その間にリクエストが来た場合、ノード間でのデータ同期が完了するまで待機する必要があります。


可用性:

すべてのノード(失敗していない場合)は常にクエリを実行し、常にリクエストに応答する必要があります。最新のコピーを返すかどうかは関係ありません。


パーティション許容値:

ネットワークパーティションが発生しても、システムは機能し続けます。


APに関して、可用性(常にアクセス可能)は(Cassendra)またはwithout(RDBMS)パーティション許容値

pic source

8
mrsrinivas

一貫性-読み取り要求を送信するときに、結果を返す場合、クライアント要求によって指定された最新の書き込みを返す必要があります。可用性-読み取り/書き込み要求は常に成功するはずです。パーティションの許容範囲-ネットワークパーティション(一部のマシンが相互に通信する問題)が発生した場合でも、システムは動作するはずです。

分散型では、ネットワークパーティションが発生する可能性があり、CAPの「P」を避けることはできません。そのため、「一貫性」と「可用性」から選択します。

http://bigdatadose.com/understanding-cap-theorem/

0
rajnish

どの回答でもパーティション許容値がうまく説明されていないと思うので、CAP定理が意味する詳細を説明するだけです:

C:(線形性または強い一貫性)おおよそ

操作Aが正常に完了した後に操作Bが開始された場合、操作Bは、操作Aの完了時と同じ状態、または新しい状態(ただし、古い状態ではない)でシステムを確認する必要があります。

A

「システム内の障害のない[データベース]ノードが受信したすべての要求は、[エラーなし]応答になる必要があります」。一部のノードがリクエストを処理できるだけでは不十分です。障害のないノードはそれを処理できる必要があります。多くのいわゆる「高可用性」(つまり、低ダウンタイム)システムは、実際にはこの可用性の定義を満たしていません。

P

パーティショントレランス(ひどく間違った名前)は、基本的に、メッセージを遅延またはドロップする可能性のある非同期ネットワークを介して通信していることを意味します。インターネットとすべてのデータセンターにはこのプロパティがあります。したがって、この点については選択肢がありません。

ソース:Awesome Martin kleppmann's work

例を挙げると、Cassandraは最大でAPシステムです。ただし、Quorumに基づいて読み取りまたは書き込みを行うように構成すると、CAPが利用可能(CAP定理の定義に従って利用可能)のままにならず、Pシステムのみになります。

0
Anurag Sharma