Blog Programmer: Apa yang Terjadi di Balik Layar gamer.ru
Catatan Sejarah Singkat
Situs gamer.ru telah mengalami penulisan ulang kode yang ketiga (atau bahkan mungkin keempat). Proyek ini awalnya ditulis di Ruby-on-Rails pada tahun 2000-an yang lalu. Arsitekturnya bersifat monolitik, sehingga setiap permintaan pengguna 'menarik' sejumlah besar permintaan tambahan ke database dan memuat semua pustaka yang mungkin. Untuk memastikan situs tetap berjalan dengan 100 ribu pengunjung per hari, kami harus menggunakan lima server kuat, memanfaatkan memcached, Redis, dan mereplikasi database ke beberapa server. Ini memungkinkan kami untuk bertahan hingga tahun 2018, ketika masalah keuangan mulai muncul dan tim pengembang bubar.
Sekitar tahun 2020, situs kehilangan sertifikat SSL. Memperbaruinya tidak mungkin, karena versi lama Ruby-on-Rails tergantung pada versi openssl yang sudah ketinggalan zaman, sementara sertifikat baru memerlukan versi yang lebih baru. Tidak ada yang terlalu khawatir — situs terus beroperasi, meskipun dengan buruk. Dari tahun 2015 hingga 2025, jumlah pengunjung secara bertahap turun dari 100 ribu menjadi 1 ribu orang per hari. Di blog dan komentar tersembunyi, jumlah spam, termasuk konten yang tidak pantas, meningkat secara signifikan. Yandex sepenuhnya kehilangan minat pada kami, dan webmaster dipenuhi dengan sejumlah besar kesalahan kritis yang ditandai dengan warna merah.
Apa yang Kami Lakukan untuk Memperbaikinya
Situs ini membutuhkan optimasi serius, karena arsitektur lama tidak lagi memenuhi kenyataan. Di database terkumpul sekitar 100 ribu pos dan 1,6 juta komentar yang perlu dipindahkan dengan hati-hati ke mesin baru. Kami memutuskan untuk beralih ke arsitektur mikroservis di backend dan frontend, sambil menggunakan teknologi modern, termasuk HTMLElement yang sedang tren.
Proyek ini sepenuhnya ditulis ulang dari awal menggunakan NodeJS tanpa menggunakan pustaka pihak ketiga, yang menjamin kami hidup tenang selama 10-20 tahun ke depan. Sekarang kami tidak perlu khawatir bahwa pembaruan pustaka trendi seperti ExpressJS atau React bisa merusak seluruh situs dan membutuhkan refaktorisasi besar-besaran. Bahkan, editor visual untuk pos harus kami buat sendiri, karena tidak ada solusi yang ada yang memenuhi permintaan sederhana kami. Sekarang mesin merender halaman HTML untuk perangkat lama dan mesin pencari, sementara memberikan konten kepada pengguna melalui AJAX.
Saat ini, situs ini berhasil menangani beban rata-rata sekitar 150 permintaan per detik, di mana sebagian besar lalu lintas terdiri dari bot pencari dan crawler lainnya. Bot semrush dan openai berperilaku sangat aktif, seolah mencoba untuk mengunduh seluruh situs dalam sehari. Jika Yandex mengindeks kami perlahan, dengan kecepatan 1-2 permintaan per detik, maka teman-teman ini dapat mengajukan hingga 50 permintaan.
Namun, mesin ini dioptimalkan sedemikian rupa sehingga seluruh armada bot ini dapat dilayani hanya dengan satu virtual private server yang harganya sekitar 500 rubel per bulan.
Tentu saja, situs ini sesekali mengingatkan kami tentang dirinya dengan kesalahan 502 dan 504, yang secara bertahap diidentifikasi dan diperbaiki. Kadang-kadang ternyata ada orang yang lupa menambahkan indeks ke database, kadang permintaan yang terlalu kompleks harus dibagi menjadi beberapa permintaan yang lebih sederhana, dan terkadang ruang di server habis. Tapi kami tidak menyerah — bekerja terus berlanjut dan proses, seperti yang dikatakan, 'dalam kendali'.