[PYTHON] Lasttest der Smartphone-Spiel-App Iroha

Ich habe einen Auslastungstest für die Smartphone-Spiel-App durchgeführt, daher möchte ich mitteilen, wie es gemacht wurde. Dieses Mal haben wir einen Belastungstest mit 100.000 DAUs durchgeführt.

Benutztes Werkzeug

Lasttest mit einfacher Konfiguration

Zunächst wird der Belastungstest mit einer einfachen Konfiguration durchgeführt, einschließlich der Bedeutung der Kommunikationsbestätigung. Dieses Mal habe ich eine API erstellt, die nur den übergebenen JSON wiedergibt, und einen Lasttest mit Locust durchgeführt. Wenn Sie dies plötzlich mit mehreren Einheiten tun, wissen Sie nicht, wo Sie Anpassungen vornehmen müssen, wenn die Leistung nicht erreicht wird. Lassen Sie uns zunächst sehen, wie gut das Django-Framework auf dem App-Server selbst funktioniert. (Ursprünglich ist es besser, dies mit einfachem Django zu tun, diesmal jedoch in Form des Hinzufügens einer API zu Django des Anwendungsservers, den wir entwickeln.)

server_1.png

Infolgedessen handhabte der App-Server von Django ungefähr 600 RPS bei ungefähr 70% CPU-Auslastung. Ich denke, es ist eine gute Idee, es mit dem Benchmark von Django selbst zu vergleichen und zu überprüfen, ob es extrem langsam ist.

Ein weiterer Vorteil dieses Tests besteht darin, dass Sie sehen können, ob die Lade-Client-Heuschrecke selbst eine gute Leistung erbringen kann.

Wenn die einfache Konfiguration funktioniert, erstellen Sie ein Testszenario.

Definieren des zu testenden Benutzers und Erstellen eines Testszenarios

Bestimmen Sie bei der Durchführung eines Belastungstests die erwarteten Benutzerdefinitionen und Ziele, die erreicht werden sollen.

Ich denke, es hängt von den Eigenschaften der App ab, aber dieses Mal werden wir die Benutzer wie folgt als ** starke Benutzer **, ** allgemeine Benutzer **, ** neue Benutzer ** definieren.

Selbst wenn wir von 100.000 DAUs ausgehen, unterscheiden sich Anzahl und Art der APIs, die getroffen werden können, je nachdem, ob es viele neue Benutzer oder schwere Benutzer gibt, und die Last ist völlig unterschiedlich. Wenn es viele starke Benutzer gibt, wird der Kern des Spiels, wie Quests und PvP, viel gespielt. Wenn es dagegen viele neue Benutzer gibt, wird die API für die Registrierungsverarbeitung nach der Anmeldung häufig beeinträchtigt.

Da wir die Benutzer in verschiedene Segmente unterteilt haben, haben wir wie folgt definiert, welche APIs als Nächstes betroffen sind.

user_1.png

  1. Definieren Sie die API, auf die jedes Segment trifft
  2. Definieren Sie, wie oft jedes Segment seine API trifft
  3. Berechnen Sie die Anzahl der APIs, die ein Benutzer in jedem Segment pro Tag trifft (340 für schwere Benutzer in der Abbildung).
  4. Multiplizieren Sie 3 mit der DAU jedes Segments, addieren Sie sie und erhalten Sie die Anzahl der täglichen Anforderungen, die an das System gesendet werden (13.510.000 in der Abbildung). Der durchschnittliche RPS kann mit 5.4 berechnet werden
  5. Das System muss 469 RPS (Request per Seconds) ausgeben, was auf der Grundlage der bisherigen Erfahrungswerte auf das Dreifache des Spitzenwerts geschätzt wird.

Ich habe tatsächlich ein Szenario mit Locust erstellt und einen Lasttest für das durchgeführt, was oben definiert wurde.

Laden Sie den Test anhand eines Szenarios auf einen Server

Plötzlich können Sie es mit nur einem ohne Auslastungstest mit mehreren App-Servern tun. Ziel ist es, die Kommunikation von Testszenarien zu bestätigen und Kosten zu senken. Das plötzliche Einrichten mehrerer App-Server ist nicht gut, da es selbst bei verschiedenen Versuchen und Fehlern aufgrund von Fehlern Geld kostet. Testen Sie das Testszenario einschließlich MySQL und Redis mit der folgenden Konfiguration.

server_2.png

Belastungstest, um der erwarteten Belastung standzuhalten

Richten Sie den Server schließlich wie unten gezeigt ein und führen Sie Auslastungstests durch, bis der Ziel-RPS erreicht ist. Wenn die Belastung des App-Servers hoch ist (die CPU beträgt 70% oder mehr usw.), erhöhen Sie den App-Server oder verbessern Sie die Spezifikationen. Gleiches gilt für MySQL und Redis.

server_3.png

Zusammenfassung

Ich habe darüber geschrieben, wie ich den Belastungstest in meinem Projekt durchgeführt habe, aber die folgenden Punkte waren die Punkte.

Recommended Posts

Lasttest der Smartphone-Spiel-App Iroha
Prüfung
Lasttest der Smartphone-Spiel-App Iroha
Verschiedene Python-Visualisierungstools
Laden Sie den Test-Websocket mit Locust
Prüfung
Lasttest der Smartphone-Spiel-App Iroha
Probleme und Gegenmaßnahmen bei der Entwicklung von Smartphone-App-Spielen Teil 1
Probleme und Gegenmaßnahmen bei der Entwicklung von Smartphone-App-Spielen Teil 2
Zusammenfassung der Testmethode