CAP-Theorem - Verfügbarkeit und Partitionstoleranz


207

Während ich versuche, die "Verfügbarkeit" (A) und "Partitionstoleranz" (P) in CAP zu verstehen, fiel es mir schwer, die Erklärungen aus verschiedenen Artikeln zu verstehen.

Ich habe das Gefühl, dass A und P zusammenpassen können (ich weiß, dass dies nicht der Fall ist, und deshalb verstehe ich es nicht!).

In einfachen Worten erklären, was sind A und P und der Unterschied zwischen ihnen?


1
Hier ist ein Artikel, der CAP in einfachem Englisch erklärt. ksat.me/a-plain-english-introduction-to-cap-theorem
Tushar Saha

2
Gehen Sie nicht für die fertigen Antworten. Lesen, visualisieren und verstehen Sie jedes C, A, P separat. Entwerfen Sie eine verteilte Clusterarchitektur (möglicherweise 3 DB) und wenden Sie jetzt Ihr Verständnis an. Sehen Sie, was mit C, A, P passiert, wenn Fehler der verteilten (DBs) auftreten. Wenn Sie verstanden haben, suchen Sie nach Antworten und wenden Sie diese mit Ihrer Logik an. Denken Sie daran - Auch wenn Sie verstehen, ist es möglicherweise nicht klar. Denken Sie also nach und wenden Sie Ihr Verständnis an. Danke
Jungfrau

1
Irgendwie geht der obige Link ksat.me zur URL 404, weil er mit '/' endet. ksat.me/a-plain-english-introduction-to-cap-theorem Dies funktioniert gut und ist eine sehr detaillierte Erklärung für jedes von 'C', 'A', 'P'
vivek.m

Antworten:


402

Konsistenz bedeutet, dass die Daten im gesamten Cluster gleich sind, sodass Sie von / zu jedem Knoten lesen oder schreiben und dieselben Daten abrufen können.

Verfügbarkeit bedeutet die Möglichkeit, auf den Cluster zuzugreifen, selbst wenn ein Knoten im Cluster ausfällt.

Partitionstoleranz bedeutet, dass der Cluster auch dann weiter funktioniert, wenn zwischen zwei Knoten eine "Partition" (Kommunikationsunterbrechung) besteht (beide Knoten sind aktiv, können jedoch nicht kommunizieren).

Um sowohl Verfügbarkeit als auch Partitionstoleranz zu erhalten, müssen Sie die Konsistenz aufgeben. Überlegen Sie, ob Sie zwei Knoten, X und Y, in einem Master-Master-Setup haben. Jetzt gibt es eine Unterbrechung zwischen der Netzwerkkommunikation zwischen X und Y, sodass keine Updates synchronisiert werden können. An dieser Stelle können Sie entweder:

A) Lassen Sie die Knoten nicht mehr synchron sein (geben Sie die Konsistenz auf), oder

B) Betrachten Sie den Cluster als "down" (Verfügbarkeit aufgeben)

Alle verfügbaren Kombinationen sind:

  • CA - Daten sind zwischen allen Knoten konsistent - solange alle Knoten online sind - und Sie können von jedem Knoten aus lesen / schreiben und sicherstellen, dass die Daten identisch sind. Wenn Sie jedoch jemals eine Partition zwischen Knoten entwickeln, sind dies die Daten nicht synchron (und wird nicht erneut synchronisiert, sobald die Partition aufgelöst ist).
  • CP - Daten sind zwischen allen Knoten konsistent und behalten die Partitionstoleranz bei (verhindert das Desynchronisieren von Daten), indem sie nicht mehr verfügbar sind, wenn ein Knoten ausfällt.
  • AP- Knoten bleiben online, auch wenn sie nicht miteinander kommunizieren können und die Daten nach dem Auflösen der Partition erneut synchronisieren. Es kann jedoch nicht garantiert werden, dass alle Knoten dieselben Daten haben (entweder während oder nach der Partition).

