Couple Up! Love Show Story
Native Games Studio ist ein Indie-Spieleentwickler, der sich auf interaktive Handyspiele mit Geschichten spezialisiert hat. Es wurde 2020 mit einem dreiköpfigen Team gegründet und ist inzwischen zu einem kleinen Studio herangewachsen, das die Simulation Couple Up! - eine Liebes-Reality-Show-Simulation für iOS- und Android-Spieler.
Spiel-Tests
Wir testeten das Backend des Couple Up! Handyspiels, indem wir Lasttests durchführten, Serverkonfigurationen überprüften und eine eingehende Überprüfung der API-Codebasis vornahmen. Unsere fachkundigen Vorschläge helfen bei der Behebung von Engpässen und sorgen für ein ununterbrochenes Spielerlebnis für eine große Anzahl von Spielern.
Mehr erfahrenLeistungsprüfung
Wir halfen unserem Kunden bei der Identifizierung von Testfällen, bei denen der Server Probleme hatte und mit einer erheblichen Verzögerung reagierte. Wir zeigten verschiedene Bereiche zur Verbesserung der Leistung auf - von der Anpassung der Datenbankkonfigurationen über die Migration zu einer anderen Architektur bis hin zur Verbesserung der Qualität des API-Codes.
Mehr erfahrenHerausforderung
Native Games Studio wandte sich an QAwerk, um die Herausforderungen einer wachsenden Benutzerbasis zu bewältigen. Sie wollten sicherstellen, dass das Couple Up!-Spiel unter dem erheblich gestiegenen Zustrom von Spielern nicht träge oder absturzgefährdet ist.
Dies ist die Aufgabe, die wir zu erfüllen hatten:
- Lasttests. Wir mussten mehrere API-Endpunkte testen, indem wir die Serveranfragen schrittweise erhöhten und die Antwortzeit des Servers verfolgten. Lasttests helfen dabei, die maximale Betriebskapazität und die Bruchstelle der Anwendung zu ermitteln und die notwendigen Anpassungen vorzunehmen, bevor die Benutzer negative Probleme feststellen.
- Prüfung der Serverkonfiguration. Unsere Aufgabe war es, die Konfigurationen des Hetzner-Servers zu überprüfen, wie z. B. die Überprüfung von Netzwerkengpässen, der nginx-Konfiguration, die Überprüfung von Docker-Containern, Kernel- und Service-Einstellungen. Dieser Teil wurde von unserem DevOps-Ingenieur durchgeführt.
- Code-Überprüfung. Wir wurden auch gebeten, den Code des Servers zu überprüfen und auf verbesserungswürdige Bereiche hinzuweisen. Wir überprüften ihn anhand von Kriterien wie Codequalität, Fehlerbehandlung, Caching und Testbarkeit. Da der Code eine mit Flask erstellte REST-API war, wurde er von unserem leitenden Python-Entwickler überprüft.
Bevor wir mit dem Projekt fortfuhren, übermittelten wir dem Couple Up!-Team eine Einschätzung unserer Bemühungen, Klarheit und Transparenz in unsere Zusammenarbeit zu bringen. Außerdem baten wir sie, die Lücken in der API-Dokumentation zu schließen, damit wir ein genaues Verständnis der zugrunde liegenden Infrastruktur erhielten.
Lösung
Lasttest
Wir testeten einen GET- und drei POST-API-Aufrufe, um ihre Leistung unter verschiedenen Lastbedingungen zu messen. Lasttests werden in der Regel mit Hilfe eines Tools durchgeführt, das eine unterschiedliche Anzahl von Nutzern simuliert, die gleichzeitig mit Ihrer Anwendung interagieren, oder einen sequentiellen Anstieg der Anforderungen an die Anwendung. Unsere QA-Ingenieure haben sich für Apache JMeter entschieden, weil es ein zuverlässiges Open-Source-Tool ist, das speziell für schnelle und dennoch effektive Lasttests entwickelt wurde.
Ein Problem, mit dem wir konfrontiert waren, war eine unangemessene Beschreibung der API-Header. Letztere sind bei API-Tests unerlässlich, da sie Metadaten über die API-Anfrage und -Antwort enthalten. Außerdem helfen sie der API, Ihre Anfrage zu verstehen und die genauen Informationen im benötigten Format abzurufen.
Wir haben dieses Problem gelöst, indem wir ein Skript geschrieben haben, mit dem wir die Anfragen in JMeter korrekt beschreiben konnten. Nachdem wir das System, die erwartete Last und die Spitzenlast analysiert hatten, legten wir die entsprechenden Testdatenparameter fest.
Hier sind die von uns verwendeten Testfälle:
- 1 Thread (Benutzer) in 1 Sekunde hinzufügen
- Hinzufügen von 100 Threads (Benutzern) in 1 Sekunde
- 1000 Threads (Benutzer) in 10 Sek. hinzufügen
- Hinzufügen von 10000 Threads (Benutzern) in 1000 Sekunden
Wir haben die Leistung des Servers in Bezug auf die Antwortzeiten, die aktiven Threads und die internen Serverfehlerraten gemessen.
Prüfung der Serverkonfiguration
Unser Audit der Serverkonfiguration zielte darauf ab, Möglichkeiten zur Verbesserung der Serverleistung zu ermitteln. Da die Mongod-Prozesse die Hauptlast von CPU und RAM auf dem Server verursachen, sollte ihre Arbeit optimiert werden.
Wir haben dem Couple Up! Team eine Liste mit den genauen Konfigurationen, die eingerichtet werden mussten. So haben wir zum Beispiel aufgeschlüsselt, wie die Linux-Kernel-Einstellungen wie maximale Map-Anzahl, Swappiness, Dirty_ratio, maximale Anzahl der Verbindungen in der Warteschlange, lokaler Port-Bereich und einige andere in Bezug auf die erwartete Last von 50.000 Verbindungen angepasst werden können.
Um die CPU- und RAM-Belastung zu reduzieren, rieten wir unserem Kunden zu überprüfen, wie Abfragen gebildet werden, und diejenigen zu optimieren, die langsam laufen, sowie Abfragen desselben Typs zu parallelisieren. Außerdem schlugen wir vor, routinemäßig abgefragte Felder zu indizieren und neu zu indizieren und dies rechtzeitig zu tun. Mit der richtigen Indizierungsstrategie können Sie die Leistung Ihrer Datenbank erheblich steigern.
Außerdem haben wir erwähnt, welche Standardkonfigurationen geändert werden sollten und wie.
Code-Überprüfung
Das QAwerk-Team führte einen umfassenden Code-Review durch und lieferte Couple Up! schnelle und kosteneffiziente Aktionsschritte sowie wichtige architektonische Änderungen für eine langfristig bessere Leistung und Skalierbarkeit.
Wir haben die Bereiche hervorgehoben, die ein Refactoring benötigen, um den Entwicklern von Couple Up! zu helfen, den Code zu pflegen, neue Geschäftslogik hinzuzufügen und ihn in Zukunft problemlos zu skalieren. Wir wiesen auf die Notwendigkeit von Unit- und Integrationstests hin, da diese das Refactoring und die Erweiterung der Code-Basis erleichtern werden.
Außerdem empfahlen wir, die Fehlerbehandlung zu verbessern, so dass die Fehlermeldungen informativer sind und immer die richtigen Statuscodes anzeigen. Dies würde das Debuggen und Testen vereinfachen und dazu beitragen, die Kommunikation der Anwendung mit der API zu standardisieren.
Ein angemessenes Caching kann die Leistung für einen Bruchteil der Kosten im Vergleich zu einer Migration zu Amazon erheblich steigern. Deshalb haben wir unserem Kunden angeboten, Caching zu implementieren.
Nicht zuletzt ist die CI/CD-Pipeline zu nennen. Wenn häufige Releases geplant sind, ist CI/CD unerlässlich, um Fehler vor der Bereitstellung von Updates abzufangen und die Bereitstellung neuer Funktionen für die Benutzer zu beschleunigen. Daher stand die Einrichtung von CI/CD auch auf der Liste unserer Empfehlungen.
Fehlermeldungen
Die Ergebnisse unserer Lasttests zeigten, dass der Server Schwierigkeiten hatte, einen starken Anstieg der Nutzerzahlen in kurzer Zeit zu bewältigen, was zu einem Systemungleichgewicht, langen Antwortzeiten und internen Serverfehlern führte.
Tatsächliches Ergebnis: Beim Hinzufügen von 1000 Benutzern in 10 Sekunden benötigen die meisten API-Anfragen mehr als 3 Sekunden für die Verarbeitung, in der Spitze 27 Sekunden.
Erwartetes Ergebnis: Die Antwortzeit des Servers sollte unabhängig vom durchgeführten Testfall 3 Sekunden nicht überschreiten.
Tatsächliches Ergebnis: Beim Hinzufügen von 10.000 Nutzern in 1.000 Sekunden haben die meisten API-Anfragen normale Antwortzeiten, aber wir beobachten wiederkehrende Spitzen, die manchmal über 6 Sekunden hinausgehen.
Erwartetes Ergebnis: Es sollte keine drastischen Spitzen bei den Server-Antwortzeiten geben; das Liniendiagramm sollte auf der Achse der Antwortzeiten gegen Null tendieren.
Tatsächliches Ergebnis: Der Leistungstestbericht zeigt, dass 20 % der Serveranfragen im Falle von 1000 hinzugefügten Benutzern in 10 Sekunden den Statuscode 500, einen internen Serverfehler, zurückgeben.
Erwartetes Ergebnis: Die Serverfehlerrate sollte gegen 0 % tendieren, um den Verlust des Spielerfortschritts zu verhindern und ein immersives Erlebnis zu gewährleisten.
Ergebnis
QAwerk lieferte Couple Up! einen detaillierten Bericht über die Lasttests und einen Schritt-für-Schritt-Aktionsplan, um die Serverleistung zu verbessern und die Anzahl der Fehler zu reduzieren. Wir haben unsere Empfehlungen bewusst in Quick Wins und schwerwiegende Architekturänderungen unterteilt. Quick Wins sind einfach und kostengünstig in der Umsetzung und bringen sofortige Leistungsvorteile. Im Gegensatz dazu würde die überarbeitete Cloud-Architektur dazu beitragen, die Last automatisch auszugleichen und die Daten näher an der Zielgruppe zu speichern, wodurch die Latenzzeit verringert und andere Leistungsprobleme beseitigt würden.
Da wir Managed Services anbieten, erhielt das Couple Up!-Team detailliertes Feedback und fachkundigen Rat von drei Spezialisten – unserem QA Engineer, Python-Entwickler und DevOps Engineer. Die Erkenntnisse, die wir geteilt haben, werden Native Games Studio helfen, das Spiel Couple Up! auf die wachsende Nutzerbasis vorzubereiten und neue Spiele von Anfang an mit der richtigen Architektur zu entwickeln.
Kann Ihre App plötzliche Spitzen im Datenverkehr bewältigen?
Lass uns darüber redenTools
Kommentar des QAwerk-Teams
Alexander
QA-Ingenieur
Ich habe API-Lasttests für die ausgewählten Anfragen mit JMeter durchgeführt, einem der stabilsten und hochwertigsten Tools in dieser Hinsicht. Ich habe mein Fachwissen über Lasttests erweitert, indem ich neue Metrik-Typen verwendet und eng mit den Entwicklern zusammengearbeitet habe, um das Problem mit den Headern zu lösen.
Anton
Entwickler
Ich habe die Codeüberprüfung des Projekts durchgeführt. Meine größte Sorge war, dass die allgemein verwendeten Software-Entwurfsmuster und Code-Qualitätsprinzipien nicht eingehalten wurden, was die Wartung und Implementierung neuer Funktionen erschwerte. Der beste Ausweg wäre, den Code neu zu schreiben und die Aufgabe einem Entwickler zu übertragen, der sich mit Python auskennt.
Verwandt im Blog
Top-Tools zum Testen der Leistung mobiler Apps
Entwickler betrachten das Testen der App-Leistung oft als notwendiges Übel. Es ist zweifellos ein komplizierter, zeitaufwendiger und kostspieliger Prozess. Aber warum sind Leistungstests so wichtig? Diese Frage erinnert mich an mein Lieblingszitat von Ian Molyneaux: „Wenn ei...
WeiterlesenBeste Methoden für Leistungstesten: Was sollten Sie wissen?
Heutzutage ist die Funktionalität eines Produkts zweifellos ein wesentlicher und integraler Bestandteil des Testprozesses. Aber auch die Reaktionszeit, Zuverlässigkeit, Ressourcennutzung und Skalierbarkeit sp...
WeiterlesenBeeindruckt?
Stellen Sie uns einAndere Fallstudien
Unfold
Verwandlung einen schlechten Storymaker in eine robustevon AppleGoogle und Squarespace anerkannte App
Magic Mountain
Wir halfen der Nummer 1 unter den sozialen Fitness-Apps in Großbritannien beim Übergang von MVP zu Premium mit täglich wachsenden Abonnements
Logo Maker Shop
Helped Logo & Brand Story Design App successfully debut on Google Play and quickly hit 10K installs