Storm Forecast Blog

On APIs, Load Testing, Performance and StormForger.


Quizduell im Lasttest

Dear English reader, I'll translate this post later take a look at the translated post. tl;dr: I had the opportunity to load test the API backend for a big German TV show („Quizduell im Ersten“) by simulating up to 1 million users.

Nach dem Start des Quizduell im Ersten mit einigen Pannen, wurde ich als externer Lasttester von grandcentrix angefragt. Mittlerweile hat grandcentrix auf dem Unternehmensblog ein FAQ veröffentlicht, in dem vor allem technische Fragen angesprochen und erklärt werden. Die meisten Informationen in diesem Beitrag stammen aus diesen FAQs. Ich bitte um Verständnis, dass ich keine weiteren Details kommunizieren kann.

Rückblick

Ohne auf Details der Spielmechanik des Quizduell im Ersten einzugehen, war eine der großen technischen Herausforderungen die Erreichung der sogenannten „TV Synchronität“: Es soll ein interaktives, Echtzeit-ähnliches Spielen mit dem Publikum über die Quizduell App ermöglicht werden. Dazu wird, je nach Spielzustand, alle 1 bis 10 Sekunden mindestens ein Mal mit der API kommuniziert. Das bedeutet, dass bei Spitzenlast die Anzahl der Spieler der Anzahl der API Anfragen pro Sekunde entspricht.

In den FAQs zum Quizduell im Ersten stellt grandcentrix dar, worin die maßgeblichen Probleme beim Sendungsstart bestanden. Die Komplexität und die Anforderungen an das System wurden zurückgebaut und gleichzeitig wurden externe Lasttests durchgeführt, um den Umbau abzusichern. Über die ursprüngliche getestete Spitzenlast von 85.000 Anfragen pro Sekunde hinaus wurde das neue System mit meiner Hilfe auf über 330.000 Anfragen pro Sekunde getestet, das entspricht etwa 1 Million Quizduell Spielern.

Ich habe die letzten Tage intensiv mit dem grandcentrix Team an der Qualitätssicherung gearbeitet und viele Belastungstests durchgeführt. Ein paar weitere Details möchte ich hier darlegen.

Testsetup

Der Testcluster bestand aus bis zu 50 AWS EC2 Instanzen mit 800 CPU Cores, 1,5 TB RAM und über 50GBits Bandbreite. Das Setup wurde so gewählt, um Effekte durch Überlastung in jedem Fall auszuschließen.

Der Testcase wurde so modelliert, dass er das Quizduell spielen kann. Ein simulierter Client reagiert auf Zustandsänderungen im Spiel, beachtet Anweisungen zum Abfrageintervall, wählt Kategorien und beantwortet sogar Fragen – wenn letzteres auch nicht immer richtig :)

Nachdem der Test modelliert war, übernahm ich die Provisionierung der Testsysteme und die Durchführung und Überwachung des jeweiligen Testablaufes. Das grandcentrix Team konnte sich somit voll und ganz auf die Analyse der internen Metriken und Logs konzentrieren, während ein Bot automatisch den aktuellen Stand (Anzahl Benutzer, aktuelle Request Raten, Bandbreite, Latenzen etc.) in einen Slack Chat Room berichtete. Abschließend wurden relevante Metriken und Charts erzeugt, die vom Team ausgiebig analysiert und interpertiert wurden.

Herausforderungen

Die Herausforderungen beim Testen bestanden vor allem darin, dass die Quizduell API auf Google App Engine lief und somit ein detailierter Einblick in die Laufzeitumgebung erschwert wurde.

  • DOS Protection: Bedingt dadurch, dass der Test nicht von 1.000.000 Rechnern und von selbiger Anzahl IPs kommt, führte dazu, dass sich immer wieder die DOS Protection von Google aktivierte. Hier war stets das Eingreifen des Google Support Teams erforderlich.

  • Google Magic: Es gibt eine Reihe von Parametern, die das (Skalierungs-)Verhalten von App Engine steuern – einige dieser Parameter kann nur Google selber ändern. Hier galt es die Einstellungen weiter zu justieren, um die Antwortzeiten zu optimieren.

  • Netzwerk: Bei den hohen Request-Raten und der damit verbundenen Netzwerkbandbreite treten oft seltsame Effekte auf. Unerklärliche Anstiege beim TCP Verbindungsaufbau, Flow Control und viele andere Phänomene gilt es so gut wie möglich auf eine Ursache einzugrenzen, zu erklären und wenn möglich zu beseitigen.

Ergebnisse

Im Wesentlichen haben wir durch die umfangreichen Lasttests im Vorfeld zum Neustart der Sendung mit App bestätigen können, dass die Mobile Mass Response Plattform in der Lage ist das Quizduell im Ersten handhaben zu können. Die vergangenen Sendungen haben ebenfalls bestätigt, dass die meisten initialen Probleme mit der Performance beseitigt werden konnten.

„Sebastian war eine große Erleichterung beim Aufsetzen und Durchführen der erforderlichen Lasttests, während der funktionalen Anpassungen. Das Verhalten unserer Mobile Mass Response Plattform unter Last beobachten zu können, war überaus hilfreich in der stressigen Zeit der letzten Tage […]“

Ralf Rottmann (@ralf), grandcentrix GmbH

Hier noch ein paar Zahlen: Wir haben insgesamt 1.213.583.187 Anfragen in über 50 Lasttests an das Quizduell System gemacht und dabei rund 2,21 TB an Daten bewegt. Die Fehlerrate lag bei knapp 0,000000216% (oder 1 Fehler auf 4.624.616 Anfragen).

Nachtrag: Am vergangenen Freitag haben wir ein paar weitere große Tests mit weiteren 800+ Millionen Anfragen und fast einem weiteren Terrabyte an Datentransfer durchgeführt. Wir konnten erfolgreich die letzten Probleme identifizieren und beseitigen.

Create repeatable Performance & Load Tests easily using our JavaScript DSL to verify your HTTP APIs. StormForger enables you to do continuous performance testing to make the web a faster place. Learn more...

definition.setTarget("API.EXAMPLE.COM");

definition.setArrivalPhases([
  {
    duration: 5 * 60,  // 5min in seconds
    rate: 1.0,         // clients per seconds to launch
  },
]);

definition.session("hello world", function(session) {
  session.get("/", { tag: "root" });
});
:production