Sie sollten beachten, dass CA-Systeme praktisch nicht existieren (auch wenn einige Systeme dies behaupten).


1
Warum haben wir in AP nicht garantiert, dass alle Knoten die gleichen Daten haben? Ok, weil wir kein "C" haben, aber ... das ist mir nicht klar ... Ich möchte wissen, warum das passiert ...
grep

3
@grep Entschuldigung für die späte Antwort. Wenn Sie sowohl Verfügbarkeit (der Cluster fällt nicht aus) als auch Partitionstoleranz (die Datenbank kann Knoten überleben, die nicht kommunizieren können) haben, können Sie nicht garantieren, dass alle Knoten immer alle Daten haben (Konsistenz), da Knoten sind aktiv und akzeptieren Schreibvorgänge, können diese Schreibvorgänge jedoch nicht miteinander kommunizieren.
Chris Heald

4
Spät zur Party, aber es lohnt sich, einige Beispiele in jeder Kategorie zu präsentieren, z. blog.nahurst.com/visual-guide-to-nosql-systems
bitinn

Es wäre wirklich hilfreich, eine einfache Illustration / ein Beispiel über Knotencluster beizufügen, die hier gemeint sind. Ist es ein System oder eine Datentabelle / -sammlung, die über verschiedene Systeme verteilt ist, oder etwas anderes?
Shrotavre

Pragmatisch gesehen sind Knoten meistens einzelne Systeme (oder Software, die auf diesen Systemen ausgeführt wird), die durch einen Netzwerkmechanismus verbunden sind.
Chris Heald

43

P gleich mit C und A zu betrachten, ist ein kleiner Fehler, eher ist der Begriff „2 von 3“ unter C, A, P irreführend. Die prägnante Art und Weise, wie ich den CAP-Satz erklären würde, lautet: "In einem verteilten Datenspeicher müssen Sie zum Zeitpunkt der Netzwerkpartition entweder Konsistenz oder Verfügbarkeit auswählen und können nicht beide erhalten." Neuere NoSQL-Systeme versuchen, sich auf die Verfügbarkeit zu konzentrieren, während herkömmliche ACID-Datenbanken einen höheren Fokus auf Konsistenz hatten.

Sie können sich wirklich nicht für eine Zertifizierungsstelle entscheiden. Eine Netzwerkpartition möchte niemand haben. Sie ist nur eine unerwünschte Realität eines verteilten Systems. Netzwerke können ausfallen. Die Frage ist, welchen Kompromiss Sie in diesem Fall für Ihre Anwendung wählen. Dieser Artikel des Mannes, der diesen Begriff zuerst formuliert hat, scheint dies sehr klar zu erklären.


18

Hier ist, wie ich CAP diskutiere, insbesondere in Bezug auf P.

CA ist nur möglich, wenn Sie mit einer monolithischen Einzelserver-Datenbank einverstanden sind (möglicherweise mit Replikation, aber alle Daten auf einem "Fehlerblock" - Server gelten nicht als teilweise fehlerhaft).

Wenn Ihr Problem eine Skalierung, Verteilung und mehrere Server erfordert, können Netzwerkpartitionen auftreten. Sie benötigen bereits P. Nur wenige Probleme, die ich anspreche, sind für Paradigmen mit nur einem Server zugänglich (oder, wie Stonebraker sagte, "verteilt ist Tischeinsätze"). Wenn Sie ein CA-Problem finden, bieten Lösungen wie ein herkömmliches RDBMS ohne Skalierbarkeit viele Vorteile.

Für mich selten: Also fahren wir mit der Diskussion von AP gegen CP fort.

Sie können nur zwischen AP- und CP-Betrieb wählen, wenn Sie eine Partition haben. Wenn das Netzwerk und die Hardware ordnungsgemäß funktionieren, erhalten Sie Ihren Kuchen und essen ihn auch.

Lassen Sie uns die AP / CP-Unterscheidung diskutieren.

