In verschiedenen Reden über NoSQL, Datenraster usw. höre ich oft von eventueller Konsistenz. Es scheint, dass die Definition von eventueller Konsistenz in vielen Quellen variiert (und möglicherweise sogar von einer konkreten Datenspeicherung abhängt).
Kann jemand eine einfache Erklärung geben, was eventuelle Konsistenz im Allgemeinen ist und nicht mit einer konkreten Datenspeicherung zusammenhängt?
Antworten:
Eventuelle Konsistenz:
Schließlich wissen alle Server (Sie, ich, Ihr Nachbar) die Wahrheit (dass es morgen regnen wird), aber in der Zwischenzeit kam der Kunde (seine Frau) weg und dachte, es würde sonnig werden, obwohl sie gefragt hat nachdem einer oder mehrere der Server (Sie und ich) einen aktuelleren Wert hatten.
Im Gegensatz zu strikter Konsistenz / ACID-Konformität:
Zu keinem Zeitpunkt kann Ihr Guthaben etwas anderes als die tatsächliche Summe aller auf Ihrem Konto getätigten Transaktionen bis zu diesem Zeitpunkt widerspiegeln.
Der Grund, warum so viele NoSQL-Systeme letztendlich konsistent sind, besteht darin, dass praktisch alle von ihnen für die Verteilung ausgelegt sind. Bei vollständig verteilten Systemen ist die Aufrechterhaltung einer strengen Konsistenz mit einem superlinearen Aufwand verbunden (dh Sie können nur so weit skalieren, bevor sich die Dinge verlangsamen Wenn dies der Fall ist, müssen Sie exponentiell mehr Hardware auf das Problem werfen, um die Skalierung fortzusetzen.
quelle
Eventuelle Konsistenz:
Da das Replizieren der Daten auf mehreren Servern einige Zeit in Anspruch nimmt, werden Anforderungen zum Lesen der Daten möglicherweise an einen Server mit einer neuen Kopie und dann an einen Server mit einer alten Kopie gesendet. Der Begriff "eventuell" bedeutet, dass die Daten schließlich auf alle Server repliziert werden und somit alle über die aktuelle Kopie verfügen.
Eine eventuelle Konsistenz ist ein Muss, wenn Sie Lesevorgänge mit geringer Latenz wünschen, da der antwortende Server seine eigene Kopie der Daten zurückgeben muss und keine Zeit hat, andere Server zu konsultieren und eine gegenseitige Einigung über den Inhalt der Daten zu erzielen. Ich habe einen Blog-Beitrag geschrieben , der dies ausführlicher erklärt.
quelle
Denken Sie, Sie haben eine Anwendung und ihre Replik. Dann müssen Sie der Anwendung ein neues Datenelement hinzufügen.
Anschließend synchronisiert die Anwendung die Daten mit anderen unten gezeigten Replikaten
In der Zwischenzeit erhält ein neuer Client Daten von einem Replikat, das noch nicht aktualisiert wurde. In diesem Fall kann er keine korrekten Aktualisierungsdaten erhalten. Weil die Synchronisation etwas Zeit bekommt. In diesem Fall hat es letztendlich keine Konsistenz
Problem ist, wie können wir schließlich Konsistenz ?
Dazu verwenden wir die Mediator-Anwendung zum Aktualisieren / Erstellen / Löschen von Daten und verwenden die direkte Abfrage zum Lesen von Daten. das hilft, irgendwann Konsistenz zu machen
quelle
Wenn eine Anwendung eine Änderung an einem Datenelement auf einem Computer vornimmt, muss diese Änderung an die anderen Replikate weitergegeben werden. Da die Weitergabe der Änderungen nicht sofort erfolgt, gibt es ein Zeitintervall, in dem einige der Kopien die letzte Änderung aufweisen, andere jedoch nicht. Mit anderen Worten, die Kopien sind inkonsistent. Die Änderung wird jedoch schließlich auf alle Kopien übertragen, und daher der Begriff „eventuelle Konsistenz“. Der Begriff "eventuelle Konsistenz" ist lediglich eine Bestätigung dafür, dass die Weitergabe einer auf einem Computer vorgenommenen Änderung an alle anderen Kopien unbegrenzt verzögert ist. Eine eventuelle Konsistenz ist in zentralisierten Systemen (Einzelkopie) nicht sinnvoll oder relevant, da keine Weitergabe erforderlich ist.
Quelle: http://www.oracle.com/technetwork/products/nosqldb/documentation/consistency-explained-1659908.pdf
quelle
In einfachem Englisch können wir sagen: Obwohl sich Ihr System in einem inkonsistenten Zustand befindet, besteht das Ziel immer darin, für jedes Datenelement irgendwann eine Konsistenz zu erreichen.
quelle
Konsistenz bedeutet letztendlich, dass die Weitergabe von Änderungen einige Zeit in Anspruch nimmt und die Daten möglicherweise nicht nach jeder Aktion im selben Zustand sind, selbst bei identischen Aktionen oder Transformationen der Daten. Dies kann dazu führen, dass sehr schlimme Dinge passieren, wenn die Leute nicht wissen, was sie tun, wenn sie mit einem solchen System interagieren.
Bitte implementieren Sie keine geschäftskritischen Dokumentendatenspeicher, bis Sie dieses Konzept gut verstanden haben. Das Versauen einer Implementierung eines Dokumentdatenspeichers ist viel schwieriger zu beheben als ein relationales Modell, da die grundlegenden Dinge, die vermasselt werden sollen, einfach nicht behoben werden können, da die Dinge, die zum Beheben erforderlich sind, im Ökosystem einfach nicht vorhanden sind. Das Refactoring der Daten eines Inflight-Speichers ist auch viel schwieriger als die einfachen ETL-Transformationen eines RDBMS.
Nicht alle Dokumentenspeicher sind gleich. Einige dieser Tage (MongoDB) unterstützen Transaktionen einer Art, aber die Migration von Datenspeichern ist wahrscheinlich mit den Kosten einer erneuten Implementierung vergleichbar.
WARNUNG: Entwickler und sogar Architekten, die die Technologie eines Dokumentendatenspeichers nicht kennen oder verstehen und Angst haben, dies zuzugeben, aus Angst, ihren Arbeitsplatz zu verlieren, aber klassisch in RDBMS geschult wurden und nur ACID-Systeme kennen (wie unterschiedlich kann es sein) ?) und wer die Technologie nicht kennt oder sich die Zeit nimmt, sie zu erlernen, wird das Entwerfen eines Dokumentdatenspeichers vermissen. Sie können auch versuchen, es als RDBMS oder für Dinge wie Caching zu verwenden. Sie werden atomare Transaktionen, die für ein gesamtes Dokument ausgeführt werden sollen, in „relationale“ Teile zerlegen, wobei vergessen wird, dass Replikation und Latenz Dinge sind oder noch schlimmer, Systeme von Drittanbietern in eine „Transaktion“ ziehen. Sie tun dies, damit ihr RDBMS ihren Datensee spiegeln kann, unabhängig davon, ob es funktioniert oder nicht, und ohne Tests, da sie wissen, was sie tun. Dann werden sie überrascht sein, wenn komplexe Objekte, die in separaten Dokumenten wie "Bestellungen" gespeichert sind, weniger "Bestellpositionen" haben als erwartet oder gar keine. Aber es wird nicht oft oder oft genug passieren, so dass sie einfach vorwärts marschieren. Sie treffen möglicherweise nicht einmal das Problem in der Entwicklung. Anstatt die Dinge neu zu gestalten, werden sie "Verzögerungen" und "Wiederholungsversuche" und "Einchecken" auslösen, um ein relationales Datenmodell zu fälschen, das nicht funktioniert, aber zusätzliche Komplexität ohne Nutzen hinzufügt. Aber jetzt ist es zu spät - das Ding wurde bereitgestellt und jetzt läuft das Geschäft darauf. Schließlich wird das gesamte System weggeworfen und die Abteilung wird ausgelagert und jemand anderes wird es warten. Es funktioniert immer noch nicht richtig, aber sie können weniger teuer ausfallen als der aktuelle Fehler.
quelle
Die eventuelle Konsistenz ähnelt eher einem Spektrum. Auf der einen Seite haben Sie eine starke Konsistenz und auf der anderen Seite haben Sie eine eventuelle Konsistenz. Dazwischen gibt es Levels wie Snapshot, lies meine Schriften, begrenzte Stalenität. Doug Terry hat eine schöne Erklärung in seiner Arbeit über mögliche Konsistenz durch Baseball .
Aus meiner Sicht ist eine eventuelle Konsistenz im Grunde genommen eine Toleranz gegenüber zufälligen Daten in zufälliger Reihenfolge, wenn Sie aus einem Datenspeicher lesen. Alles, was besser ist, ist ein stärkeres Konsistenzmodell. Ein Snapshot enthält beispielsweise veraltete Daten, gibt jedoch dieselben Daten zurück, wenn er erneut gelesen wird, damit er vorhersehbar ist. Manchmal kann die Anwendung Daten tolerieren, die für einen bestimmten Zeitraum veraltet sind und ab dem konsistente Daten erforderlich sind.
Wenn Sie die Bedeutung von Konsistenz betrachten, bezieht sich dies eher auf Gleichmäßigkeit oder mangelnde Abweichung. In Bezug auf Nicht-Computersysteme könnte dies eine Toleranz für unerwartete Abweichungen bedeuten. Es könnte sehr gut durch Geldautomaten erklärt werden. Ein Geldautomat kann offline sein und daher vom Kontostand der Kernsysteme abweichen. Es gibt jedoch eine Toleranz für die Anzeige unterschiedlicher Bilanzen für ein Zeitfenster. Sobald der Geldautomat online ist, kann er mit den Kernsystemen synchronisiert werden und das gleiche Gleichgewicht widerspiegeln. Man könnte also sagen, dass ein Geldautomat letztendlich konsistent ist.
quelle