مدونة المبرمج: ماذا يحدث تحت غطاء gamer.ru

content auto translated from {from}

لمحة تاريخية قصيرة

تعيش موقع gamer.ru بالفعل إعادة كتابة كاملة للرمز للمرة الثالثة (وربما حتى الرابعة). تم إنشاء المشروع في البداية باستخدام Ruby-on-Rails في سنوات الألفين البعيدة. كانت البنية معمارية مدمجة، لذا كانت كل طلبات المستخدم "تجر" خلفها عددًا هائلًا من الطلبات الإضافية إلى قاعدة البيانات وتحميل جميع المكتبات الممكنة. لضمان عمل المورد عند 100 ألف زائر يوميًا، كان من الضروري استخدام خمسة سيرفرات قوية، استخدام memcached وRedis وتكرار قواعد البيانات عبر العديد من السيرفرات. سمح ذلك بالبقاء على قيد الحياة بصعوبة حتى عام 2018، عندما بدأت الشركة تواجه مشاكل مالية وتفكك فريق المطورين.

حوالي عام 2020، سقط شهادة SSL عن الموقع. كان من المستحيل تحديثها، حيث كانت النسخة القديمة من Ruby-on-Rails تعتمد على إصدار قديم من openssl، بينما كانت الشهادات الجديدة تتطلب إصدارًا أكثر حداثة. لم يهتم أحد كثيرًا - استمر الموقع في العمل بشكل غير متقن. في الفترة من 2015 إلى 2025، انخفضت الزيارات تدريجياً من 100 ألف إلى 1000 شخص يومياً. بدأت المدونات المخفية والتعليقات في احتواء عدد هائل من الرسائل غير المرغوب فيها، بما في ذلك محتوى غير محترم. فقد ياندكس تمامًا الاهتمام بنا، وامتلأت صفحة مشرف الويب لدينا بأخطاء حرجة.

ماذا فعلنا لإصلاح كل شيء

كان الموقع بحاجة إلى تحسين كبير، حيث لم تعد البنية القديمة تتناسب مع الواقع. تراكم في قاعدة البيانات حوالي 100 ألف منشور و1.6 مليون تعليق، كان من الضروري نقلها بعناية إلى المحرك الجديد. قررنا الانتقال إلى بنية الميكروسيرفيس على كل من الواجهة الخلفية والواجهة الأمامية، مع الاستفادة من التكنولوجيا الحديثة، بما في ذلك عناصر HTMLElement العصرية.

تمت إعادة كتابة المشروع بالكامل من الصفر باستخدام NodeJS دون استخدام مكتبات طرف ثالث، مما يضمن لنا حياة هادئة لمدة 10 إلى 20 عامًا القادمة. الآن يمكننا ألا نخاف من أن تحديث مكتبة عصرية مثل ExpressJS أو React سيكسر الموقع بأكمله ويتطلب إعادة هندسة ضخمة مرة أخرى. حتى محرر المنشورات البصري كان علينا كتابته بأنفسنا، لأننا لم نجد أي شيء جاهز يتماشى مع طلباتنا المتواضعة. الآن يقوم المحرك بتقديم صفحات HTML للأجهزة القديمة ومحركات البحث، بينما يقدم المحتوى للمستخدمين عبر AJAX.

حتى اليوم، يتحمل الموقع بنجاح متوسط تحميل يقارب 150 طلبًا في الثانية، حيث يشكل الزوار الآليين ونباتات الزحف الجزء الأكبر من حركة المرور. تتصرف روبوتات semrush وopenai بشكل نشط بشكل خاص، وكأنها تحاول تحميل الموقع بالكامل خلال يوم واحد. بينما يقوم ياندكس بفهرستنا ببطء، بسرعة 1-2 طلب في الثانية، يمكن لهذه الكائنات أن تطلب 50 طلبًا.

ومع ذلك، كان المحرك مُحسنًا لدرجة أن كل هذه جيش الروبوتات يمكن لمسه بسهولة باستخدام خادم افتراضي واحد غير مكلف يبلغ حوالي 500 روبل شهريًا.

بالطبع، بين الحين والآخر يذكرنا الموقع بنفسه بأخطاء 502 و504، والتي يتم الكشف عنها تدريجياً وإصلاحها. أحيانًا يتبين أن شخصًا ما نسي إضافة فهرس إلى قاعدة البيانات، وأحيانًا يتعين تقسيم طلب معقد جدًا إلى عدة طلبات بسيطة، وأحيانًا ينفد ببساطة المساحة على الخادم. لكننا لا نستسلم - العمل مستمر، وعملية، كما يقال، "تحت السيطرة".