Programmer's Blog: vad som händer bakom kulisserna på gamer.ru
En liten historisk bakgrund
Webbplatsen gamer.ru har genomgått sin tredje (och möjligen till och med fjärde) fullständiga kodrevison. Projektet skrevs ursprungligen på Ruby-on-Rails redan under de avlägsna nolltalen. Arkitekturen var monolitisk, så varje användarförfrågan "drog med sig" en enorm mängd ytterligare förfrågningar till databasen och laddade alla möjliga bibliotek. För att säkerställa att resursen skulle fungera vid 100 000 besökare per dag var vi tvungna att använda hela fem kraftfulla servrar, använda memcached, Redis och replikera databaser över flera servrar. Detta gjorde att vi kunde hålla ut till 2018, då företaget började få ekonomiska problem och utvecklarteamet skingrades.
Runt 2020 tappade webbplatsen sin SSL-certifikat. Att uppdatera det visade sig vara omöjligt, eftersom den gamla versionen av Ruby-on-Rails var beroende av en gammal version av openssl, medan de nya certifikaten krävde en nyare version. Ingen bekymrade sig särskilt — webbplatsen fortsatte att fungera hyfsat. Under perioden 2015 till 2025 sjönk trafikmängden gradvis från 100 000 till 1 000 personer per dag. I dolda bloggar och kommentarer började det dyka upp en enorm mängd skräppost, inklusive inte helt anständigt innehåll. Yandex tappade helt intresset för oss, och i webbmastern fanns det enbart ett röd rullande landskap av kritiska fel.
Vad vi gjorde för att åtgärda allt
Webbplatsen behövde en allvarlig optimering, eftersom den gamla arkitekturen inte längre motsvarade verkligheten. Det hade samlats omkring 100 000 inlägg och 1,6 miljoner kommentarer i databasen som noggrant behövde överföras till den nya plattformen. Vi beslutade att gå över till en mikrotjänstarkitektur både på backend och frontend och inarbeta moderna teknologier, inklusive trendiga HTMLElement.
Projektet skrevs om helt från grunden på NodeJS utan att använda externa bibliotek, vilket garanterar oss en lugn tillvaro de kommande 10–20 åren. Nu behöver vi inte frukta att en uppdatering av något trendigt bibliotek som ExpressJS eller React kommer att bryta hela webbplatsen och kräva ytterligare omfattande refaktorisering. Till och med den visuella redaktören för inlägg var vi tvungna att skriva själva, eftersom vi inte kunde hitta något färdigt som motsvarade våra blygsamma krav. Nu renderar motorn HTML-sidor för gamla enheter och sökmotorer, och levererar innehåll till användare via AJAX.
Idag klarar webbplatsen framgångsrikt en genomsnittlig belastning på cirka 150 förfrågningar per sekund, där en stor del av trafiken utgörs av sökrobotar och andra crawlers. Särskilt aktiva är botarna semrush och openai, som beter sig som om de försöker ladda ner hela webbplatsen på en dag. Om Yandex indexerar oss långsamt, i en takt av 1-2 förfrågningar per sekund, kan dessa linser mycket väl begära 50.
Motorn har emellertid blivit så optimerad att denna hela botarmé lätt hanteras av en enda billig virtuell server som kostar cirka 500 rubel per månad.
Naturligtvis påminner webbplatsen oss periodiskt om sig själv med fel 502 och 504, som successivt identifieras och åtgärdas. Ibland visar det sig att någon glömde att lägga till ett index i databasen, ibland måste en för komplicerad förfrågan delas upp i flera enklare, och ibland tar helt enkelt utrymmet på servern slut. Men vi ger oss inte — arbetet fortsätter, och processen, som man säger, är "under kontroll".