AP - Wenn eine Netzwerkpartition vorhanden ist, lassen Sie die unabhängigen Teile frei arbeiten.

CP - Wenn eine Netzwerkpartition vorhanden ist, fahren Sie Knoten herunter oder lassen Sie Lese- und Schreibvorgänge nicht zu, damit deterministische Fehler auftreten.

Ich mag Architekturen, die beides können, weil einige Probleme AP und andere CP sind - und einige Datenbanken beides können. Unter den CP- und AP-Lösungen gibt es auch Feinheiten.

In einem AP-Dataset haben Sie beispielsweise die Möglichkeit, sowohl inkonsistente Lesevorgänge durchzuführen als auch Schreibkonflikte zu generieren. Dies sind zwei verschiedene mögliche AP-Modi. Kann Ihr System für AP mit hoher Leseverfügbarkeit konfiguriert werden, Schreibkonflikte jedoch nicht zulassen? Oder kann Ihr AP-System Schreibkonflikte mit einem starken und flexiblen Auflösungssystem akzeptieren? Benötigen Sie irgendwann beides oder können Sie ein System auswählen, das nur eines ausführt?

Wie viel Nichtverfügbarkeit erhalten Sie in einem CP-System mit kleinen Partitionen (einzelner Server), falls vorhanden? Eine stärkere Replikation kann die Nichtverfügbarkeit in einem CP-System erhöhen. Wie geht das System mit diesen Kompromissen um?

Dies sind alles Fragen, die Sie mit CP vs AP stellen müssen.

Eine großartige Lektüre in diesem Bereich ist derzeit der Beitrag "12 Jahre später" von Brewer. Ich glaube, dies treibt die GAP-Debatte mit Klarheit voran und empfehle sie sehr.

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


Das CA-System ist in der Tat verwirrend. Ich habe eine Frage zu Ihrem CA-Beispiel einer monolithischen Datenbank. Wenn es sich nur um einen einzelnen Server handelt, woher kommt das "A", da es mir so erscheint, als würde der Ausfall dieses Servers dazu führen, dass kein Dienst verfügbar ist?
Chaooder

1
Gute Frage. Bei Servern kann ein Festplattenfehler oder sogar DIMMs oder Netzteile ausfallen, wenn sie für hohe Verfügbarkeit ausgelegt sind. Stellen Sie sich sogar vor, Sie befinden sich in mehreren Stromnetzen. Sie erhalten eine immer höhere Verfügbarkeit, aber es gibt nie ein "Netzwerk" im Inneren, das die Partitionierung und Ausführung mit nicht übereinstimmenden Komponenten ermöglicht. Zwar gibt es mehr esoterische Hardware (siehe SQL NON-STOP), doch sind Beispiele für RAID-Arrays mit fehlerhaften und wiederaufnehmenden Komponenten heutzutage immer noch üblich und bieten eine sehr hohe Verfügbarkeit auf einem einzelnen Server.
Brian Bulkowski

13

CAP-Theorem

Konsistenz:

Ein Lesevorgang gibt garantiert den letzten Schreibvorgang (wie ACID) für einen bestimmten Client zurück. Wenn während dieser Zeit eine Anforderung eingeht, muss gewartet werden, bis die Datensynchronisierung über / in den Knoten abgeschlossen ist.


Verfügbarkeit:

Jeder Knoten (falls nicht ausgefallen) führt immer Abfragen aus und sollte immer auf Anfragen antworten. Es spielt keine Rolle, ob die neueste Kopie zurückgegeben wird oder nicht.


Partitionstoleranz:

Das System funktioniert weiterhin, wenn Netzwerkpartitionen auftreten.


In Bezug auf AP kann die Verfügbarkeit (immer verfügbar ) mit ( Cassendra ) oder ohne ( RDBMS ) Partitionstoleranz bestehen

Bildquelle


2

Ich bin der Meinung, dass die Partitionstoleranz in keiner der Antworten gut erklärt wird. Nur um die Dinge etwas detaillierter zu erklären, bedeutet der CAP-Satz:

