Zum Inhalt springen

CAP-Theorem

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 30. Januar 2012 um 18:27 Uhr durch 212.80.236.162 (Diskussion) (Eigenschaften). Sie kann sich erheblich von der aktuellen Version unterscheiden.

Das CAP-Theorem oder Brewer's Theorem besagt, dass es für ein System zum verteilten Rechnen unmöglich ist, gleichzeitig die drei Eigenschaften Konsistenz, Verfügbarkeit und Partitionstoleranz zu garantieren.[1][2]

Eigenschaften

Veranschaulichung des CAP-Theorems

Laut dem CAP-Theorem kann ein verteiltes System zwei der folgenden Eigenschaften gleichzeitig erfüllen, jedoch nicht alle drei[3].

  • Konsistenz (C): Alle Knoten sehen zur selben Zeit dieselben Daten.
  • Verfügbarkeit (A): Alle Anfragen an das System werden stets beantwortet.
  • Partitionstoleranz (P): Das System arbeitet auch bei Verlust von Nachrichten, einzelner Netzknoten oder Partition des Netzes weiter.

Da nur zwei dieser drei Anforderungen in verteilten Systemen gleichzeitig vollständig erfüllt sein können, wird das CAP-Theorem oft als Dreieck visualisiert, bei dem eine konkrete Anwendung sind auf eine der Kanten einordnen lässt.

Die System-Eigenschaften C, A und P können dabei als graduelle Größen gesehen werden, d.h. die Verfügbarkeit ist hoch, wenn das System schnell antwortet, und gering, wenn das System langsam antwortet. In Hinblick auf die Konsistenz bedeutet das, dass diese entweder sofort sichergestellt ist (etwa ACID-Prinzip relationaler Datenbanksysteme) oder erst nach einem gewissen Zeitfenster der Inkonsistenz („BASE“-Prinzip (= Basically Available, Soft state, Eventual consistency) vieler NoSQL-Datenbanken).

Geschichte

Das Theorem entstand im Jahr 2000 als eine Vermutung des Informatikers Eric Brewer an der University of California, Berkeley beim "Symposium on Principles of Distributed Computing" (PODC).[4] Im Jahr 2002 veröffentlichten Seth Gilbert und Nancy Lynch vom MIT einen axiomatischen Beweis von Brewer's Vermutung, und etablierten diese somit als Theorem.[1]

Beispiele

AP – Domain Name System (DNS) oder Cloud Computing

Das Domain Name System ist der Internet-Dienst, mit dem symbolische Hostnamen wie de.wikipedia.org zu numerischen IP-Adressen zur TCP/IP-Kommunikation aufgelöst werden.

Das DNS fällt in die Kategorie AP. Die Verfügbarkeit ist extrem hoch, ebenso Toleranz gegenüber dem Ausfall einzelner DNS-Server. Allerdings ist die Konsistenz nicht immer sofort gegeben: es kann mitunter Tage dauern, bis ein geänderter DNS-Eintrag an die gesamte DNS-Hierarchie propagiert ist und damit von allen Clients gesehen wird.

Cloud-Plattformen setzen auf eine horizontale Skalierung, das heißt die Last wird auf viele Knoten verteilt, die aus billiger, nicht unbedingt ausfallsicherer Hardware bestehen (können). Daher muss eine Cloud-Anwendung zwingend Toleranz gegenüber dem Ausfall einzelner Knoten zeigen können. Eine hohe Verfügbarkeit wird auch gefordert. Daraus folgt, dass eine Cloud-Anwendung (zumindest in großen Teilen) auch in die Kategorie AP fällt. Beispiele für Web-Anwendungen, die nicht auf strenge Konsistenz angewiesen sind, wären Social-Media-Sites wie Twitter oder Facebook; wenn einzelne Nachrichten nicht bei allen Nutzern gleichzeitig eintreffen, ist dadurch die prinzipielle Funktion des Dienstes nicht beeinträchtigt.

Da eine strenge Konsistenz im Sinne des ACID-Prinzips wegen des CAP-Theorems hier nicht mehr gewährleistet werden kann, eine völlig inkonsiste Datenhaltung aber auch nicht gewünscht ist, muss man sich mit schwächeren Konsistenzbedingungen abfinden. Als Gegenstück zum ACID-Prinzip der relationalen Datenbanken setzen viele NoSQL-Datenbanken auf das BASE-Prinzip: Basically Available, Soft State, Eventual consistency. Eventual consistency lässt sich sinngemäß gut mit „schlussendlicher Konsistenz“ übersetzen, das heißt: das System ist nach Ablauf einer gewissen (möglichst kurzen) Zeitspanne der Inkonsistenz wieder in einem konsistenten Zustand.

CA – Relationales Datenbank Management System (RDBMS)

Die klassischen Relationalen Datenbanken wie DB2 oder Oracle garantieren vor allem eins: Konsistenz. Grundlagen dieser System ist das ACID-Prinzip: Zugriffe sind stets atomar, konsistent, isoliert und dauerhaft.

Ein RDBMS fällt in die Kategorie CA. Verfügbarkeit und Konsistenz sind bei einem Einzelsystem in der Regel sehr hoch. Setzt man ein Datenbank-Cluster mit Replikation zwischen mehreren Knoten ein, sinkt die Verfügbarkeit, da eine konsistente Transaktion nun länger dauert. Mit steigender Anzahl der Knoten verlängert sich die Dauer einer Transaktion.

CP - Banking-Anwendungen

Für verteilte Finanzanwendung wie z.B. Geldautomaten ist die Konsistenz der Daten oberstes Gebot: Ein abgehobener Geldbetrag muss zuverlässig auch auf der Kontenseite abgebucht werden, eingezahltes Geld muss auf dem Konto erscheinen. Diese Anforderung muss auch bei Störungen im Datenverkehr sichergestellt werden (Partitionstoleranz).

Gegenüber der Konsistenz und der Partitionstoleranz ist die Verfügbarkeit zweitrangig (CP): bei Netzwerkstörungen soll ein Geldautomat oder ein anderer Service eher nicht verfügbar sein als nicht korrekte Transaktionen abwickeln.

Siehe auch

Fallacies of Distributed Computing - Gängige Irrtümer bei der verteilten Datenverarbeitung.

Einzelnachweise

  1. a b Lynch, Nancy, and Seth Gilbert. “Brewer's conjecture and the feasibility of consistent, available, partition-tolerant web services.” ACM SIGACT News, v. 33 issue 2, 2002, p. 51-59.
  2. julianbrowne.com: Brewer's CAP Theorem. Retrieved 02-Mar-2010.
  3. royans.net: Brewers CAP theorem on distributed systems
  4. Brewer, Eric. Towards Robust Distributed Systems