Fast sechs Monate lang schien alles perfekt zu funktionieren. Diese lange Ruhe war der gefährliche Teil.
Eine Webanwendung verwendete Amazon Elastic File System (EFS) als gemeinsamen Speicher. Mehrere Anwendungsinstanzen konnten auf dieselben Dateien zugreifen, die Bereitstellung war unkompliziert und es gab keinen offensichtlichen Grund, die Architektur in Frage zu stellen.
Dann, scheinbar ohne Vorwarnung, wurde die Website extrem langsam und schien schließlich überhaupt nicht mehr zu funktionieren. Die Serverlast war ungewöhnlich hoch, bei Anfragen kam es zu einem Timeout und die Anwendungsprozesse häuften sich.
Auf den ersten Blick sah es aus wie ein Computerproblem. War es nicht. Die wahre Ursache war ein erschöpftes EFS-Purst-Kreditguthaben.
Warum der Ausfall wie ein CPU-Problem aussah
Eines der irreführenden Symptome war die durchschnittliche hohe Linux-Auslastung. Eine hohe durchschnittliche Auslastung bedeutet nicht unbedingt, dass die CPUs voll ausgelastet sind. Dazu gehören auch Prozesse, die in einem unterbrechungsfreien Zustand warten, was häufig passiert, wenn Prozesse auf Speicher-I/O blockiert sind.
Die Anwendungsmitarbeiter warteten darauf, dass die EFS-Operationen abgeschlossen sind. Es kamen immer wieder neue Anfragen an, mehr Mitarbeiter wurden blockiert und die Warteschlange für Anfragen wuchs:
- Der EFS-Durchsatz wurde eingeschränkt.
- Dateioperationen dauerten länger.
- Die Anwendungsmitarbeiter waren weiterhin damit beschäftigt, auf I/O zu warten.
- Eingehende Anfragen haben sich angesammelt.
- Die Systemlast hat zugenommen.
- Die Website wurde schließlich praktisch nicht mehr verfügbar.
Das Hinzufügen der CPU-Kapazität hätte das zugrundeliegende Problem nicht gelöst.
Warum es sechs Monate gedauert hat, bis es gescheitert ist
Das EFS-Dateisystem wurde für die Verwendung konfiguriert Überragender Durchsatz Modus. In diesem Modus hängt der nachhaltige Basisdurchsatz von der Datenmenge ab, die in der Speicherklasse EFS Standard gespeichert ist. Wenn die Arbeitslast unter diesem Ausgangswert bleibt, sammelt das Dateisystem Burst-Credits an. Wenn der Durchsatz den Basiswert übersteigt, werden diese Credits verbraucht.
Das schafft eine potenziell irreführende Situation für relativ kleine Dateisysteme:
- Das Volumen der gespeicherten Daten führt zu einem niedrigen nachhaltigen Basisdurchsatz.
- Ein vorhandenes Guthaben ermöglicht vorübergehend einen viel höheren Durchsatz.
- Die Anwendung funktioniert normal, obwohl ihre langfristige Arbeitslast den nachhaltigen Ausgangswert übersteigt.
- Das Ungleichgewicht bleibt verborgen, solange Kredite verfügbar sind.
- Wenn der Saldo Null erreicht, sinkt die Leistung dramatisch.
In diesem Fall waren die aufgelaufenen Credits ungefähr sechs Monate lang gültig. Die Architektur war aus Durchsatzsicht bereits zu klein, aber das Guthaben verbarg das Problem. Es war ein sich langsam bewegendes Kapazitätsproblem — eine sechs Monate tickende Zeitbombe.
Temporäre Burst-Performance darf niemals mit nachhaltigem Durchsatz verwechselt werden.
Auswahl des geeigneten EFS-Durchsatzmodus
Überragender Durchsatz
Ein hoher Durchsatz kann angemessen sein, wenn der Durchsatz natürlich mit der Menge der gespeicherten Daten wächst und auf Phasen mit hoher Aktivität ruhigere Phasen folgen. Es erfordert eine sorgfältige Überwachung. Ein kontinuierlich sinkendes Kreditsaldo zeigt, dass die Arbeitsbelastung in diesem Modus nicht tragbar ist.
Elastischer Durchsatz
Elastic Throughput eignet sich im Allgemeinen besser für unvorhersehbare oder stark schwankende Workloads. Der Durchsatz skaliert automatisch mit der Nachfrage, sodass die Anwendung nicht von einem begrenzten Burst-Credit-Saldo abhängt. Dies verbessert die betriebliche Belastbarkeit, obwohl die nutzungsabhängigen Kosten für Workloads mit konstant hohem Durchsatz bewertet werden sollten.
Bereitgestellter Durchsatz
Der bereitgestellte Durchsatz ist nützlich, wenn der erforderliche Durchsatz bekannt ist und höher ist, als das Volumen der gespeicherten Daten es sonst unterstützen würde. Es bietet vorhersehbare Kapazität unabhängig von der Größe des Dateisystems, aber die konfigurierte Ebene muss überprüft werden, wenn sich die Nachfrage ändert.
Es ist auch wichtig, die EFS nicht zu verwechseln Durchsatzmodus mit seinem Leistungsmodus. Durchsatzmodi bestimmen, wie die Durchsatzkapazität bereitgestellt wird; Leistungsmodi betreffen Merkmale wie Latenz und Parallelität.
Überwachung, die hätte erfolgen müssen
Die wichtigste CloudWatch-Metrik für ein EFS-Dateisystem, das Bursting Throughput verwendet, ist BurstCreditBalance. Eine nützliche Monitoring-Basislinie sollte auch Folgendes beinhalten:
BurstCreditBalanceum eine anhaltende Kreditverknappung zu erkennenPercentIOLimitum festzustellen, wann sich das Dateisystem seinem I/O-Limit nähertPermittedThroughputum den aktuell verfügbaren Durchsatz zu verstehenMeteredIOBytesundTotalIOBytesum den I/O-Verbrauch zu beobachten- Anwendungslatenz, Anforderungsdauer, Timeouts und Fehlerraten
- Prozesse, die auf I/O warten, korreliert mit der Auslastung und der tatsächlichen CPU-Auslastung
Es reicht nicht aus, nur CPU-, Speicher- und HTTP-Statuscodes zu überwachen. Gemeinsamer Speicher ist eine wichtige Anwendungsabhängigkeit und muss als Teil des Dienstes überwacht werden, nicht nur als Infrastrukturkomponente.
Ein Alarm sollte ausgelöst werden, lange bevor das Guthaben Null erreicht. Noch wichtiger ist, dass der Trend bewertet werden muss. Ein Saldo, der über mehrere Wochen konstant fällt, weist bereits auf ein strukturelles Durchsatzdefizit hin, auch wenn der absolute Saldo immer noch komfortabel aussieht.
Was ich anders machen würde
- Schätzen Sie den nachhaltigen Durchsatz während der Entwurfsphase ab.
- Wählen Sie den Durchsatzmodus auf der Grundlage des tatsächlichen Zugriffsmusters.
- Behandeln Sie Burst-Credits als temporären Headroom, nicht als normale Kapazität.
- Erstellen Sie CloudWatch-Alarme für Guthaben und I/O-Limits.
- Überwachen Sie die Rate, mit der Credits verbraucht werden.
- Beziehen Sie den EFS-Durchsatz und die Latenz in die Lasttests ein.
- Korrelieren Sie die Linux-Last mit der CPU-Auslastung und der I/O-Wartezeit.
- Prüfen Sie, ob Dateien, auf die häufig zugegriffen wird, wirklich gemeinsamen Netzwerkspeicher benötigen.
- Testen Sie das Anwendungsverhalten unter Speicherdrosselung und erhöhter Latenz.
- Dokumentieren Sie das Betriebsverfahren für die Änderung der Durchsatzmodi.
Letzter Imbiss
EFS kann eine hervorragende Lösung für gemeinsam genutzten Speicher sein, aber sein Verhalten hängt stark vom ausgewählten Durchsatzmodus und Workload-Profil ab.
Der gefährliche Teil dieses Vorfalls war nicht einfach der Leistungsabfall. Das Gefährliche daran war, dass das System sechs Monate lang gut funktionierte, bevor es sich verschlechterte. Das Burst-Credit-Saldo verzögerte das sichtbare Scheitern lange genug, um Vertrauen in eine Architektur zu schaffen, die nicht nachhaltig war.
Die beste Verteidigung ist kein größeres Kreditguthaben. Es geht darum, den richtigen Durchsatzmodus auszuwählen, den nachhaltigen Durchsatz zu verstehen und die Kennzahlen zu überwachen, die ein wachsendes Ungleichgewicht aufdecken, bevor die Benutzer es bemerken.
BERND KUHLENAlle Notizen ↗