1. CPU/Memory Auslastung simulieren
Mit dem Tool stress simuliere ich hohe CPU und Memory Auslastungen. Dies nutze ich vor allem um die Funktionalität von Auto Scaling Automatismen oder Monitoring Alarme zu testen.
Soll eine Auto Scaling Group bei einer Gesamtbelastung der CPU von z. B. 80% eine neue Instanz bereitstellen, kann dies mit diesem Tool simuliert werden.
Ein Scale-In kann simuliert werden, in dem die Lastsimulation beendet wird.
2. Infrastruktur Ausfälle simulieren
Durch die Terminierung von Instanzen können Failover Tests durchgeführt werden. Hierdurch lässt sich prüfen, was passiert, wenn eine EC2 Instanz, der physische Host der Instanz oder die Availability Zone ausfällt.
Außerdem lässt sich hierdurch die Resilienz einer Anwendung testen.
- Führt die Terminierung einer Instanz zum Ausfall weiterer Instanzen?
- Können Anfragen, die eigentlich nichts mit der terminierten Instanz zutun haben, weiterhin ausgeführt werden?
- Ist die Gesamtanwendung weiterhin funktional?
All diese Fragen können durch das simple Terminieren einer Instanz beantwortet werden.
3. Lastspitzen erzeugen
Mit dem Tool JMeter generiere ich API-Anfragen und teste das Verhalten der API, bei unerwarteten Lastspitzen.
In der Vergangenheit habe ich auch schon das Tool wrk verwendet, welches sich für simple HTTP Requests ebenfalls gut eignet.
Eine weitere Möglichkeit ist die Verwendung einer vorgefertigten AWS Lösung. Hierbei handelt es sich um ein CloudFormation Template, welches die benötigten Ressourcen provisioniert. Mithilfe von Containern können verteilte Lasstest durchgeführt werden.
Dieses Tool ist über eine Weboberfläche erreichbar und intuitiv bedienbar. Dieses Tool ist nicht kostenfrei, da es Infrastrukturkosten verursacht.
Ob die Anwendung auch auf erhöhte Anfrageaufkommen reagieren kann und wie lange die Skalierung dauert, lässt sich mit diesen Tools beantworten.
Wichtig: Lasttests müssen dem AWS Support vorher angekündigt werden!
4. AWS Fault Injection Simulator
Mit dem AWS Fault Injection Simulator können verschiedene Szenarien mittels sog. Aktionen simuliert werden. Neben dem Terminieren einer Instanz oder eines gesamten Clusters können auch API Fehler injeziert werden oder eigene Fehlerszenarien mittels SSM implementiert werden.
Dieses Tool ist besonders für Failover Tests bei RDS Datenbanken oder zur Simulation von Netzwerkproblemen hilfreich.
Beim AWS Fault Injection Simulator fallen allerdings je nach Laufzeit der einzelnen Aktionen Kosten an. Diese Kosten sind vernachlässigbar im Vergleich zur manuellen Durchführung der Aktionen. Jedoch habe ich einige Kunden aus dem öffentlichen Sektor, welche nicht ohne weiteres neue kostenpflichtige Services nutzen dürfen.
Fazit
Ein Hauptversprechen der Cloud Nutzung ist die Flexibilität, die Verfügbarkeit von Ressourcen und die Automatisierbarkeit.
Dennoch lassen viele Unternehmen genau diese Vorteile ungenutzt. Durch instabile Architekturen und Infrastrukturkonfigurationen entsteht ein hohes Geschäftsrisiko.
Mithilfe von Infrastrukturtests und der Simulation von Ausfällen kann die Robustheit einer Architektur getestet werden.
Mich interessiert Deine Meinung!
Testest du regelmäßig deine Infrastruktur? Welche Maßnahmen unternimmst du, um Workloads stabiler zu gestalten?
Antworte gerne auf diesen Newsletter und teile mir mit, was dir gefallen hat, was dir gefehlt hat und was du dir für die Zukunft wünschst. Auch über fachlichen Input freue ich mich!
Leseempfehlungen
Bei weiterem Interesse empfehle ich die folgenden Artikel:
stress zur Generierung von CPU und Memory Lasten
AWS Fault Injection Simulator Actions ist der AWS Service für die Simulation von Ausfällen.
Verteilte Lasttests aus dem AWS Lösungsportfolio
Apache JMeter ist ein Tool zur Generierung von Anfragen und durchführung von Tests. Hiermit können komplexe Anfragen simuliert werden.
wrk ist ein Loadtesting Tool zur Generierung von HTTP Anfragen.