Programozói blog: mi történik a gamer.ru motorházteteje alatt
Rövid történelmi áttekintés
A gamer.ru weboldal már a harmadik (esetleg már a negyedik) teljes kódújraírásán megy keresztül. A projekt eredetileg Ruby-on-Rails nyelven készült el a távoli nullákban. Az architektúra monolitikus volt, ezért minden egyes felhasználói kérés hatalmas mennyiségű további adatbázis-lekérdezést és a lehetséges könyvtárak betöltését vonta magával. Ahhoz, hogy a weboldal napi 100 ezer látogatót el tudjon látni, öt erős szervert kellett bevonni, memcache-t és Redis-t kellett használni, és az adatbázisokat több szerverre kellett replikálni. Ez lehetővé tette, hogy valahogy 2018-ig kitartsunk, míg a cég pénzügyi problémákkal nem küzdött és a fejlesztőcsapat szétszéledt.
Körülbelül 2020 környékén a weboldal SSL-tanúsítványa lejárt. A frissítése lehetetlennek bizonyult, mivel a régi Ruby-on-Rails verzió a régi openssl verzióra támaszkodott, míg az új tanúsítványok frissebb verziót követeltek. Senki sem aggódott különösebben — a weboldal továbbra is működött valahogy. 2015 és 2025 között a látogatottság fokozatosan 100 ezer főről napi 1 ezerre csökkent. A rejtett blogokban és hozzászólásokban óriási mennyiségű spam jelent meg, és köztük nem éppen a legkellemesebb tartalmakkal. A Yandex teljesen elvesztette az érdeklődését irántunk, a webmester pedig tele volt kritikus hibák piros vásznaival.
Mit tettünk a helyreállítás érdekében
A weboldal komoly optimalizálásra szorult, mivel a régi architektúra már nem felelt meg a valóságnak. A rendszerben körülbelül 100 ezer poszt és 1,6 millió hozzászólás gyűlt össze, amelyeket gondosan át kellett vinni az új motorra. Úgy döntöttünk, hogy áttérünk a mikroszolgáltatás-alapú architektúrára, mind a backend, mind a frontend oldalán, miközben modern technológiákat is bevonunk, beleértve a divatos HTMLElement-eket is.
A projektet teljesen újra kellett írni NodeJS-re harmadik féltől származó könyvtárak használata nélkül, ami garantálja számunkra a nyugodt életet a következő 10-20 évre. Most már nem kell félnünk attól, hogy egy divatos könyvtár, mint az ExpressJS vagy a React, eltöri az egész weboldalt, és újabb nagyszabású refaktorálást igényel. Még a posztok vizuális szerkesztőjét is magunknak kellett megírni, mivel nem találtunk semmi kész megoldást, amely megfelelt volna szerény igényeinknek. Most a motor HTML-oldalakat renderel a régi eszközök és keresők számára, míg a felhasználóknak AJAX-on keresztül szolgálja fel a tartalmat.
A mai napig a weboldal sikeresen eltart egy átlagos terhelést, körülbelül 150 lekérdezéssel másodpercenként, miközben a forgalom jelentős részét keresőrobotok és más crawler-ek teszik ki. Különösen aktívan viselkednek a semrush és openai robotok, amelyek úgy viselkednek, mintha egy nap alatt megpróbálnák letölteni az egész weboldalt. Míg a Yandex lassan indexel minket, 1-2 lekérdezéssel másodpercenként, ezek a barátok nyugodtan kérhetnek 50-et is.
Azonban a motor annyira optimalizált, hogy ezt a robot-armadát egyetlen olcsó virtuális gép is könnyen kiszolgálja, amelynek havi költsége körülbelül 500 rubel.
Természetesen a weboldal időnként 502-es és 504-es hibákkal emlékeztet minket önmagára, amelyeket fokozatosan azonosítanak és kijavítanak. Néha kiderül, hogy valaki elfelejtette hozzáadni az indexet az adatbázishoz, néha túl bonyolult lekérdezéseket kell lebontani egyszerűbbekre, és néha a szerveren egyszerűen elfogy a hely. De nem adjuk fel — a munka folytatódik, és a folyamat, ahogyan mondani szokták, „ellenőrzés alatt van.”