Ohjelmoijan blogi: mitä gamer.ru:n koneen alla tapahtuu
Pieni historiallinen katsaus
Sivusto gamer.ru on kokenut jo kolmannen (ja mahdollisesti jopa neljännen) täydellisen koodin uudelleen kirjoittamisen. Alun perin projekti oli kirjoitettu Ruby-on-Rails -alustalla jo kaukaisella 2000-luvulla. Arkkitehtuuri oli monoliittinen, joten jokainen käyttäjätason pyyntö "veti" mukaansa valtavan määrän lisäpyyntöjä tietokantaan ja kaikkien mahdollisten kirjastojen lataamisen. Jotta resurssin toiminta voitaisiin taata 100 000 päivittäisellä kävijämäärällä, oli käytettävä peräti viittä tehokasta palvelinta, käytettävä memcachea, Redis-tekniikkaa ja replikoitava tietokantoja useille palvelimille. Tämä mahdollisti jotenkin selviytymisen vuoteen 2018 asti, jolloin yrityksessä alkoi esiintyä taloudellisia ongelmia ja kehittäjätiimi hajaantui.
Noin vuonna 2020 sivuston SSL-sertifikaatti oli lakkautettu. Sen päivittäminen osoittautui mahdottomaksi, koska vanha Ruby-on-Rails -versio riippui vanhasta openssl-versiosta, kun taas uudet sertifikaatit vaativat uudemman version. Kukaan ei erityisesti välittänyt – sivusto jatkoi huonosti toimimista. Vuosina 2015–2025 kävijämäärä laski vähitellen 100 000:sta 1 000:een henkilöön päivässä. Piiloblogeissa ja kommenteissa alkoi esiintyä valtavia määriä roskapostia, mukaan lukien ei niin kunniallista sisältöä. Yandex menetti täysin kiinnostuksensa meitä kohtaan, ja webmaster-alueella oli pelkkää punaista kriittisten virheiden peittoa.
Mitä teimme kaiken korjaamiseksi
Sivusto tarvitsi vakavaa optimointia, sillä vanha arkkitehtuuri ei enää vastannut todellisuutta. Tietokannassa oli kertynyt noin 100 000 kirjoitusta ja 1,6 miljoonaa kommenttia, jotka oli siirrettävä huolellisesti uuteen moottoriin. Päätimme siirtyä mikro palveluarkkitehtuuriin sekä backendillä että frontendillä, samalla hyödyntäen moderneja teknologioita, mukaan lukien muodikkaat HTMLElementit.
Projekti kirjoitettiin täysin alusta alkaen NodeJS:llä ilman kolmannen osapuolen kirjastoja, mikä takaa meille rauhallisen elämän seuraavat 10–20 vuotta. Nyt ei tarvitse pelätä, että jonkin muodikkaan kirjaston, kuten ExpressJS:n tai Reactin päivitys rikkoo koko sivustoa ja vaatii jälleen laajamittaista refaktorointia. Jopa kirjoitusten visuaalinen editori oli pakko kirjoittaa itse, koska mitään valmista, joka vastaisi vaatimuksiamme, ei löytynyt. Nyt moottori renderoi HTML-sivuja vanhemmille laitteille ja hakukoneille, kun taas käyttäjille toimitetaan sisältö AJAXin kautta.
Tällä hetkellä sivustolla on menestyksekkäästi kestänyt keskimääräinen kuormitus noin 150 pyyntöä sekunnissa, ja suurin osa liikenteestä koostuu hakukrobotsista ja muista crawlereista. Erityisesti boti semrush ja openai käyttäytyvät aktiivisesti, ikään kuin yrittäisivät ladata koko sivuston päivässä. Jos Yandex indeksoi meitä hitaasti, 1-2 pyyntöä sekunnissa, niin nämä kaverit voivat aivan hyvin pyytää jopa 50 pyyntöä.
Kuitenkin moottori on niin optimoitu, että koko tämä bot-armeija pystyy palvelemaan helposti yksi edullinen virtuaalikone, jonka kustannus on noin 500 ruplaa kuukaudessa.
Tietenkin sivusto muistuttaa ajoittain itseään 502- ja 504-virheillä, jotka paljastuvat ja korjataan vähitellen. Joskus tapahtuu, että joku unohti lisätä indeksin tietokantaan, joskus liian monimutkainen pyyntö on pakko jakaa useaksi yksinkertaisemmaksi, ja joskus palvelimella loppuu yksinkertaisesti tila. Mutta emme luovuta – työ jatkuu, ja prosessi, kuten sanotaan, on "kontrollissa".