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?
database
nosql
consistency
availability
Manikandan Kannan
quelle
quelle
Antworten:
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:
Sie sollten beachten, dass CA-Systeme praktisch nicht existieren (auch wenn einige Systeme dies behaupten).
quelle
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.
quelle
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
quelle
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.
Bildquelle
quelle
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
A :
P :
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.
quelle
In einem einfachen CAP-Theorem heißt es, dass es für ein verteiltes System unmöglich ist, alle drei Garantien gleichzeitig zu liefern:
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 .
quelle
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/
quelle
Einfacher Weg, um den CAP-Satz zu verstehen:
Diese Erklärung stammt aus diesem ausgezeichneten Artikel . Hoffe es wird helfen.
quelle