Frage

http://en.wikipedia.org/wiki/cap_theorem

http://www.cs.berkeley.edu/~brewer/cs262b-2004/podc-keynote.pdf

Ich denke, es ist nicht sehr einfach warum nur zwei von

  1. Konsistenz
  2. Verfügbarkeit
  3. Partitionstoleranz

kann für ein bestimmtes verteiltes Datenbanksystem halten. Diese Vermutung wurde bewiesen, aber es gibt eine einfachere Möglichkeit, zu sehen, warum wahrscheinlich das könnte halten?

Ich suche keinen Beweis, nur eine gute Möglichkeit zu verstehen, warum dieser Theorem sinnvoll sein könnte. Was ist die Argumentation?

War es hilfreich?

Lösung

OK, stellen Sie uns vor, Sie haben eine verteilte Datenbank. Nehmen wir an, Sie haben einen Knoten in Oregon und einen in Kalifornien. Die CAP -Theorie besagt, dass Sie beim Einrichten dieser Art von Datenbank Probleme begegnen.

Wenn Sie beispielsweise Daten aus einer Datenbank abfragen, muss sie mit den Daten in der anderen Datenbank übereinstimmen. Dies stellt sicher, dass der Wert, den Sie in einer Datenbank haben, in der anderen garantiert sein (Konsistenz der CAP -Theorie). Auf diese Weise können Sie die Daten in einer Datenbank aktualisieren und von einer anderen abfragen, wobei die gleichen Ergebnisse erzielt werden.

A computer updating data in Oregon, transfers the data to California

Wenn wir die Daten im Oregon -Knoten aktualisieren, werden die Daten an den kalifornischen Knoten gesendet, sodass die Datenbanken konsistent sind. Um die Konsistenz wirklich aufrechtzuerhalten, müssen wir sicherstellen, dass beide Datenbanken das Update erhalten, bevor beide die Daten wirklich speichern können (zweiphasige Commit unter Verwendung verteilter Transaktionen). Mit anderen Worten, wenn die kalifornische Datenbank die Daten aus irgendeinem Grund nicht speichern kann (z. B. Festplattenfehler), speichert die Datenbank in Oregon die Daten nicht und fehlschlägt die Transaktion.

Das Problem mit verteilten Transaktionen wie dem oben genannten kommt, wenn wir eine hohe Verfügbarkeit haben möchten. In diesem obigen Szenario ist der Prozess des Versuchs, beide Datenbanken synchronisiert zu erhalten, ein sehr, sehr langsamer Prozess. (Stellen Sie sich vor, wir müssen die Daten von Oregon nach Kalifornien senden, stellen Sie sicher, dass sie dort ankommt. Stellen Sie sicher, dass beide Datenbanken Sperren für die Daten haben usw.) Dies führt zu großen Problemen, wenn wir ein System wünschen, das auch während Zeiten hoher Nachfrage. (Dies ist das Verfügbarkeit des Cap -Theorems.)

Normalerweise tun wir, um eine hohe Verfügbarkeit zu gewährleisten, Replikation anstelle von verteilten Transaktionen. Anstatt zu garantieren, dass Kalifornien die Daten akzeptieren kann, speichern wir sie einfach im Oregon -Knoten und senden die Daten dann an Kalifornien, wenn wir uns dazu anwenden. Dies garantiert, dass wir die Daten immer speichern können, unabhängig davon, ob Kalifornien bereit ist, die Daten zu speichern oder nicht.

The Oregon node updates the data while California reads the data.  Later, the data is moved to California

Dies verbessert die Verfügbarkeit, aber auf Kosten der Konsistenz. Wenn jemand die Daten in Oregon aktualisiert und dann (gleichzeitig) die Daten in Kalifornien liest, erhalten sie die neuen Daten nicht-die Datenbanken sind nicht mehr konsistent. Tatsächlich werden sie nicht konsistent sein, wenn Oregon die Daten an Kalifornien sendet!

Das ist also der Kompromiss zur Verfügbarkeit-VSCE.

Partitionstoleranz ist der dritte Aspekt der CAP -Theorie. Die Partitionierung ist in diesem Zusammenhang die Idee, dass eine Datenbank (oder ein anderes verteiltes System) in separate Abschnitte einbrechen und dennoch korrekt funktionieren.

Die Frage stellt sich, was passiert, wenn beide Datenbanken korrekt ausgeführt werden, aber der Link von Oregon nach Kalifornien ist abgetrennt?

Oregon is being updated while the California node is being read.  The network between the nodes is severed.

Wenn wir die Datenbank in Oregon aktualisieren, müssen wir die Daten auf die eine oder andere Weise nach Kalifornien bringen (verteilte Transaktion oder Replikation). Wenn jedoch der Zusammenhang zwischen den beiden getrennt ist, ist das System partitioniert und die Datenbanken sind nicht mehr miteinander verbunden.

In diesem Fall können Sie die Möglichkeiten der Verfügbarkeitskosten einstellen, Aktualisierungen (um Konsistenz aufrechtzuerhalten) zu ermöglichen oder die Aktualisierungen (zur Aufrechterhaltung der Verfügbarkeit) auf Kosten der Konsistenz zuzulassen.

Wie Sie sehen können, schafft Partitionstoleranz direkte Kompromisse zwischen Konsistenz und Verfügbarkeit.


Es gibt offensichtlich mehr als das, aber das sind einige Beispiele dafür, wie diese drei Hauptaspekte verteilter Systeme für und gegeneinander funktionieren. Julian Brownes Die Erklärung der CAP -Theorie ist ein ausgezeichneter Ort, um mehr zu erfahren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit dba.stackexchange
scroll top