C : (Linearisierbarkeit oder starke Konsistenz) bedeutet ungefähr

Wenn Operation B gestartet wurde, nachdem Operation A erfolgreich abgeschlossen wurde, muss Operation B das System in demselben Zustand wie nach Abschluss von Operation A oder in einem neueren Zustand (aber niemals in einem alten Zustand) sehen.

A :

"Jede Anforderung, die von einem nicht fehlerhaften [Datenbank] -Knoten im System empfangen wird, muss zu einer [fehlerfreien] Antwort führen." Es reicht nicht aus, dass ein Knoten die Anforderung verarbeiten kann: Jeder nicht fehlerhafte Knoten muss in der Lage sein, sie zu verarbeiten. Viele sogenannte „hochverfügbare“ Systeme (dh Systeme mit geringer Ausfallzeit) erfüllen diese Definition der Verfügbarkeit tatsächlich nicht.

P :

Partitionstoleranz (schrecklich falsch benannt) bedeutet im Grunde, dass Sie über ein asynchrones Netzwerk kommunizieren, das Nachrichten verzögern oder löschen kann. Das Internet und alle unsere Rechenzentren verfügen über diese Eigenschaft, sodass Sie in dieser Angelegenheit keine Wahl haben.

Quelle: Awesome Martin Kleppmanns Arbeit

Um nur ein Beispiel zu nennen: Cassandra kann maximal ein AP-System sein. Wenn Sie es jedoch so konfigurieren, dass es basierend auf dem Quorum liest oder schreibt, bleibt es nicht CAP-verfügbar (verfügbar gemäß Definition des CAP-Theorems) und ist nur ein P-System.


1

In einem einfachen CAP-Theorem heißt es, dass es für ein verteiltes System unmöglich ist, alle drei Garantien gleichzeitig zu liefern:

Geben Sie hier die Bildbeschreibung ein

Konsistenz

Jeder Knoten enthält zur gleichen Zeit dieselben Daten

Verfügbarkeit

Es muss jedes Mal mindestens ein Knoten verfügbar sein, um Daten bereitzustellen

Partitionstoleranz

Ein Ausfall des Systems ist sehr selten

Fast jedes System kann nur mindestens zwei Funktionen garantieren, entweder CA, AP oder CP .


0

Konsistenz - Wenn wir die Leseanforderung senden und das Ergebnis zurückgeben, sollte sie den letzten von der Clientanforderung angegebenen Schreibvorgang zurückgeben. Verfügbarkeit - Ihre Anfrage zum Lesen / Schreiben sollte immer erfolgreich sein. Partitionstoleranz - Wenn eine Netzwerkpartition vorhanden ist (Problem, dass einige Computer miteinander kommunizieren), sollte das System weiterhin funktionieren.

In einem Distributed besteht die Möglichkeit, dass eine Netzwerkpartition auftritt, und wir können "P" von CAP nicht vermeiden. Wir wählen also zwischen „Konsistenz“ und „Verfügbarkeit“.

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


0

Einfacher Weg, um den CAP-Satz zu verstehen:

Bei einer Netzwerkpartition muss zwischen perfekter Verfügbarkeit und perfekter Konsistenz gewählt werden.

Die Auswahl der Konsistenz bedeutet, dass die Anfrage eines Clients nicht beantwortet werden kann, da das System nicht garantieren kann, dass der letzte Schreibvorgang zurückgegeben wird. Dies beeinträchtigt die Verfügbarkeit.

Die Auswahl der Verfügbarkeit bedeutet, auf die Anfrage eines Kunden reagieren zu können, das System kann jedoch keine Konsistenz garantieren, dh den zuletzt geschriebenen Wert. Verfügbare Systeme bieten unter den gegebenen Umständen die bestmögliche Antwort.

Diese Erklärung stammt aus diesem ausgezeichneten Artikel . Hoffe es wird helfen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.