أنا أبحث عن بعض التوجيهات المتخصصة لتحسين إعداد Discourse متعدد المواقع. لدي جهاز افتراضي ويب واحد وجهاز افتراضي قاعدة بيانات منفصل على مزود سحابي رئيسي. بينما يمتلك كلا الجهازين مواصفات جيدة، أجد أن نظامي يتعرض للضغط بسبب الحجم الكبير من المهام الخلفية، مما يبدو أنه يضع ضغطًا على قاعدة البيانات.
إعداد app.yml الحالي الخاص بي هو:
UNICORN_WORKERS: 4UNICORN_SIDEKIQS: 4DISCOURSE_SIDEKIQ_WORKERS: 10DISCOURSE_DB_POOL: 8
بناءً على ملاحظاتي، فإن عنق الزجاجة لا يصل إلى حد اتصال صارم، بل إلى الحجم الهائل للمهام التي تتنافس على موارد قاعدة البيانات في نفس الوقت. قوائم الانتظار في Sidekiq تمتلئ باستمرار، مما يجعل الموقع بطيئًا، حتى للمهام الإدارية الأساسية.
أبحث عن نهج عام لضبط النظام لتحقيق الاستقرار والأداء. على وجه التحديد، أود أن أفهم أفضل الممارسات لـ:
- تزامن Sidekiq: كيف يجب تحديد حجم
DISCOURSE_SIDEKIQ_WORKERSفي بيئة متعددة المواقع للتعامل مع حجم مهام كبير دون الضغط على قاعدة البيانات؟ - فصل قوائم الانتظار: هل يُنصح بتشغيل عمليات Sidekiq منفصلة للتعامل مع قوائم انتظار مختلفة (على سبيل المثال، الأولويات
criticalمقابلlow)؟ سيضمن ذلك عدم قيام المهام الثقيلة بحظر المهام الأكثر إلحاحًا.
أنا لا أبحث عن حل يتطلب تغييرًا معماريًا كبيرًا أو الانتقال إلى خادم ويب مختلف في هذا الوقت، حيث أريد الحفاظ على العملية بسيطة قدر الإمكان ومنخفضة المخاطر. آمل في الحصول على مشورة بشأن مسار آمن وفعال للمضي قدمًا.
شكرًا!