Programcının Blogu: gamer.ru'nun altında neler olup bitiyor

content auto translated from {from}

Küçük Tarih Bilgisi

gamer.ru sitesi, artık üçüncü (belki de dördüncü) tam kod revizyonunu yaşıyor. Proje, uzak geçmişte Ruby-on-Rails ile yazılmıştı. Mimari monolitikti, bu nedenle her kullanıcı isteği, veritabanına ve tüm olası kütüphanelere bir dizi ek istek getiriyordu. Günde 100 bin ziyaretçi ile ortalama bir işleyiş sağlamak için tam beş güçlü sunucu kullanmak, memcached, Redis kullanmak ve veritabanlarını birkaç sunucuya çoğaltmak zorunda kaldık. Bu, 2018 yılına kadar zor da olsa dayanmamızı sağladı, ta ki şirket finansal sıkıntıya düşene kadar ve yazılım geliştiricilerin ekibi dağıldı.

2020 yılı civarında, sitenin SSL sertifikası devre dışı kaldı. Eski Ruby-on-Rails sürümü, eski openssl sürümüne bağımlı olduğundan, yenilemek imkânsız oldu; yeni sertifikalar daha güncel bir sürüm gerektiriyordu. Kimse pek endişelenmedi — site kötü bir durumda da olsa çalışmaya devam etti. 2015 ile 2025 yılları arasında ziyaretçi sayısı, günde 100 bin kişiden 1 bine yavaş yavaş düştü. Gizli bloglar ve yorumlar, içinde pek de hoş olmayan içerikler barındıran büyük miktarda spamla dolmaya başladı. Yandex tamamen ilgisini kaybetti ve webmaster hesabında kritik hatalarla dolu kırmızı bir tuval ortaya çıktı.

Sorunları Nasıl Çözdük

Site, ciddi bir optimizasyona ihtiyaç duyuyordu çünkü eski mimari artık gerçeklere uymuyordu. Veritabanında yaklaşık 100 bin gönderi ve 1,6 milyon yorum birikmişti; bunların yeni motor içine dikkatlice taşınması gerekiyordu. Hem arka uçta hem de ön uçta mikro hizmet mimarisine geçmeye karar verdik ve bu arada modern teknolojileri, modaya uygun HTMLElement'leri de kullandık.

Proje, üçüncü taraf kütüphaneler kullanmadan tamamen sıfırdan NodeJS ile yeniden yazıldı; bu da bize önümüzdeki 10-20 yıl boyunca rahat bir yaşam garantisi sağlıyor. Artık ExpressJS veya React gibi bir modanın kütüphanesinin güncellenmesinin tüm siteyi bozmasından ve büyük ölçekli yeniden yapılandırma gerektirmesinden korkmamıza gerek yok. Hatta, ihtiyaçlarımıza uygun hazır bir görsel gönderi editörü bulamadığımız için bunu kendimiz yazmak zorunda kaldık. Şimdi motor, eski cihazlar ve arama motorları için HTML sayfalarını oluşturuyor ve kullanıcılara içeriği AJAX üzerinden sunuyor.

Günümüzde site, saniyede ortalama 150 isteğe kadar başarılı bir şekilde dayanabiliyor; bunun büyük kısmı arama botları ve diğer tarayıcılardan oluşuyor. Özellikle semrush ve openai botları, sanki bir günde tüm siteyi indirmek istiyormuş gibi hareket ediyor. Eğer Yandex, bizi yavaşça, saniyede 1-2 istekle indeksliyorsa, bu arkadaşlar 50 isteğe kadar talepte bulunabiliyor.

Ancak motor o kadar optimize oldu ki, bu bot ordusunu kolayca karşılayabilen sadece 500 ruble civarı bir sanal sunucu yeterli oluyor.

Elbette, arada sırada sitenin bize 502 ve 504 hatalarıyla kendini hatırlattığı durumlar oluyor; bunlar yavaş yavaş tespit edilip düzeltiliyor. Bazen birinin veritabanına indeks eklemeyi unuttuğu, bazen çok karmaşık bir isteği birkaç basit isteğe bölmemiz gerektiği, bazen de sunucuda yer bittiği ortaya çıkıyor. Ama pes etmiyoruz — çalışma devam ediyor ve süreç, dediğimiz gibi, "kontrol altında".