it-swarm-eu.dev

CAP-Theorem - Verfügbarkeit und Partitionstoleranz

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!).

Einfach ausgedrückt: Was sind A und P und der Unterschied zwischen ihnen?

158
learninghuman

Konsistenz bedeutet, dass die Daten im gesamten Cluster identisch sind, sodass Sie von jedem Knoten lesen oder auf jeden Knoten 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 weiterhin funktioniert, auch 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 erreichen, müssen Sie auf Konsistenz verzichten. Überlegen Sie, ob Sie zwei Knoten, X und Y, in einer Master-Master-Konfiguration haben. Jetzt gibt es eine Unterbrechung zwischen der Netzwerkkommunikation zwischen X und Y, sodass keine Updates synchronisiert werden können. Zu diesem Zeitpunkt 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/Schreiben Sie von einem beliebigen Knoten und vergewissern Sie sich, dass die Daten identisch sind. Wenn Sie jedoch jemals eine Partition zwischen Knoten entwickeln, sind die Daten nicht synchron (und werden nicht erneut synchronisiert, sobald die Partition aufgelöst ist).
  • [~ # ~] cp [~ # ~] - Daten sind zwischen allen Knoten konsistent und behalten die Partitionstoleranz bei (verhindern die Desynchronisierung von Daten), indem sie nicht mehr verfügbar sind, wenn Ein Knoten fällt ab.
  • [~ # ~] ap [~ # ~] - Knoten bleiben online, auch wenn sie nicht miteinander kommunizieren können und synchronisieren die Daten nach Abschluss der Partition erneut ist behoben, aber es kann nicht garantiert werden, dass alle Knoten die gleichen Daten haben (entweder während oder nach der Partition)

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

308
Chris Heald

P mit C und A gleich zu betrachten, ist ein kleiner Fehler, vielmehr ist der Begriff „2 aus 3“ unter C, A und P irreführend. Ich würde das CAP-Theorem auf den Punkt bringen: "In einem verteilten Datenspeicher müssen Sie zum Zeitpunkt der Netzwerkpartition entweder Konsistenz oder Verfügbarkeit auswählen und können nicht beides abrufen." Neuere NoSQL-Systeme versuchen, sich auf die Verfügbarkeit zu konzentrieren, während traditionelle ACID-Datenbanken sich stärker auf die Konsistenz konzentrieren.

Sie können sich wirklich nicht für eine Zertifizierungsstelle entscheiden. Die Netzwerkpartition ist nichts, was sich jemand wünschen würde. 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 auswählen. Dieser Artikel von dem Mann, der diesen Begriff zum ersten Mal formuliert hat, scheint dies sehr klar zu erklären.

28
jayadev

Ich spreche hier über die GAP, 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 fallen nicht als teilweise aus).

Wenn für Ihr Problem eine Skalierung, eine Verteilung und mehrere Server erforderlich sind, kann es zu Netzwerkpartitionen kommen. Sie benötigen bereits P. Wenige Probleme, die ich ansetze, sind für Einzelserver-Paradigmen zugänglich (oder, wie Stonebraker sagte, "verteilt ist Tabelleneinsatz"). Wenn Sie ein CA-Problem finden, bieten Lösungen wie ein herkömmliches nicht skalierbares RDBMS viele Vorteile.

Für mich selten: Wir diskutieren nun über AP vs CP.

Sie können nur dann zwischen AP- und CP-Betrieb wählen, wenn Sie eine Partition haben. Wenn das Netzwerk und die Hardware korrekt funktionieren, holen Sie sich 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 erlauben Sie keine Lese- und Schreibvorgänge, 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 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, lässt jedoch Schreibkonflikte zu? Oder kann Ihr AP-System mit einem starken und flexiblen Auflösungssystem Schreibkonflikte akzeptieren? Benötigen Sie irgendwann beides oder können Sie ein System auswählen, das nur eines kann?

Wie viel Nichtverfügbarkeit haben Sie in einem CP-System mit kleinen Partitionen (einzelner Server), falls vorhanden? Eine höhere 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 bei CP vs AP stellen sollten.

Eine großartige Lektüre in diesem Bereich ist derzeit Brewers Post "12 Jahre später". Ich glaube, dies bringt die GAP-Debatte mit Klarheit voran und empfehle sie nachdrücklich.

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

17
Brian Bulkowski

CAP Theorem

Konsistenz:

Bei einem Lesevorgang wird garantiert der letzte Schreibvorgang (wie ACID) für einen bestimmten Client zurückgegeben. Wenn in dieser Zeit eine Anfrage eingeht , muss gewartet werden, bis die Datensynchronisation über/in 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 letzte Kopie zurückgegeben wird oder nicht.


Partitionstoleranz:

Das System funktioniert weiterhin, wenn Netzwerkpartitionen auftreten.


In Bezug auf [~ # ~] ap [~ # ~] kann Verfügbarkeit (immer zugänglich) mit Cassendra bestehen ) oder ohne ( [~ # ~] rdbms [~ # ~] ) Partitionstoleranz

Bildquelle

8
mrsrinivas

Konsistenz - Wenn die Leseanforderung gesendet wird und das Ergebnis zurückgegeben wird, sollte sie den letzten Schreibvorgang zurückgeben, der von der Clientanforderung ausgegeben wurde. Verfügbarkeit - Ihre Anforderung zum Lesen/Schreiben sollte immer erfolgreich sein. Partitionstoleranz - Wenn eine Netzwerkpartition besteht (Problem, dass einige Computer miteinander kommunizieren), sollte das System weiterhin funktionieren.

Bei einer Verteilung besteht die Möglichkeit, dass eine Netzwerkpartition auftritt, und wir können ein "P" der CAP nicht vermeiden. Wir wählen also zwischen „Konsistenz“ und „Verfügbarkeit“.

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

0
rajnish

Ich bin der Meinung, dass die Partitionstoleranz in keiner der Antworten gut erklärt ist, 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 bei Abschluss von Operation A oder in einem neueren Zustand (aber niemals in einem alten Zustand) anzeigen.

[~ # ~] a [~ # ~] :

„Jede Anforderung, die von einem fehlerfreien [Datenbank] -Knoten im System empfangen wird, muss zu einer [fehlerfreien] Antwort führen.“ Es ist nicht ausreichend, dass ein Knoten die Anforderung verarbeiten kann. Jeder nicht ausfallende Knoten muss in der Lage sein, sie zu verarbeiten. Viele sogenannte "hochverfügbare" Systeme (d. H. Systeme mit geringen Ausfallzeiten) erfüllen diese Definition der Verfügbarkeit nicht.

[~ # ~] p [~ # ~] :

Partitionstoleranz (furchtbar 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 wirkliche Wahl haben.

Quelle: Ehrfürchtiger 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 Quorum gelesen oder geschrieben wird, bleibt es nicht CAP-verfügbar (verfügbar gemäß Definition des CAP-Satz) und ist nur ein P-System.

0
Anurag Sharma