SberCraft, CyberCode, Luxcity - Sie haben vielleicht schon von diesen Spielen gehört oder sogar daran teilgenommen. All dies ist Geeckos Handarbeit. Bei den größten Geecko-Projekten sind jeweils 20.000 Spieler anwesend, während das Unternehmen bis vor kurzem kein spezielles Team zur Unterstützung der Infrastruktur hatte.
Die Tankstelle des Unternehmens, Nikita Obukhov, und die Marketingdirektorin, Irina Fedorova, sprachen über den Vorfall, der zu einem der Argumente wurde, ernsthaft über Änderungen der Infrastruktur nachzudenken, zu K8 zu wechseln und ein DevOps-Team einzustellen.
Was ist innen:
- Verlust der Kontrolle über Facebook,
- ein plötzlicher Verkehrsansturm am Freitagabend,
- Zuschuss aus Microsoft Azure, Cloud Moving und Transformation Challenges.
Gehen!
Geecko — DevRel . IT- , : , , -.
Geecko
Auf welcher Engine werden die Spiele gemacht, was sind sie technisch?
Nikita: Unsere Spiele sind ausschließlich browserbasiert. Wir verwenden unsere eigenen Entwicklungen und bewährten Bibliotheken, um mit Canvas, Karten und Isometrie zu arbeiten. Wir verwenden JS / TS, ein Vue.js-Framework für eine typische Web-Benutzeroberfläche.
Wir schreiben noch nicht für mobile Plattformen - bestenfalls unterstützen wir mobile Berechtigungen. Dies ist jedoch nicht oft erforderlich. In den meisten unserer Spiele müssen Sie Code schreiben, und das Schreiben von Code von einem Mobiltelefon aus ist eine solche Annehmlichkeit.
Wie anspruchsvoll sind Spiele auf CPU und Speicher?
Nikita: In unseren Spielen müssen wir Code schreiben und diesen Code ausführen.
Wir unterstützen 12 Sprachen: sowohl kompiliert als auch interpretiert in verschiedenen Umgebungen. Wir führen den Code auf unseren Serverressourcen aus: Die Belastung des Prozessors und des Speichers ist hoch.
Wir führen auch LSP-Dienste aus, die Autocomplete-Code für unsere Online-IDE bereitstellen. Sie benötigen außerdem CPU und insbesondere Speicher: Wenn viele Spieler vorhanden sind, steigt die Last erheblich an.
Wo werden die Spiele gehostet?
Nikita: Es waren immer Wolken. Jetzt ist Azure der Hauptanbieter (Geecko erhielt von Microsoft einen Zuschuss für die kostenlose Nutzung der Cloud). Wir starten dort alle neuen Projekte - und was für uns wichtig ist, wir starten sie in Kubernetes. Die gesamte neue Infrastruktur basiert auf Kubernetes und Docker.
Welchen Anbieter hatten Sie zuvor und warum haben Sie sich für einen Wechsel entschieden?
Nikita: Wir waren und sind in DigitalOcean und Yandex.Cloud vertreten. Sie sind gute Anbieter, aber Microsoft hat sich als das am besten geeignete Zuschussprogramm für uns herausgestellt.
Wie viel haben Sie zuvor und jetzt für Server ausgegeben?
Nikita: Vor sechs Monaten haben wir ungefähr 30.000 Rubel pro Monat ausgegeben, jetzt nähert sich diese Zahl 100.000. Das Wachstum hängt mit der Anzahl der Projekte zusammen: Wir stoppen die alten nicht, sie arbeiten weiter und erhalten organische Registrierungen. Wir starten regelmäßig neue Aktivitäten: In einem Monat können wir drei Projekte veröffentlichen - zum Beispiel eine Schlacht, ein Spiel und ein Treffen.
Deckt Microsoft Grant alle Kosten?
Nikita: Unsere Infrastrukturkosten sind nicht Null geworden: Wir können nicht alles auf einmal transportieren, das ist wirtschaftlich nicht machbar. Daher arbeiten zwei weitere Cloud-Anbieter weiterhin mit uns zusammen, ihr Anteil nimmt lediglich ab.
Backups in anderen geografischen Gebieten, Disaster Recovery von Ressourcen in einer anderen Cloud - all dies ist wichtig.
Insgesamt werden die Gesamtkosten reduziert. Der Code-Ausführungsdienst hat den größten Ressourcenverbrauch, und dank des Zuschusses werden seine Kosten im kommenden Jahr Null betragen. Wenn eine Reihe von Bedingungen erfüllt sind, wird der Zuschuss um ein zweites Jahr verlängert.
Screenshot vom Cybercode-Spiel
Der Ansturm des Facebook-Verkehrs am Freitag
Hatten Sie eine Situation, in der ein Zustrom von Benutzern die Produktion einstellte?
Nikita: Ja, es gab einmal einen ähnlichen Vorfall. Wir hatten eine Aufgabe von einem internationalen Unternehmen: viele englischsprachige Entwickler zu finden.
Die Spieler müssen die Mission gemeinsam auf derselben Karte abschließen. Die Karte hat endliche Dimensionen, so dass es unmöglich ist, alle darauf zu platzieren. Wir haben Benutzer in Gruppen von 100 Personen aufgeteilt, von denen jede nicht länger als fünf Tage lebt - dies ist der Spielzyklus für die Erfüllung der Mission. Während dieser Zeit gewinnen oder verlieren die Teilnehmer.
Wir haben erwartet, dass bis zu 10 solcher Karten gleichzeitig aktiv sind, dh bis zu 1000 Spieler. Tatsächlich gab es auf dem Höhepunkt mehr als 2000 Spieler oder 20 Karten.
Warum ist es passiert? Warum kamen plötzlich so viele Benutzer zum Spiel?
Irina: Die Geschichte ereignete sich Anfang März, als Facebook begann, Werbekonten massiv und spontan zu blockieren, weil sie nicht mit den Richtlinien für Werbetreibende übereinstimmten. Viele Unternehmen, darunter auch wir, haben daraufhin ihre Werbebüros verloren: Unser Hauptbüro und beide Backup-Büros fielen. Und das alles in dem Moment, als wir das Spiel promoten mussten.
Facebook ist einer der wichtigsten Werbekanäle, da es einfach genug ist, eine Zielgruppe auszuwählen und anhand der verfügbaren Daten zu segmentieren. Und für 12 ganze Tage haben wir den Zugang zu diesem Kanal verloren. Als wir es mit Schweiß, Blut und Tränen zurückbrachten, mussten wir die KPI-4500-Flüssigkeitsregistrierungen für bestimmte Geolokalisierungen, hauptsächlich in Europa, nachholen.
Es blieb uns nichts anderes übrig, als das Budget zu erhöhen: Wir haben unsere Werbekampagnen beschleunigt.
Was bedeutet es, "mit dem Budget zu pushen"?
Irina: Wenn wir anfänglich 300-500 Dollar pro Tag ausgegeben haben, dann sind wir hier über 1000 gegangen.
Man muss verstehen, dass Werbekampagnen normalerweise mehrere Tage lang trainiert werden und dann so profitabel wie möglich arbeiten. Da unser Werbebudget jedoch größer als gewöhnlich war, lernte die Kampagne schneller und am zweiten Tag begann sie, wirklich coole Indikatoren zu drehen. Irgendwann haben wir die Kontrolle über sie verloren.
Wir haben mit einer bestimmten Conversion-Rate gerechnet, die sich jedoch aufgrund der Übertaktung von Facebook als einfacher herausstellte. Wenn die durchschnittliche Conversion-Rate in solchen Spielen etwa 8% beträgt, erreichte sie im Spitzenzeitpunkt 15%.
Cool!
Irina: Ja, damals haben wir verstanden, was ein großes Werbebudget bedeutet. Das funktioniert zwar nur im Westen - in Russland gibt es einfach kein Publikum, das so viel Geld ausgeben könnte.
Und natürlich passierte alles am Freitag. Klassisch! Am Freitagabend erhalte ich eine Nachricht von Nikita, dass wir so viel Verkehr haben, dass wir etwas dagegen tun müssen.
Woher wusste Nikita davon? Woher kam dieses Signal?
Nikita: Wir haben automatische Benachrichtigungen zum Laden des Servers. So sah es aus:
Es wird eine Warnung ausgegeben, dass die virtuelle Maschine (8 Kerne, 32 GB Speicher) bei einem Schwellenwert von 50% zu 90% auf die CPU geladen ist.
Dies ist nicht kritisch, da der Dienst weiterhin funktioniert. Für Spieler bedeutet dies, dass sie die Schaltfläche "Code ausführen" drücken und doppelt so lange auf die Ausführung warten. Es bedeutet aber auch, dass sich die Situation bis hin zu Ausfallzeiten verschlechtern wird, wenn immer neue Spieler hinzukommen.
Infolgedessen wurde das schlechteste Ergebnis vermieden - der Service ging nicht vollständig aus?
Nikita: Zum Glück hat alles gut geendet.
Wenn die Situation mitten am Arbeitstag eingetreten wäre, hätten wir uns natürlich überhaupt keine Sorgen gemacht - dort können Sie schnell reagieren. Aber nicht Freitag Nacht. Am Freitagabend gehen Sie in eine Bar und erhalten diese Nachricht auf Ihrem Telefon. Aber um alles zu reparieren, reicht es nicht aus, am Telefon zu sein.
Wie haben Sie mit der Situation umgegangen?
Irina: Wir haben gerade die Kosten für Werbekampagnen um fast 70% gesenkt.
Bist du später wieder auf dem richtigen Weg?
Irina: Nein, sie haben es nicht in den gleichen Zustand gebracht, weil die Situation unvorhersehbar war: Facebook nahm von Tag zu Tag zu und die Conversion nahm zu. Wenn wir uns noch eine Woche mit der gleichen Geschwindigkeit gedreht hätten, wäre die Konvertierung vielleicht sogar noch höher gewesen. Da jedoch keine heldenhaften Siege erforderlich waren, haben wir ein komfortables Niveau wiederhergestellt. Es stellte sich heraus, dass ungefähr 10 Karten geladen waren, und der Dienst funktionierte leise.
Nikita: Es sollte beachtet werden, dass es andere Seiten des Problems gibt: Wir versuchen, umgehend auf die Nachrichten der Spieler zu reagieren. Je mehr Spieler, desto mehr Supportanfragen generieren sie. Wir wollten ein hohes Serviceniveau aufrechterhalten und waren nicht bereit, den Support so schnell zu erhöhen. Wir beschlossen, dass es klüger wäre, alles reibungsloser und vorhersehbarer zu machen, als am Wochenende den Höhepunkt zu erreichen.
Diesmal haben Sie beschlossen, die Werbekampagne zu unterdrücken und damit die Situation zu retten. Wie löst man normalerweise ein Skalierungsproblem aus technischer Sicht?
Nikita: Wir skalieren, indem wir zusätzliche Instanzen des Dienstes starten.
In diesem Fall handelt es sich nicht um Kubernetes und es gibt keine automatische Skalierung. Es ist erforderlich, einen Klon einer virtuellen Maschine im halbmanuellen Modus zu starten. Sie müssen bis zu einer halben Stunde warten, während die VM aus dem Image neu erstellt wird. Danach müssen Sie überprüfen, ob die VM wie erwartet funktioniert und alle Dienste auf ihr gestiegen sind: LSP-Server, Codeläufer. Danach gleichen wir den Datenverkehr auf neue Maschinen aus und überwachen weiterhin die Arbeitslast und die Statuscodes.
Screenshot vom SberCraft-Spiel
Schlussfolgerungen und Pläne
Wie haben Sie Ihre Arbeit nach diesem Vorfall neu arrangiert?
Nikita: Wir haben herausgefunden, wie Marketing am besten geplant werden kann: Wie viel Investition bringt die Anzahl der Registrierungen?
Auf technischer Ebene sind wir fest davon überzeugt, dass wir eine neue Methode zur Skalierung des Codeausführungsdienstes benötigen, idealerweise - die automatische Skalierung.
Wir machen den Code-Ausführungsdienst zustandslos (unabhängig vom Speichersystem), nehmen kleine Architekturänderungen vor und ändern die Infrastruktur - wir führen dieselben Kubernetes ein, auf denen andere Dienste ausgeführt werden.
Bei einem Code-Ausführungsdienst ist das Schema jedoch komplizierter - es ist nicht so einfach zu übersetzen wie die anderen. Wir überprüfen immer noch, ob alles so funktioniert, wie es sollte.
Derzeit wird der Code auf DigitalOcean und in der Azure-Cloud ausgeführt. In Kubernetes.
Dort verwenden Sie Kubernetes als Dienst (Azure Kubernetes-Dienst)?
Nikita: Ja. Wir verwenden Kubernetes als Service und erwägen auch die Option Cloud-Funktionen.
Wie geht es AWS Lambda?
Nikita: Ja, alle großen Anbieter haben sie. Mit ihnen können Sie genau so viel bezahlen, wie Sie Code ausführen. Es gibt jedoch technische Einschränkungen bei den Funktionen von Laufzeitumgebungen.
Wer ist jetzt für die Infrastruktur verantwortlich?
Nikita: Meine Qualifikationen und Qualifikationen von Back-End-Entwicklern reichen nicht immer aus, da DevOps und SRE ein sehr weites Gebiet sind. Und es ist nicht sehr richtig, Back-End-Entwickler für Vorfälle im Dienst zu lassen. Daher haben wir Anfang des Jahres ein Outsourcing-DevOps-Team - die Leute, mit denen wir zuvor in anderen Unternehmen zusammengearbeitet haben.
Warum haben Sie mit der Infrastruktur und dem DevOps-Team zusammengearbeitet?
Nikita: Der Vorfall mit dem Spiel war der Katalysator für Änderungen, die wir seit langem erkannt haben, aber keine Gelegenheit hatten, umzusetzen.
Das Unternehmen ist gewachsen, ähnliche Fälle traten auf, die bestätigten: Ja, Leute, Sie brauchen DevOps-Ingenieure, Sie müssen eine Infrastruktur schaffen, die einfacher zu skalieren ist.
Die Aufgabe wurde vor zwei Monaten vollständig erledigt, als wir ein Stipendium von Azure erhielten. Inzwischen wurden viele Dienste in die neue Cloud verschoben.
Warum haben Sie sich entschieden, Mitarbeiter auszulagern, anstatt sie einzustellen?
Nikita: Aus eigener Erfahrung wissen wir, dass es schwierig ist, DevOps zu rekrutieren. Und hier stellte sich heraus, dass es bewährte Leute gibt, und die Form der Zusammenarbeit mit einem Auftragnehmer ist für uns sehr praktisch.
Nun, und vor allem: Wir haben nicht einen Ingenieur gewonnen, sondern ein ganzes Team, das die Verfügbarkeit von Diensten rund um die Uhr überwacht und bereit ist, auf einen Vorfall zu reagieren, bevor er von Benutzern entdeckt wird.
Richtet das DevOps-Team alles von Grund auf neu ein oder verwendet es das, was es war, einschließlich Überwachung?
Nikita: Wir sind den Weg der Vertreibung gegangen. Wir starten neue Projekte in einer neuen Infrastruktur, migrieren dort Kerndienste und lassen Projekte in der alten unterstützt. Alles ist neu für neue Projekte, einschließlich Überwachung.
Die Besonderheit der Transformation besteht darin, dass Sie die Architektur des Dienstes überdenken müssen. Wir haben verstanden, wie es geändert werden kann, um neue Qualitäten zu erhalten.
Daher wird auch auf der Backend-Seite gearbeitet: Wir werden den Code umgestalten, die Architektur aktualisieren, aber in relativ geringem Umfang.
Sie richten also gerade neue CI / CD-Prozesse ein?
Zunächst strukturieren wir uns organisatorisch um. Wir haben eine neue Rolle, die dem engagierten Team entspricht, und die Art der Kommunikation und das Setzen von Aufgaben haben sich geändert.
Wir hatten CI / CD-Prozesse, sie wurden gerade auf die neue Infrastruktur umgestellt. Natürlich verbessern sie sich, aber sie ändern sich nicht grundlegend.
Screenshot aus dem Spiel SberCraft
Welche globale Schlussfolgerung haben Sie für sich gezogen?
In verschiedenen Phasen des Projektlebens sind die Dinge unterschiedlich. Vor sechs Monaten wären wir selbst nicht bereit für das DevOps-Team gewesen. Aber jetzt können wir viel substanzieller mit ihnen kommunizieren. Wir verstehen unsere Schmerzen klar und kamen mit einer Liste von Fragen und Vorschlägen zu den Jungs, wie man etwas macht. Es stellte sich als gute Zusammenarbeit heraus: Gemeinsam kamen wir zu qualitativ hochwertigen und fundierten Entscheidungen.
Es liegt noch viel Arbeit vor uns. Der Code-Ausführungsservice im Migrationsprozess und als komplexester unserer Services erfordert viel Engagement. Für einige Zeit werden wir beide Versionen des Dienstes in der Produktion haben und den Verkehr zwischen ihnen ausgleichen. Wenn wir verstehen, dass alles in Ordnung ist, werden wir vollständig zu Azure wechseln.
, . , .
, , , .
21 «» , .
:
— ,
— ,
— ,
— ,
— .
Databricks, Mail.ru Cloud Solutions TangoMe.