Multi-Region-Grundlagen 2: Die Daten verstehen - AWS Präskriptive Leitlinien

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Multi-Region-Grundlagen 2: Die Daten verstehen

Die Verwaltung von Daten ist ein nicht triviales Problem, wenn Sie Architekturen mit mehreren Regionen einsetzen. Die geografische Entfernung zwischen Regionen führt zu einer unvermeidlichen Latenz, die sich in der Zeit äußert, die für die Replikation von Daten zwischen Regionen benötigt wird. Kompromisse zwischen Verfügbarkeit, Datenkonsistenz und der Einführung einer höheren Latenz bei einem Workload, der eine Architektur mit mehreren Regionen verwendet, werden notwendig sein. Unabhängig davon, ob Sie asynchrone oder synchrone Replikation verwenden, müssen Sie Ihre Anwendung an die Verhaltensänderungen anpassen, die die Replikationstechnologie mit sich bringt. Probleme im Zusammenhang mit Datenkonsistenz und Latenz machen es sehr schwierig, eine bestehende Anwendung, die für eine einzelne Region konzipiert wurde, in mehrere Regionen umzuwandeln. Es ist wichtig, die Anforderungen an die Datenkonsistenz und die Datenzugriffsmuster für bestimmte Workloads zu verstehen, um die Kompromisse abzuwägen.

2.a: Die Anforderungen an die Datenkonsistenz verstehen

Das CAP-Theorem bietet eine Referenz für Überlegungen zu den Kompromissen zwischen Datenkonsistenz, Verfügbarkeit und Netzwerkpartitionen. Für einen Workload können nur zwei dieser Anforderungen gleichzeitig erfüllt werden. Per Definition umfasst eine Architektur mit mehreren Regionen Netzwerkpartitionen zwischen Regionen, sodass Sie sich zwischen Verfügbarkeit und Konsistenz entscheiden müssen.

Wenn Sie sich für die regionsübergreifende Verfügbarkeit von Daten entscheiden, treten bei transaktionalen Schreibvorgängen keine nennenswerten Latenzen auf, da die Abhängigkeit von der asynchronen Replikation festgeschriebener Daten zwischen Regionen zu einer verringerten Konsistenz zwischen den Regionen führt, bis die Replikation abgeschlossen ist. Bei der asynchronen Replikation besteht bei einem Ausfall in der primären Region eine hohe Wahrscheinlichkeit, dass Schreibvorgänge noch auf die Replikation aus der primären Region warten. Dies führt zu einem Szenario, in dem die neuesten Daten erst verfügbar sind, wenn die Replikation wieder aufgenommen wird, und ein Abgleichprozess erforderlich ist, um laufende Transaktionen zu verarbeiten, die nicht aus der Region repliziert wurden, in der die Unterbrechung aufgetreten ist. Für dieses Szenario müssen Sie Ihre Geschäftslogik verstehen und einen speziellen Prozess erstellen, um die Transaktion erneut abzuspielen oder Datenspeicher zwischen Regionen zu vergleichen.

Für Workloads, bei denen asynchrone Replikation bevorzugt wird, können Sie Services wie Amazon Aurora und Amazon DynamoDB für die asynchrone regionsübergreifende Replikation verwenden. Sowohl die globalen Amazon Aurora Aurora-Datenbanken als auch die globalen Amazon DynamoDB-Tabellen verfügen über CloudWatch Standardkennzahlen von Amazon, um die Überwachung von Replikationsverzögerungen zu unterstützen. Eine globale Aurora-Datenbank besteht aus einer primären Region, in die Ihre Daten geschrieben werden, und bis zu fünf schreibgeschützten sekundären Regionen. Globale DynamoDB-Tabellen bestehen aus multiaktiven Replikattabellen in einer beliebigen Anzahl von Regionen, in die Ihre Daten geschrieben und aus denen Ihre Daten gelesen werden.

Bei einer Strategie mit mehreren Regionen ist es von Vorteil, den Workload so zu gestalten, dass er die Vorteile ereignisgesteuerter Architekturen nutzt, da der Workload die asynchrone Replikation von Daten umfassen kann und der Status durch die Wiedergabe von Ereignissen wiederhergestellt werden kann. Da Streaming- und Messaging-Dienste Nachrichtennutzdaten in einer einzigen Region zwischenspeichern, muss ein regionaler Failover- oder Failback-Prozess einen Mechanismus zur Umleitung von Client-Eingabedatenströmen beinhalten. Der Prozess muss auch Payloads abgleichen, die während der Übertragung übertragen wurden oder nicht zugestellt wurden, die in der Region gespeichert sind, in der die Störung aufgetreten ist.

