Blog eines Programmierers: Was passiert unter der Haube von gamer.ru
Ein kleiner historischer Überblick
Die Website gamer.ru hat bereits ihre dritte (und möglicherweise sogar vierte) vollständige Code-Neuschreibung erlebt. Ursprünglich wurde das Projekt in den frühen 2000er Jahren auf Ruby-on-Rails entwickelt. Die Architektur war monolithisch, sodass jede Benutzeranfrage eine enorme Menge zusätzlicher Datenbankanfragen und das Laden aller möglichen Bibliotheken nach sich zog. Um den Betrieb der Ressource bei 100.000 Besuchern pro Tag zu gewährleisten, mussten ganze fünf leistungsstarke Server eingesetzt, Memcached, Redis und die Datenbanken auf mehrere Server repliziert werden. Dies ermöglichte es, bis zum Jahr 2018 durchzuhalten, bis das Unternehmen in finanzielle Schwierigkeiten geriet und das Entwicklerteam auseinanderbrach.
Etwa im Jahr 2020 fiel das SSL-Zertifikat der Website aus. Es stellte sich als unmöglich heraus, es zu aktualisieren, da die alte Version von Ruby-on-Rails von einer alten Version von OpenSSL abhing, während neue Zertifikate eine neuere Version erforderten. Niemand machte sich große Sorgen — die Website funktionierte mehr schlecht als recht weiter. Im Zeitraum von 2015 bis 2025 sank die Besuchszahl allmählich von 100.000 auf 1.000 Personen pro Tag. In versteckten Blogs und Kommentaren tauchte eine enorme Menge Spam auf, darunter auch nicht sehr anständige Inhalte. Yandex verlor vollständig das Interesse an uns, und im Webmaster-Tool herrschte ein rotes Feld kritischer Fehler.
Was wir getan haben, um alles zu reparieren
Die Website benötigte eine ernsthafte Optimierung, da die alte Architektur nicht mehr den Realitäten entsprach. In der Datenbank hatten sich etwa 100.000 Posts und 1,6 Millionen Kommentare angesammelt, die sorgfältig auf die neue Engine übertragen werden mussten. Wir beschlossen, auf eine Mikroservice-Architektur sowohl im Backend als auch im Frontend umzusteigen und gleichzeitig moderne Technologien zu nutzen, einschließlich angesagter HTMLElemente.
Das Projekt wurde vollständig von Grund auf neu in NodeJS ohne Verwendung von Drittanbieterbibliotheken neu geschrieben, was uns ein ruhiges Leben für die nächsten 10 bis 20 Jahre garantiert. Jetzt können wir uns keine Sorgen mehr machen, dass ein Update einer trendigen Bibliothek wie ExpressJS oder React die gesamte Website kaputt macht und eine erneute umfassende Überarbeitung erfordert. Sogar der visuelle Editor für Posts musste selbst entwickelt werden, da es nichts Fertiges gab, das unseren bescheidenen Anforderungen entsprach. Jetzt rendert die Engine HTML-Seiten für alte Geräte und Suchmaschinen und liefert den Benutzern Inhalte über AJAX.
Heute hält die Website erfolgreich eine durchschnittliche Last von etwa 150 Anfragen pro Sekunde aus, wobei der Löwenanteil des Traffics von Suchrobotern und anderen Crawlern stammt. Besonders aktiv sind die Bots von semrush und openai, die sich so verhalten, als wollten sie die gesamte Website an einem Tag abrufen. Wenn Yandex uns gemächlich mit einer Geschwindigkeit von 1-2 Anfragen pro Sekunde indiziert, können diese Kollegen durchaus auch 50 Anfragen stellen.
Die Engine ist jedoch so optimiert, dass diese gesamte Bot-Armee problemlos von einer einzigen, kostengünstigen virtuellen Maschine mit Kosten von etwa 500 Rubel pro Monat bedient werden kann.
Natürlich erinnert uns die Website hin und wieder durch Fehler 502 und 504 an sich, die schrittweise identifiziert und behoben werden. Manchmal stellt sich heraus, dass jemand vergessen hat, einen Index in der Datenbank hinzuzufügen, manchmal muss eine zu komplexe Anfrage in mehrere einfache aufgeteilt werden, und manchmal ist einfach der Speicherplatz auf dem Server erschöpft. Aber wir geben nicht auf — die Arbeit geht weiter, und der Prozess steht, wie gesagt, "unter Kontrolle".