Floß oder nicht? Die beste Lösung für Datenkonsistenz in Cloud-nativen Datenbanken
Titelbild
Dieser Artikel wurde von Xiaofan Luan geschrieben und von Angela Ni umgesetzt.
Die konsensbasierte Replikation ist eine weit verbreitete Strategie in vielen Cloud-nativen, verteilten Datenbanken. Sie hat jedoch einige Schwächen und ist definitiv nicht der Königsweg.
In diesem Beitrag sollen zunächst die Konzepte Replikation, Konsistenz und Konsens in einer Cloud-nativen und verteilten Datenbank erläutert werden. Anschließend soll klargestellt werden, warum konsensbasierte Algorithmen wie Paxos und Raft nicht der Königsweg sind, und schließlich soll eine Lösung für die konsensbasierte Replikation vorgeschlagen werden.
Springe zu:
- Verständnis von Replikation, Konsistenz und Konsens
- Konsensbasierte Replikation
- Eine Protokollreplikationsstrategie für Cloud-native und verteilte Datenbanken
- Zusammenfassung
Verständnis von Replikation, Konsistenz und Konsens
Bevor wir uns eingehend mit den Vor- und Nachteilen von Paxos und Raft befassen und eine am besten geeignete Protokollreplikationsstrategie vorschlagen, müssen wir zunächst die Konzepte der Replikation, Konsistenz und des Konsenses entmystifizieren.
Beachten Sie, dass sich dieser Artikel hauptsächlich auf die Synchronisierung von inkrementellen Daten/Protokollen konzentriert. Wenn von Daten-/Protokollreplikation die Rede ist, wird daher nur auf die Replikation inkrementeller Daten und nicht auf historische Daten Bezug genommen.
Replikation
Bei der Replikation werden mehrere Kopien von Daten erstellt und auf verschiedenen Festplatten, Prozessen, Maschinen, Clustern usw. gespeichert, um die Zuverlässigkeit der Daten zu erhöhen und Datenabfragen zu beschleunigen. Da bei der Replikation die Daten kopiert und an mehreren Orten gespeichert werden, sind die Daten zuverlässiger, wenn Festplatten-, physische Maschinen- oder Clusterfehler auftreten. Darüber hinaus können mehrere Datenreplikationen die Leistung einer verteilten Datenbank steigern, indem sie Abfragen erheblich beschleunigen.
Es gibt verschiedene Replikationsmodi, wie z. B. synchrone/asynchrone Replikation, Replikation mit starker/evtl. Konsistenz, Leader-Follower/dezentralisierte Replikation. Die Wahl des Replikationsmodus hat Auswirkungen auf die Systemverfügbarkeit und -konsistenz. Daher muss ein Systemarchitekt, wie im berühmten CAP-Theorem vorgeschlagen, einen Kompromiss zwischen Konsistenz und Verfügbarkeit eingehen, wenn eine Netzwerkpartition unvermeidlich ist.
Konsistenz
Kurz gesagt, bezieht sich Konsistenz in einer verteilten Datenbank auf die Eigenschaft, die sicherstellt, dass jeder Knoten oder jede Replik dieselbe Sicht auf die Daten hat, wenn sie zu einem bestimmten Zeitpunkt Daten schreiben oder lesen. Eine vollständige Liste der Konsistenzstufen finden Sie in der Dokumentation hier.
Zur Klarstellung: Wir sprechen hier von Konsistenz im Sinne des CAP-Theorems, nicht von ACID (Atomarität, Konsistenz, Isolation, Dauerhaftigkeit). Konsistenz im Sinne des CAP-Theorems bedeutet, dass jeder Knoten im System über dieselben Daten verfügt, während Konsistenz im Sinne von ACID bedeutet, dass ein einzelner Knoten bei jeder potenziellen Übertragung dieselben Regeln durchsetzt.
Im Allgemeinen erfordern OLTP-Datenbanken (Online Transaction Processing) starke Konsistenz oder Linearität, um sicherzustellen, dass:
- Jeder Lesevorgang kann auf die zuletzt eingefügten Daten zugreifen.
- Wenn nach einem Lesevorgang ein neuer Wert zurückgegeben wird, müssen alle folgenden Lesevorgänge, unabhängig davon, ob sie auf demselben oder einem anderen Client stattfinden, den neuen Wert zurückgeben.
Das Wesen der Linearisierbarkeit besteht darin, die Aktualität mehrerer Datenreplikate zu garantieren - sobald ein neuer Wert geschrieben oder gelesen wird, können alle nachfolgenden Lesevorgänge den neuen Wert anzeigen, bis der Wert später überschrieben wird. Ein verteiltes System, das Linearisierbarkeit bietet, kann den Benutzern die Mühe ersparen, mehrere Replikate im Auge zu behalten, und kann die Atomarität und Reihenfolge jeder Operation garantieren.
Konsens
Das Konzept des Konsens wird in verteilte Systeme eingeführt, da die Benutzer darauf erpicht sind, dass verteilte Systeme auf die gleiche Weise funktionieren wie eigenständige Systeme.
Vereinfacht ausgedrückt ist der Konsens eine allgemeine Übereinkunft über Werte. Ein Beispiel: Steve und Frank wollten etwas essen gehen. Steve schlug vor, Sandwiches zu essen. Frank stimmte Steves Vorschlag zu und beide aßen Sandwiches. Sie haben einen Konsens erzielt. Genauer gesagt, ein Wert (Sandwiches), der von einem der beiden vorgeschlagen wurde, wird von beiden akzeptiert, und beide führen auf der Grundlage dieses Wertes Aktionen durch. Ähnlich bedeutet Konsens in einem verteilten System, dass, wenn ein Prozess einen Wert vorschlägt, alle anderen Prozesse im System diesem Wert zustimmen und entsprechend handeln.
Konsens
Konsensbasierte Replikation
Die ersten konsensbasierten Algorithmen wurden zusammen mit der Viewstamped-Replikation im Jahr 1988 vorgeschlagen. Im Jahr 1989 schlug Leslie Lamport Paxos vor, einen konsensbasierten Algorithmus.
In den letzten Jahren hat sich mit Raft ein weiterer konsensbasierter Algorithmus in der Branche durchgesetzt. Er wurde von vielen Mainstream-NewSQL-Datenbanken wie CockroachDB, TiDB, OceanBase usw. übernommen.
Ein verteiltes System muss nicht unbedingt linearisierbar sein, auch wenn es konsensbasierte Replikation einsetzt. Linearisierbarkeit ist jedoch die Voraussetzung für den Aufbau einer verteilten ACID-Datenbank.
Beim Entwurf eines Datenbanksystems sollte die Reihenfolge der Übergabe von Protokollen und Zustandsautomaten berücksichtigt werden. Besondere Vorsicht ist auch geboten, um die Leader-Lease von Paxos oder Raft aufrechtzuerhalten und ein Split-Brain bei einer Netzwerkpartition zu verhindern.
Zustandsautomat der Raft-Replikation
Vor- und Nachteile
Raft, ZAB und das Quorum-basierte Protokoll in Aurora sind allesamt Paxos-Varianten. Die konsensbasierte Replikation hat die folgenden Vorteile:
- Obwohl sich die konsensbasierte Replikation im CAP-Theorem mehr auf die Konsistenz und die Netzwerkpartitionierung konzentriert, bietet sie im Vergleich zur traditionellen Leader-Follower-Replikation eine relativ bessere Verfügbarkeit.
- Raft ist ein Durchbruch, der die konsensbasierten Algorithmen stark vereinfacht hat. Und es gibt viele Open-Source-Raft-Bibliotheken auf GitHub (z. B. sofa-jraft).
- Die Leistung der konsensbasierten Replikation kann die meisten Anwendungen und Unternehmen zufriedenstellen. Mit der Verbreitung von Hochleistungs-SSDs und Gigabyte-NICs (Netzwerkschnittstellenkarten) wird die Last der Synchronisierung mehrerer Replikate verringert, was die Paxos- und Raft-Algorithmen zum Mainstream in der Branche macht.
Ein Irrglaube ist, dass die konsensbasierte Replikation der Königsweg zur Erreichung der Datenkonsistenz in einer verteilten Datenbank ist. Dies entspricht jedoch nicht der Wahrheit. Die Herausforderungen in Bezug auf Verfügbarkeit, Komplexität und Leistung, mit denen konsensbasierte Algorithmen konfrontiert sind, verhindern, dass sie die perfekte Lösung darstellen.
Kompromittierte Verfügbarkeit Der optimierte Paxos- oder Raft-Algorithmus ist stark von der führenden Replik abhängig, was mit einer schwachen Fähigkeit einhergeht, gegen graue Ausfälle zu kämpfen. Bei der konsensbasierten Replikation findet eine Neuwahl des führenden Replikats erst dann statt, wenn der führende Knoten über einen längeren Zeitraum nicht antwortet. Daher ist die konsensbasierte Replikation nicht in der Lage, Situationen zu bewältigen, in denen der führende Knoten langsam ist oder ein Thrashing auftritt.
Hohe Komplexität Obwohl es bereits viele erweiterte Algorithmen auf der Grundlage von Paxos und Raft gibt, erfordert das Aufkommen von Multi-Raft und Parallel-Raft weitere Überlegungen und Tests zur Synchronisierung zwischen Protokollen und Zustandsmaschinen.
Kompromittierte Leistung In einer Cloud-nativen Ära wird die lokale Speicherung durch gemeinsam genutzte Speicherlösungen wie EBS und S3 ersetzt, um die Zuverlässigkeit und Konsistenz der Daten zu gewährleisten. Infolgedessen ist die konsensbasierte Replikation für verteilte Systeme kein Muss mehr. Darüber hinaus bringt die konsensbasierte Replikation das Problem der Datenredundanz mit sich, da sowohl die Lösung als auch EBS über mehrere Replikate verfügen.
Bei der Replikation in mehreren Rechenzentren und in mehreren Clouds beeinträchtigt das Streben nach Konsistenz nicht nur die Verfügbarkeit, sondern auch die Latenz, was zu Leistungseinbußen führt. Aus diesem Grund ist die Linearisierung für die meisten Anwendungen kein Muss für die Disaster-Toleranz in mehreren Rechenzentren.
Eine Protokollreplikationsstrategie für Cloud-native und verteilte Datenbanken
Es ist unbestreitbar, dass konsensbasierte Algorithmen wie Raft und Paxos immer noch von vielen OLTP-Datenbanken verwendet werden. Anhand der Beispiele des PacificA-Protokolls, von Socrates und Rockset können wir jedoch sehen, dass sich der Trend verschiebt.
Es gibt zwei Hauptprinzipien für eine Lösung, die für eine Cloud-native, verteilte Datenbank am besten geeignet ist.
1. Replikation als Dienst
Ein separater Microservice für die Datensynchronisation ist erforderlich. Das Synchronisationsmodul und das Speichermodul sollten nicht mehr innerhalb desselben Prozesses eng gekoppelt sein.
Sokrates beispielsweise entkoppelt Speicherung, Protokollierung und Datenverarbeitung. Es gibt einen dedizierten Protokolldienst (XLog-Dienst in der Mitte der Abbildung unten).
Sokrates-Architektur
Der XLog-Dienst ist ein eigenständiger Dienst. Die Datenpersistenz wird mit Hilfe eines Speichers mit niedriger Latenz erreicht. Die Landing Zone in Sokrates ist dafür zuständig, drei Replikate mit beschleunigter Geschwindigkeit zu halten.
Sokrates XLog-Dienst
Der Leader-Knoten verteilt die Protokolle asynchron an den Log-Broker und gibt die Daten an Xstore weiter. Ein lokaler SSD-Cache kann das Lesen der Daten beschleunigen. Nach erfolgreichem Flush der Daten können die Puffer in der Landing Zone gereinigt werden. Offensichtlich sind alle Protokolldaten in drei Schichten aufgeteilt - Landing Zone, lokale SSD und XStore.
2. Das Prinzip der russischen Puppe
Eine Möglichkeit, ein System zu entwerfen, besteht darin, das Prinzip der russischen Puppe zu befolgen: Jede Schicht ist vollständig und perfekt für die Aufgaben der Schicht geeignet, sodass andere Schichten darauf oder darum herum aufgebaut werden können.
Beim Entwurf einer Cloud-nativen Datenbank müssen wir andere Dienste von Drittanbietern geschickt nutzen, um die Komplexität der Systemarchitektur zu reduzieren.
Es scheint, als kämen wir nicht umhin, mit Paxos einen Single Point Failure zu vermeiden. Dennoch können wir die Protokollreplikation erheblich vereinfachen, indem wir die Leaderwahl an Raft oder Paxos-Dienste auf der Grundlage von Chubby, Zk und etcd übergeben.
Die Rockset-Architektur beispielsweise folgt dem Prinzip der russischen Puppe und verwendet Kafka/Kineses für verteilte Logs, S3 für die Speicherung und einen lokalen SSD-Cache zur Verbesserung der Abfrageleistung.
Rockset-Architektur
Der Milvus-Ansatz
Die abstimmbare Konsistenz in Milvus ähnelt in der Tat den Follower-Reads in der konsensbasierten Replikation. Die Follower-Read-Funktion bezieht sich auf die Verwendung von Follower-Replikaten zur Durchführung von Datenleseaufgaben unter der Prämisse einer starken Konsistenz. Ziel ist es, den Durchsatz des Clusters zu erhöhen und die Belastung des Leaders zu verringern. Der Mechanismus hinter der Follower-Read-Funktion besteht darin, den Commit-Index des letzten Protokolls abzufragen und einen Abfragedienst bereitzustellen, bis alle Daten im Commit-Index auf die Zustandsautomaten angewendet werden.
Bei der Entwicklung von Milvus wurde die Follower-Strategie jedoch nicht übernommen. Mit anderen Worten: Milvus fragt nicht jedes Mal den Commit-Index ab, wenn es eine Abfrage erhält. Stattdessen verwendet Milvus einen Mechanismus wie das Wasserzeichen in Flink, der den Abfrageknoten in regelmäßigen Abständen über den Standort des Commit-Index informiert. Der Grund für einen solchen Mechanismus ist, dass Milvus-Benutzer in der Regel keine hohen Anforderungen an die Datenkonsistenz stellen und für eine bessere Systemleistung einen Kompromiss bei der Datensichtbarkeit akzeptieren können.
Darüber hinaus setzt Milvus mehrere Microservices ein und trennt die Speicherung von der Datenverarbeitung. In der Milvus-Architektur werden S3, MinIo und Azure Blob für die Speicherung verwendet.
Milvus-Architektur
Zusammenfassung
Heutzutage machen immer mehr Cloud-native Datenbanken die Protokollreplikation zu einem individuellen Service. Auf diese Weise können die Kosten für das Hinzufügen von Nur-Lese-Replikaten und heterogener Replikation reduziert werden. Die Verwendung mehrerer Microservices ermöglicht eine schnelle Nutzung der ausgereiften Cloud-basierten Infrastruktur, was bei herkömmlichen Datenbanken nicht möglich ist. Ein einzelner Protokolldienst kann sich auf die konsensbasierte Replikation stützen, aber er kann auch der Russian-Doll-Strategie folgen und verschiedene Konsistenzprotokolle zusammen mit Paxos oder Raft einsetzen, um Linearität zu erreichen.
Referenzen
- Lamport L. Paxos einfach gemacht[J]. ACM SIGACT News (Distributed Computing Column) 32, 4 (Ganze Nummer 121, Dezember 2001), 2001: 51-58.
- Ongaro D, Ousterhout J. In search of an understandable consensus algorithm[C]//2014 USENIX Annual Technical Conference (Usenix ATC 14). 2014: 305-319.
- Oki B M, Liskov B H. Viewstamped Replication: A new primary copy method to support highly-available distributed systems[C]//Proceedings of the seventh annual ACM Symposium on Principles of distributed computing. 1988: 8-17.
- Lin W, Yang M, Zhang L, et al. PacificA: Replikation in log-basierten verteilten Speichersystemen[J]. 2008.
- Verbitski A, Gupta A, Saha D, et al. Amazon aurora: On avoiding distributed consensus for i/os, commits, and membership changes[C]//Proceedings of the 2018 International Conference on Management of Data. 2018: 789-796.
- Antonopoulos P, Budovski A, Diaconu C, et al. Socrates: The new sql server in the cloud[C]//Proceedings of the 2019 International Conference on Management of Data. 2019: 1743-1756.
- Verständnis von Replikation, Konsistenz und Konsens
- Konsensbasierte Replikation
- Eine Protokollreplikationsstrategie für Cloud-native und verteilte Datenbanken
- Zusammenfassung
- Referenzen
On This Page
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word