Ich suche fachkundige Anleitung zur Optimierung eines Discourse-Multisite-Setups. Ich habe eine einzelne Web-VM und eine separate Datenbank-VM bei einem großen Cloud-Anbieter. Obwohl beide Maschinen über gute Spezifikationen verfügen, stelle ich fest, dass mein System von einer großen Menge an Hintergrundjobs überlastet wird, was die Datenbank zu belasten scheint.
Meine aktuelle app.yml-Konfiguration lautet:
UNICORN_WORKERS: 4UNICORN_SIDEKIQS: 4DISCOURSE_SIDEKIQ_WORKERS: 10DISCOURSE_DB_POOL: 8
Basierend auf meinen Beobachtungen liegt der Engpass nicht bei einer harten Verbindungsgrenze, sondern bei der schieren Menge an Jobs, die gleichzeitig um Datenbankressourcen konkurrieren. Die Warteschlangen in Sidekiq stauen sich ständig an, was die Seite auch für grundlegende administrative Aufgaben langsam macht.
Ich suche nach einem generischen Ansatz, um das System auf Stabilität und Leistung abzustimmen. Insbesondere möchte ich die Best Practices für Folgendes verstehen:
- Sidekiq-Nebenläufigkeit: Wie sollte
DISCOURSE_SIDEKIQ_WORKERSin einer Multisite-Umgebung dimensioniert werden, um ein hohes Jobvolumen zu bewältigen, ohne die Datenbank zu belasten? - Warteschlangentrennung: Wird empfohlen, separate Sidekiq-Prozesse auszuführen, um verschiedene Warteschlangen zu verarbeiten (z. B.
criticalvs.lowPriorität)? Dies würde sicherstellen, dass rechenintensive Jobs keine dringenderen blockieren.
Ich suche keine Lösung, die eine größere architektonische Änderung oder den Wechsel zu einem anderen Webserver erfordert, da ich den Prozess so einfach und risikofrei wie möglich halten möchte. Ich hoffe, Ratschläge für einen sicheren und effektiven Weg nach vorne zu erhalten.
Danke!