Wenn Sie sich für die GAP-Konsistenzanforderung entscheiden und eine synchron replizierte Datenbank in allen Regionen verwenden, um Ihre Anwendungen zu unterstützen, die gleichzeitig in mehreren Regionen ausgeführt werden, vermeiden Sie das Risiko eines Datenverlusts und sorgen dafür, dass die Daten zwischen den Regionen synchron bleiben. Dies führt jedoch zu höheren Latenzeigenschaften, da Schreibvorgänge auf mehr als eine Region übertragen werden müssen und die Regionen Hunderte oder Tausende von Meilen voneinander entfernt sein können. Sie müssen dieses Latenzmerkmal in Ihrem Anwendungsdesign berücksichtigen. Darüber hinaus kann die synchrone Replikation das Risiko korrelierter Fehler mit sich bringen, da Schreibvorgänge in mehr als einer Region gespeichert werden müssen, um erfolgreich zu sein. Wenn es innerhalb einer Region zu einer Beeinträchtigung kommt, müssen Sie ein Quorum bilden, damit Schreibvorgänge erfolgreich sind. Dies beinhaltet in der Regel die Einrichtung Ihrer Datenbank in drei Regionen und die Einrichtung eines Quorums für zwei von drei Regionen. Technologien wie Paxos können dabei helfen, Daten synchron zu replizieren und zu übertragen, erfordern jedoch erhebliche Investitionen von Entwicklern.

Wenn Schreibvorgänge eine synchrone Replikation über mehrere Regionen hinweg beinhalten, um hohe Konsistenzanforderungen zu erfüllen, erhöht sich die Schreiblatenz um eine Größenordnung. Eine höhere Schreiblatenz ist normalerweise nicht etwas, das Sie in einer Anwendung nachrüsten können, ohne wesentliche Änderungen, wie z. B. die Timeout- und Wiederholungsstrategie für Ihre Anwendung, zu ändern. Im Idealfall muss dies bei der ersten Entwicklung der Anwendung berücksichtigt werden. Für Workloads mit mehreren Regionen, bei denen die synchrone Replikation Priorität hat, können AWS Partner Lösungen helfen.

2.b: Datenzugriffsmuster verstehen

Arbeitslast-Datenzugriffsmuster sind entweder leseintensiv oder schreibintensiv. Wenn Sie dieses Merkmal für einen bestimmten Workload verstehen, können Sie eine geeignete Architektur für mehrere Regionen auswählen.

Für leseintensive Workloads wie statische Inhalte, die vollständig schreibgeschützt sind, können Sie eine aktiv-aktive Multiregions-Architektur erreichen, die im Vergleich zu einem schreibintensiven Workload eine geringere technische Komplexität aufweist. Die Bereitstellung statischer Inhalte am Netzwerkrand mithilfe eines Content Delivery Network (CDN) gewährleistet die Verfügbarkeit, indem Inhalte zwischengespeichert werden, die dem Endbenutzer am nächsten sind. Die Verwendung von Funktionen wie Origin Failover innerhalb von Amazon CloudFront kann dazu beitragen, dies zu erreichen. Eine weitere Option ist die Bereitstellung von statusfreiem Computing in mehreren Regionen und die Verwendung von DNS, um Benutzer zur nächstgelegenen Region weiterzuleiten, um die Inhalte zu lesen. Sie können Amazon Route 53 mit einer Geolocation-Routing-Richtlinie verwenden, um dies zu erreichen.

Für leseintensive Workloads, die einen höheren Prozentsatz an Lesetraffic als an Schreibverkehr haben, können Sie eine lokale Lesestrategie und eine globale Schreibstrategie verwenden. Das bedeutet, dass alle Schreibanforderungen an eine Datenbank in einer bestimmten Region gesendet werden, die Daten asynchron in alle anderen Regionen repliziert werden und Lesevorgänge in jeder Region ausgeführt werden können. Dieser Ansatz erfordert einen Workload, der letztendlich für Konsistenz sorgt, da lokale Lesevorgänge aufgrund der erhöhten Latenz bei der regionsübergreifenden Replikation von Schreibvorgängen veraltet sein können.

