אני מחפש הדרכה מומחים בנוגע לאופטימיזציה של הגדרת ריבוי אתרים של Discourse. יש לי מכונה וירטואלית אחת לרשת ומכונה וירטואלית נפרדת למסד נתונים אצל ספק ענן גדול. בעוד שלשתי המכונות יש מפרטים סבירים, אני מגלה שהמערכת שלי מוצפת מכמות גדולה של משימות ברקע, מה שנראה שמעמיס על מסד הנתונים.
תצורת ה-app.yml הנוכחית שלי היא:
UNICORN_WORKERS: 4UNICORN_SIDEKIQS: 4DISCOURSE_SIDEKIQ_WORKERS: 10DISCOURSE_DB_POOL: 8
בהתבסס על התצפיות שלי, צוואר הבקבוק אינו פגיעה במגבלת חיבור קשיחה, אלא דווקא הכמות העצומה של משימות המתחרות על משאבי מסד הנתונים בו-זמנית. התורים ב-Sidekiq מתמלאים ללא הרף, מה שגורם לאתר להרגיש איטי, אפילו עבור משימות ניהוליות בסיסיות.
אני מחפש גישה כללית לכוונון המערכת ליציבות וביצועים. באופן ספציפי, הייתי רוצה להבין את שיטות העבודה המומלצות עבור:
- מקביליות Sidekiq: כיצד יש לכמת את
DISCOURSE_SIDEKIQ_WORKERSבסביבת ריבוי אתרים כדי לטפל בכמות משימות גבוהה מבלי להעמיס על מסד הנתונים? - הפרדת תורים: האם מומלץ להפעיל תהליכי Sidekiq נפרדים לטיפול בתורים שונים (למשל, עדיפות
criticalלעומתlow)? זה יבטיח שמשימות כבדות לא יחסמו משימות דחופות יותר.
איני מחפש פתרון הדורש שינוי ארכיטקטוני גדול או מעבר לשרת אינטרנט אחר בשלב זה, מכיוון שאני רוצה לשמור על התהליך פשוט ככל האפשר ובעל סיכון נמוך. אני מקווה לקבל ייעוץ לגבי דרך פעולה בטוחה ויעילה.
תודה!