প্রোগ্রামারদের ব্লগ: gamer.ru-র নিচে কী ঘটছে

content auto translated from {from}

একটি ছোট ইতিহাসের পটভূমি

gamer.ru সাইটটি ইতিমধ্যে তৃতীয় (এবং সম্ভবত এমনকি চতুর্থ) সম্পূর্ণ কোড পুনর্লিখন মোকাবেলা করেছে। প্রকল্পটি প্রথমে রুবি-অন-রেলসে লেখা হয়েছিল অনেক দূরের শূন্যের সময়ে। স্থাপনার মোনোলিথিক ছিল, তাই প্রতিটি ব্যবহারকারীর অনুরোধের সাথে বিশাল পরিমাণে অতিরিক্ত ডাটাবেজের অনুরোধ এবং সমস্ত সম্ভাব্য লাইব্রেরি লোড হয়েছিল। দিনে 100,000 দর্শক সহ সম্পদটি কার্যকরভাবে কাজ করার জন্য পাঁচটি শক্তিশালী সার্ভার ব্যবহার করতে বাধ্য করা হয়েছিল, মেমক্যাশ, রেডিস ব্যবহার করতে এবং ডাটাবেজগুলিকে একাধিক সার্ভারে প্রতিলিপি করতে। এটি 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 ত্রুটির মাধ্যমে আমাদের মনে করিয়ে দেয়, যা ধীরে ধীরে শনাক্ত ও মেরামত করা হয়। মাঝে মাঝে দেখা যায় যে কেউ ডাটাবেজে সূচক যোগ করতে ভুলে গেছে, মাঝে মাঝে খুব জটিল একটি অনুরোধ কয়েকটি সাধারণ অনুরোধে ভেঙে ফেলতে হয়, এবং মাঝে মাঝে সার্ভারে স্থান অবসন্ন হয়। তবে আমরা হাল ছাড়ি না — কাজ চলছে, এবং প্রক্রিয়া, যেমন বলা হয়, "নিয়ন্ত্রণে"।