تمتلك منتديات Maker قاعدة مستخدمين كبيرة، لكنها نادرًا ما يكون لديها عدد كافٍ من المستخدمين في الوقت نفسه متصلين عبر الإنترنت لانهيار عرض صور الأيقونات في قسم “من متصل الآن”. وجدنا أن إضافة “من متصل الآن” كانت مسؤولة عن أداء بطيء، لدرجة حدوث انتهاء مهلة للطلبات، حتى مع وجود مستخدمين متصلين اثنين فقط. نستخدم إعدادات nginx خارجية مع صفحة غير متصلة بالإنترنت، وكنا نعرض صفحة الصيانة دوريًا حتى عندما لا تكون هناك أعمال صيانة جارية، وذلك نتيجة تلك الطلبات التي انتهت مهلتها.
نقوم بخدمة الصور محليًا بعد الانتقال من مساحات Digital Ocean، مما يخلق منافسة لعمال Unicorn. ومع ذلك، ندير كل شيء على آلة افتراضية بوحدة معالجة مركزية مزدوجة وذاكرة عشوائية 4 جيجابايت، ولدينا قاعدة بيانات كبيرة نسبيًا (حوالي 400 ألف منشور، وقاعدة بيانات بحجم 6 جيجابايت)، لذا لا نملك مساحة لإضافة المزيد من عمال Unicorn ببساطة، حيث يستهلك كل منهم نصف جيجابايت. أشك في أنه لو كنا نستخدم تخزين كائنات للصور، لكان التأثير العام أقل بسبب منافسة أقل لعمال Unicorn، لكن الأمر لا يتطلب الكثير ليظل التأثير كبيرًا، بالنظر إلى أننا لاحظنا هذا التأثير حاليًا حتى مع وجود مستخدمين اثنين متصلين فقط.
تحديث: أدى تعديل منطقة flood المحددة بمعدل التقييد من 12 طلبًا في الثانية إلى 36 طلبًا في الثانية، وتغيير burst من 12 إلى 36، إلى تقليل تأثير قسم “من متصل الآن” على الأقل. نحن نختبر هذا الإعداد حاليًا.
تحديث إضافي: مع مضاعفة معدل الفيض ثلاث مرات، لم نتلق أي تقارير عن مشاكل حتى الآن.
أنا أستخدم nginx خارجي وطبقت تحديد المعدل على nginx الخارجي، باستخدام قالب المعدل المحدد كنقطة انطلاق، لكنني أستخدم تحديد المعدل في nginx الداخلي، لأن nginx الخارجي لا يعرف أي المسارات ثابتة، وبالتالي يطبق تحديد المعدل على المسارات الثابتة وكذلك الديناميكية، مما تسبب عند تطبيقه في حدوث العديد من حالات الفشل/إعادة المحاولة عند تحميل الأصول الثابتة. لاحظ أن هذا سبب لتشغيل nginx خارجي؛ وإلا، أعتقد أن جميع حركة مرور IPv6 تُنسب إلى عنوان IP الخاص بـ Docker ويتم تحديد معدلها كما لو كانت عنوان IP واحدًا.