Blogul programatorului: ce se întâmplă sub capota gamer.ru
O scurtă informație istorică
Site-ul gamer.ru a trecut deja prin a treia (sau poate chiar a patra) rescriere completă a codului. La început, proiectul a fost scris în Ruby-on-Rails încă din anii 2000. Arhitectura era monolitică, așa că fiecare solicitare a utilizatorului „trăgea” după ea un număr uriaș de solicitări suplimentare către baza de date și încărca toate bibliotecile posibile. Pentru a asigura funcționarea resursei cu 100 de mii de vizitatori pe zi, a fost necesar să se folosească cinci servere puternice, să se utilizeze memcached, Redis și să se replici baze de date pe mai multe servere. Aceasta a permis cumva să ne menținem până în 2018, când compania a început să aibă probleme financiare și echipa de dezvoltatori s-a dispersat.
Aproximativ în 2020, site-ul a pierdut certificatul SSL. A fost imposibil să-l actualizăm, deoarece vechea versiune de Ruby-on-Rails depindea de o versiune veche de openssl, iar noile certificate necesitau o versiune mai nouă. Nimeni nu s-a îngrijorat prea mult - site-ul a continuat să funcționeze oarecum. În perioada 2015-2025, vizitările au scăzut treptat de la 100 de mii la 1 mie de oameni pe zi. În blogurile și comentariile ascunse au început să apară o mulțime de spam, inclusiv de conținut nu tocmai decent. Yandex a pierdut complet interesul față de noi, iar în webmastern a fost un întreg panou roșu de erori critice.
Ce am făcut pentru a remedia totul
Site-ul avea nevoie urgentă de optimizare, deoarece vechea arhitectură nu mai corespundea realităților. În bază s-au acumulat aproximativ 100 de mii de postări și 1,6 milioane de comentarii, care trebuiau transferate cu atenție pe un nou motor. Am decis să trecem la o arhitectură microservicii atât pe backend, cât și pe frontend, implicând tehnologii moderne, inclusiv popularele HTMLElement-uri.
Proiectul a fost rescris complet de la zero pe NodeJS fără utilizarea bibliotecilor externe, ceea ce ne garantează o viață liniștită pentru următorii 10-20 de ani. Acum nu ne mai este teamă că actualizarea unei biblioteci populare, cum ar fi ExpressJS sau React, va strica întregul site și va necesita o refactorizare masivă. Chiar și editorul vizual pentru postări a trebuit să fie scris de la zero, deoarece nu am găsit nimic gata care să corespundă cerințelor noastre modeste. Acum motorul generează pagini HTML pentru dispozitivele vechi și motoarele de căutare, iar utilizatorilor le livrează conținut prin AJAX.
În prezent, site-ul suportă cu succes o încărcătură medie de aproximativ 150 de solicitări pe secundă, din care o mare parte din trafic provine din roboți de căutare și alte crawler-e. Roboții semrush și openai se comportă deosebit de activ, comportându-se ca și cum ar încerca să descarce întregul site într-o singură zi. Dacă Yandex ne indexează lent, cu o viteză de 1-2 solicitări pe secundă, acești colegi pot solicita și 50.
Cu toate acestea, motorul a fost atât de optimizat încât întreaga această armată de roboți este ușor gestionată de un singur server virtual ieftin, costând aproximativ 500 de ruble pe lună.
Desigur, periodic site-ul ne amintește de existența sa prin erori 502 și 504, care sunt identificate și corectate treptat. Uneori se dovedește că cineva a uitat să adauge un index în baza de date, alteori o solicitare prea complexă trebuie împărțită în mai multe solicitări simple, iar uneori, pur și simplu se termină spațiul pe server. Dar nu ne dăm bătuți - munca continuă, iar procesul, așa cum se spune, este „sub control”.