Blog van de programmeur: wat er onder de motorkap van gamer.ru gebeurt
Kleine historische achtergrond
De site gamer.ru heeft inmiddels al een derde (en misschien zelfs vierde) volledige herschrijving van de code ondergaan. Het project was oorspronkelijk geschreven in Ruby-on-Rails in de verre noughties. De architectuur was monolithisch, waardoor elk gebruikersverzoek een enorme hoeveelheid extra verzoeken naar de database met zich meebracht en alle mogelijke bibliotheken laadde. Om de werking van de site bij 100.000 bezoekers per dag te waarborgen, moesten er maar liefst vijf krachtige servers worden ingezet, memcached en Redis worden gebruikt, en databases over verschillende servers worden gerepliceerd. Dit hielp ons om het vol te houden tot 2018, toen financiële problemen in het bedrijf begonnen en het team van ontwikkelaars uit elkaar ging.
Ongeveer in 2020 viel het SSL-certificaat van de site weg. Het bleek onmogelijk om dit te vernieuwen, omdat de oude versie van Ruby-on-Rails afhankelijk was van een oude versie van OpenSSL, terwijl nieuwe certificaten een nieuwere versie vereisten. Niemand was echt bezorgd - de site bleef min of meer functioneren. In de periode van 2015 tot 2025 daalde het aantal bezoekers geleidelijk van 100.000 tot 1.000 mensen per dag. In verborgen blogs en opmerkingen appeared een enorme hoeveelheid spam, waaronder minder nette inhoud. Yandex verloor volledig zijn interesse in ons, en in de webmaster-interface was er een en al rode muur van kritieke fouten.
Wat we deden om alles te repareren
De site had een serieuze optimalisatie nodig, omdat de oude architectuur niet meer overeenkwam met de realiteit. In de database waren er ongeveer 100.000 berichten en 1,6 miljoen opmerkingen verzameld die voorzichtig naar de nieuwe engine moesten worden overgezet. We besloten om over te stappen op een microservices-architectuur, zowel voor de backend als de frontend, terwijl we moderne technologieën implementeerden, inclusief trendy HTMLElement's.
Het project is volledig vanaf nul herschreven in NodeJS zonder het gebruik van externe bibliotheken, wat ons een rustige levensduur van de komende 10-20 jaar garandeert. Nu hoeven we niet bang te zijn dat de update van een trendy bibliotheek zoals ExpressJS of React de hele site kapotmaakt en een nieuwe grootschalige refactoring vereist. Zelfs de visuele editor voor berichten moesten we zelf schrijven, omdat we niets kant-en-klaars konden vinden dat aan onze bescheiden eisen voldeed. Nu genereert de engine HTML-pagina's voor oude apparaten en zoekmachines, terwijl het gebruikers inhoud via AJAX biedt.
Tegenwoordig kan de site met succes een gemiddelde belasting van ongeveer 150 verzoeken per seconde aan, waarbij het merendeel van het verkeer bestaat uit zoekbots en andere crawlers. Vooral de bots van Semrush en OpenAI gedragen zich actief, alsof ze de hele site in één dag willen downloaden. Terwijl Yandex ons traag indexeert, met een snelheid van 1-2 verzoeken per seconde, kunnen deze gasten gemakkelijk 50 aanvragen doen.
Echter, de engine is zo geoptimaliseerd dat dit hele botleger gemakkelijk wordt bediend door slechts één goedkope virtuele machine die ongeveer 500 roebel per maand kost.
Natuurlijk herinnert de site ons af en toe aan zichzelf met foutmeldingen 502 en 504, die geleidelijk worden ontdekt en opgelost. Soms blijkt dat iemand vergeten is een index in de database toe te voegen, soms moet een te complexe aanvraag worden opgesplitst in verschillende eenvoudige, en soms is er simpelweg geen ruimte meer op de server. Maar we geven niet op - het werk gaat door, en het proces, zoals ze zeggen, ‘is onder controle’.