Was ist eine gute Strategie, um meine Website online zu halten, wenn S3 offline geschaltet wird?

32

Was ist eine gute Strategie, um meine Website online zu halten, wenn S3 offline geschaltet wird?

Wenn S3 US East 1 offline geschaltet wird, wie sollte ich meine App konfigurieren / strukturieren, um zu verhindern, dass meine gesamte Site offline geschaltet wird?

Was sind die besten Strategien, um sich in einer solchen Situation zu diversifizieren?

Jcolebrand
quelle
Was hast du versucht?
030

Antworten:

26

Im März 2015 gab Amazon AWS bekannt, dass sie die regionale S3-Replikation unterstützen. Wenn eine bestimmte Region in S3 offline geschaltet wird, können Sie Dateien von Ihrem Mirror in einer anderen Region bereitstellen.

Quelle: https://aws.amazon.com/blogs/aws/new-cross-region-replication-for-amazon-s3/

Die Praxis, Ihre Infrastruktur online zu halten, indem Sie in eine andere Region wechseln, ist komplex, aber S3 ist eine relativ kleine und einfache Komponente. Netflix hat einen großartigen Artikel über ihre Erfahrungen mit Chaos Gorilla.

Dies gilt auch für Serviceeinbußen wie eine erhöhte Latenz. Nicht nur, wenn ein Dienst, von dem Sie abhängig sind, vollständig offline ist. Netflix hat auch dazu einen Artikel: Chaos Engineering Upgraded .

Evgeny
quelle
Die Strategie, um zu überprüfen, ob etwas funktioniert, besteht darin, zu testen, ob es funktioniert. Gleiches gilt für Sicherungen, Code usw. Ich empfehle, dass Ihre Staging-Umgebung (falls vorhanden) oder Ihre Entwicklungsumgebung (falls vorhanden) von der replizierten Site aus funktioniert, wenn Sie die Tests ausführen.
Evgeny
Es ist bekannt, dass Netflix ganze Regionen offline schaltet, um zu überprüfen, ob ihre Sicherungspläne tatsächlich funktionieren.
Evgeny
Ich erinnere mich, als Netflix mit Amazon
unterging
10

Was Sie verlangen, ist im Grunde eine hohe Verfügbarkeit. Um ein System hoch verfügbar zu machen, benötigen Sie drei Dinge:

  1. Beseitigen Sie einzelne Fehlerstellen
  2. Ein Mechanismus zum Wechseln von einem Endpunkt zu einem anderen
  3. Eine Möglichkeit, Fehler zu erkennen

Beseitigen Sie einzelne Fehlerstellen

Im Fall von S3 wird der Punkt # 1, wie Evgeny hervorhob, durch S3-Cross-Region-Replikation adressiert .

Die Replikation erfolgt jedoch nicht sofort, und Sie möchten überprüfen, ob die Anwendungsreplikation aktiviert werden soll oder nicht. Im Falle eines Ausfalls ist es möglich, dass etwas, das in Ihren Quell-Bucket geschrieben wurde, noch nicht in den Ziel-Bucket kopiert wurde (nicht repliziert wurde). Sie müssen sich überlegen, wie die Anwendung mit einem solchen Szenario umgehen würde. Das hängt wirklich von der Art der Daten ab, was damit gemacht wird und (möglicherweise) von den Endbenutzern oder den Erwartungen des Managements.

Ein Mechanismus zum Wechseln von einem Endpunkt zu einem anderen

Für S3 bedeutet dies, dass die Anwendung im Falle eines Ausfalls das Lesen und Schreiben von / zu Bucket A beenden und stattdessen Bucket B verwenden soll.

Wie dies erreicht wird, liegt meines Wissens vorerst bei Ihnen. Einige andere AWS-Services bieten vollständig transparente Failover-Funktionen, aber mir ist dies für S3 derzeit nicht bekannt.

Es gibt verschiedene Möglichkeiten, dies zu erreichen. Ein Beispiel ist die Verwendung eines Proxys, der den Datenverkehr an den entsprechenden Bucket weiterleitet. Während eines Ausfalls würden Sie den Proxy aktualisieren / ändern, um den Datenverkehr an einen von dem Ausfall nicht betroffenen Bucket weiterzuleiten. Ein weiteres Beispiel wäre, die Anwendungskonfiguration dynamisch zu gestalten und in einem Schlüsselwertspeicher zu speichern. Wenn die Anwendung den KV-Speicher häufig genug nach aktualisierten Eigenschaften durchsucht, können Sie den Speicherort für das Lesen und Schreiben wechseln (Spring Cloud unterstützt beispielsweise einen Listener "EnvironmentChange").

Eine Möglichkeit, Fehler zu erkennen

Nun, das ist einfach, denke ich. Richten Sie einfach eine Write + Read-Schleife ein und alarmieren Sie, sobald etwas nicht stimmt :)

Notizen schließen

  • Wenn Ihre Anwendung in den Bucket schreibt, müssen Sie überlegen, was im Falle eines Failovers passieren würde. Haben alle Schreibvorgänge den Ziel-Bucket erreicht (und können Sie das beurteilen)? Können Sie das Schreiben in den Ziel-Bucket zulassen (und ihn zum neuen "primären" Bucket machen)? Eine sorgfältige Planung vermeidet Split-Brain-Szenarien oder den Verlust von Updates.
  • Abhängig von Ihrem SLA möchten Sie möglicherweise, dass die Punkte 2 und 3 automatisiert oder automatisch ausgeführt werden. Dies erfordert zusätzliche Planung, Tools und Tests, aber gut geschriebene Skripte reagieren immer schneller und vorhersehbarer als Menschen (Fehler haben auch die ärgerliche Angewohnheit, mitten in der Nacht aufzutreten, wenn menschliches Eingreifen gefährlich ist.
  • Erwähnenswert ist, dass selbst die Replikation über Regionen hinweg einzelne Fehlerquellen nicht vollständig eliminiert. Klar, wenn eine Region untergeht, sind Sie abgesichert. Aber was ist, wenn ein US-weites AWS-Problem auftritt? Azure hatte letztes Jahr einen teilweisen, aber globalen Ausfall und auch 2014 einen.
Alexandre
quelle