प्रोग्रामर का ब्लॉग: gamer.ru के कैप के तहत क्या हो रहा है
एक छोटी ऐतिहासिक जानकारी
वेबसाइट gamer.ru पहले से ही तीसरी (या शायद चौथी) बार पूरी तरह से कोड को फिर से लिखा जा रहा है। प्रारंभ में यह प्रोजेक्ट दूर के बेहद पुराने दिनों में Ruby-on-Rails पर लिखा गया था। आर्किटेक्चर मोनोलिथिक था, इसलिए हर उपयोगकर्ता के अनुरोध ने डेटाबेस में अतिरिक्त विशाल संख्या में पूछताछ और सभी संभावित लाइब्रेरीज़ को लोड किया। प्रति दिन 100,000 विजिटर्स के साथ संसाधन के संचालन के लिए, पांच शक्तिशाली सर्वरों का उपयोग करना पड़ा, मेमकैश, Redis का इस्तेमाल करना पड़ा और डेटाबेस को कई सर्वरों में दोहराना पड़ा। यह किसी तरह 2018 तक बने रहने की अनुमति दी, जब कंपनी में वित्तीय समस्याएँ शुरू हुईं और विकासकर्ताओं की टीम भाग गई।
लगभग 2020 में वेबसाइट का SSL सर्टिफिकेट गिर गया। इसे अपडेट करना असंभव साबित हुआ, क्योंकि पुराने Ruby-on-Rails संस्करण ने पुरानी openssl संस्करण पर निर्भर किया, जबकि नए सर्टिफिकेट को अधिक ताज़ा संस्करण की आवश्यकता थी। किसी ने खासकर परवाह नहीं की - वेबसाइट हद तक चलती रही। 2015 से 2025 तक, ट्रैफिक क्रमशः 100,000 से घटकर प्रति दिन 1,000 लोगों तक पहुँच गया। छिपे हुए ब्लॉग और टिप्पणियों में विशाल मात्रा में स्पैम आ गया, जिसमें कुछ खास अच्छे कंटेंट नहीं था। यांडेक्स ने हमारे प्रति पूरी तरह से रुचि खो दी, और वेबमास्टर में केवल संकट की त्रुटियों का एक लाल कपड़ा था।
हमने सब ठीक करने के लिए क्या किया
वेबसाइट को गंभीर ऑप्टिमाइजेशन की आवश्यकता थी, क्योंकि पुरानी आर्किटेक्चर अब वास्तविकताओं के अनुरूप नहीं थी। डेटाबेस में लगभग 100,000 पोस्ट और 1.6 मिलियन टिप्पणियाँ जमा हो गई थीं, जिन्हें नए इंजन पर सावधानी से स्थानांतरित करना था। हमने निर्णय लिया कि हम बैकएंड और फ्रंटएंड दोनों में माइक्रोसर्विस आर्किटेक्चर में जा रहे हैं, साथ ही आधुनिक तकनीकों का उपयोग करते हुए, जिसमें फैशनेबल HTMLElement शामिल हैं।
प्रोजेक्ट को पूरी तरह से NodeJS पर बिना किसी बाहरी लाइब्रेरी के पुनः लिखा गया था, जो हमें अगले 10-20 वर्षों के लिए शांति की गारंटी देता है। अब हमें यह डर नहीं है कि किसी फैशनेबल लाइब्रेरी जैसे ExpressJS या React का अपडेट पूरे वेबसाइट को तोड़ देगा और अगली व्यापक रिफैक्टरिंग की आवश्यकता होगी। यहाँ तक कि पोस्ट के लिए विज़ुअल एडिटर को खुद ही लिखना पड़ा, क्योंकि हमारे साधारण अनुरोधों को पूरा करने के लिए कोई तैयार चीज़ नहीं मिली। अब इंजन पुराने उपकरणों और सर्च इंजिनों के लिए HTML-पृष्ठों को प्रस्तुत करता है, जबकि उपयोगकर्ताओं को AJAX के माध्यम से सामग्री प्रदान करता है।
आज की स्थिति में, वेबसाइट औसतन प्रति सेकंड लगभग 150 अनुरोधों को आसानी से संभालती है, जिसमें से अधिकांश ट्रैफ़िक खोज बॉट और अन्य क्रॉलर द्वारा उत्पन्न होता है। विशेष रूप से, semrush और openai बॉट सक्रिय होते हैं, जो ऐसा व्यवहार करते हैं जैसे वे एक दिन में पूरे वेबसाइट को उतारना चाहते हैं। अगर यांडेक्स हमें धीरे-धीरे, प्रति सेकंड 1-2 अनुरोधों की गति से इंडेक्स करता है, तो ये लोग आसानी से 50 अनुरोध भी कर सकते हैं।
हालांकि, इंजन इतना ऑप्टिमाइज्ड है कि इस सारी बॉट आर्मी को संभालने के लिए केवल एक सस्ती वर्चुअल मशीन की आवश्यकता होती है जिसकी कीमत लगभग 500 रुपये प्रति माह होती है।
बेशक, वेबसाइट समय-समय पर हमें 502 और 504 की त्रुटियों के माध्यम से याद दिलाती है, जिन्हें धीरे-धीरे पहचाना और ठीक किया जा रहा है। कभी-कभी यह स्पष्ट होता है कि किसी ने डेटाबेस में इंडेक्स जोड़ना भूल गया, कभी-कभी जटिल अनुरोध को कुछ सरल अनुरोधों में विभाजित करना पड़ता है, और कभी-कभी सर्वर पर साधारण रूप से स्थान समाप्त हो जाता है। लेकिन हम हार नहीं मानते - कार्य जारी है, और प्रक्रिया, जैसा कि कहा जाता है, "नियंत्रण में है"।