Die globalen Aurora-Datenbanken können dabei helfen, Lesereplikate in einer Standby-Region bereitzustellen, die ausschließlich den gesamten Lesetraffic lokal verarbeiten kann, und einen einzigen primären Datenspeicher in einer bestimmten Region für den Schreibverkehr bereitzustellen. Daten werden asynchron von der Primärdatenbank in Standby-Datenbanken (Read Replicas) repliziert, und die Standby-Datenbanken können zur Primärdatenbank heraufgestuft werden, wenn Sie einen Failover von Vorgängen auf die Standby-Region durchführen müssen. Sie können bei diesem Ansatz auch DynamoDB verwenden. DynamoDB-Tabellen können regionsübergreifende Replikattabellen bereitstellen, die jeweils skaliert werden können, um ein beliebiges Volumen an lokalem Lese- oder Schreibverkehr zu unterstützen. Wenn eine Anwendung Daten in eine Replikattabelle in einer Region schreibt, verteilt DynamoDB den Schreibvorgang automatisch auf die anderen Replikattabellen in den übrigen -Regionen. Mit dieser Konfiguration werden Daten asynchron aus einer definierten Primärregion in Replikattabellen in Standby-Regionen repliziert. Replikattabellen in jeder Region können immer Schreibvorgänge akzeptieren, sodass das Heraufstufen einer Standby-Region zur primären Region auf Anwendungsebene erfolgt. Auch hier muss der Workload irgendwann konsistent sein, weshalb er möglicherweise neu geschrieben werden muss, wenn er nicht von Anfang an darauf ausgelegt war.

Für schreibintensive Workloads sollte eine primäre Region ausgewählt werden, und die Fähigkeit, auf eine Standby-Region umzuschalten, sollte in den Workload integriert werden. Im Vergleich zu einem Active-Active-Ansatz hat ein primärer Standby-Ansatz zusätzliche Kompromisse. Dies liegt daran, dass bei einer Active-Active-Architektur der Workload neu geschrieben werden muss, um intelligentes Routing zu Regionen zu ermöglichen, Sitzungsaffinität herzustellen, idempotente Transaktionen sicherzustellen und potenzielle Konflikte zu bewältigen.

Für die meisten Workloads, die aus Gründen der Resilienz einen Ansatz mit mehreren Regionen verwenden, ist kein aktiv-aktiver Ansatz erforderlich. Sie können eine Sharding-Strategie verwenden, um die Widerstandsfähigkeit zu erhöhen, indem Sie das Ausmaß der Auswirkungen einer Beeinträchtigung auf den gesamten Kundenstamm begrenzen. Wenn Sie einen Kundenstamm effektiv teilen können, können Sie für jeden Shard unterschiedliche Hauptregionen auswählen. Sie können Kunden beispielsweise so teilen, dass die Hälfte der Kunden der Region eins und die andere Hälfte der Region zwei zugeordnet ist. Indem Sie Regionen als Zellen behandeln, können Sie einen Ansatz mit mehreren Regionen schaffen, wodurch der Umfang der Auswirkungen auf Ihre Arbeitslast reduziert wird. Weitere Informationen zu diesem Ansatz finden Sie in der AWS re:Invent-Präsentation.

Sie können den Sharding-Ansatz mit einem Primary-Standby-Ansatz kombinieren, um Failover-Funktionen für die Shards bereitzustellen. Sie müssen einen getesteten Failover-Prozess für die Arbeitslast und auch einen Prozess für den Datenabgleich einrichten, um die Transaktionskonsistenz der Datenspeicher nach dem Failover sicherzustellen. Diese werden später in diesem Handbuch ausführlicher behandelt.

Wichtige Hinweise

  • Es besteht eine hohe Wahrscheinlichkeit, dass Schreibvorgänge, die zur Replikation noch ausstehen, nicht in die Standby-Region übernommen werden, wenn ein Fehler auftritt. Daten sind erst verfügbar, wenn die Replikation wieder aufgenommen wird (unter der Annahme einer asynchronen Replikation).

  • Im Rahmen des Failovers ist ein Datenabgleich erforderlich, um sicherzustellen, dass bei Datenspeichern, die asynchrone Replikation verwenden, ein transaktionskonsistenter Zustand aufrechterhalten wird. Dies erfordert eine spezielle Geschäftslogik und wird nicht vom Datenspeicher selbst verwaltet.

  • Wenn eine hohe Konsistenz erforderlich ist, müssen die Workloads so angepasst werden, dass sie die erforderliche Latenz eines Datenspeichers, der synchron repliziert, tolerieren.