Blog dello sviluppatore: cosa succede dietro le quinte di gamer.ru

content auto translated from {from}

Piccola nota storica

Il sito gamer.ru sta attraversando già la terza (e forse anche la quarta) completa riscrittura del codice. Inizialmente, il progetto è stato scritto in Ruby-on-Rails nei lontani anni 2000. L'architettura era monolitica, quindi ogni richiesta degli utenti comportava un'enorme quantità di richieste aggiuntive al database e il caricamento di tutte le possibili librerie. Per garantire il funzionamento del sito con 100.000 visitatori al giorno, è stato necessario impiegare ben cinque server potenti, utilizzare memcached, Redis e replicare i database su più server. Questo ha permesso di resistere fino al 2018, quando l'azienda ha iniziato ad avere problemi finanziari e il team di sviluppatori si è disperso.

Circa nel 2020 il sito ha perso il certificato SSL. Aggiornarlo si è rivelato impossibile, poiché la vecchia versione di Ruby-on-Rails dipendeva dalla vecchia versione di openssl, mentre i nuovi certificati richiedevano una versione più recente. Nessuno si è particolarmente preoccupato: il sito è continuato a funzionare, più o meno. Nel periodo dal 2015 al 2025, il traffico è gradualmente diminuito da 100.000 a 1.000 visitatori al giorno. Nei blog e nei commenti nascosti è iniziato a comparire un'enorme quantità di spam, compreso quello di contenuto non proprio decoroso. Yandex ha completamente perso interesse per noi e nella console webmaster c'era un mare di errori critici rossi.

Cosa abbiamo fatto per sistemare tutto

Il sito aveva bisogno di una seria ottimizzazione, poiché la vecchia architettura non era più in linea con la realtà. Si erano accumulati circa 100.000 post e 1,6 milioni di commenti, che dovevano essere trasferiti con attenzione sul nuovo motore. Abbiamo deciso di passare a un'architettura a microservizi sia per il backend che per il frontend, utilizzando tecnologie moderne, comprese le popolari HTMLElement.

Il progetto è stato completamente riscritto da zero in NodeJS senza l'uso di librerie di terze parti, il che ci garantisce una vita tranquilla nei prossimi 10-20 anni. Ora non c'è bisogno di temere che un aggiornamento di qualche libreria alla moda come ExpressJS o React rompa l'intero sito e richieda un'altra massiccia ristrutturazione. Anche l'editor visivo dei post è stato scritto da noi, poiché non siamo riusciti a trovare nulla di pronto che soddisfacesse le nostre modeste richieste. Ora il motore renderizza pagine HTML per vecchi dispositivi e motori di ricerca, mentre agli utenti offre contenuti tramite AJAX.

Attualmente, il sito gestisce con successo un carico medio di circa 150 richieste al secondo, e la maggior parte del traffico è costituita da bot di ricerca e altri crawler. I bot di semrush e openai, in particolare, si comportano come se cercassero di scaricare l'intero sito in un giorno. Se Yandex ci indicizza lentamente, con una velocità di 1-2 richieste al secondo, questi soggetti possono effettuare fino a 50 richieste.

Tuttavia, il motore è risultato così ottimizzato che tutta questa armata di bot può essere facilmente gestita da una sola macchina virtuale economica, che costa circa 500 rubli al mese.

Naturalmente, di tanto in tanto il sito ci ricorda la sua presenza con errori 502 e 504, che vengono man mano identificati e risolti. A volte si scopre che qualcuno ha dimenticato di aggiungere un indice al database, a volte una query troppo complessa deve essere suddivisa in più semplici, e a volte semplicemente lo spazio sul server finisce. Ma non ci arrendiamo: il lavoro continua e il processo, come si suol dire, è "sotto controllo".