Optimierung einer großen Discourse Multisite: Datenbank- und Sidekiq-Engpässe

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: 4
  • UNICORN_SIDEKIQS: 4
  • DISCOURSE_SIDEKIQ_WORKERS: 10
  • DISCOURSE_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_WORKERS in 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. critical vs. low Prioritä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!

3 „Gefällt mir“

Discourse sollte in der Lage sein, diese automatisch an Ihre Systemressourcen anzupassen. Beachten Sie, dass es sicher ist, das Skript ./discourse-setup erneut auszuführen, wenn Sie kürzlich Ihre Systemressourcen erhöht haben. Das Skript kann sich an die erhöhten Ressourcen anpassen und Ihre .yml entsprechend anpassen.

2 „Gefällt mir“

Klingt, als ob Sie weniger brauchen?

Ich bin ziemlich sicher, dass es bereits weiß, dass es die hochpriorisierten Jobs bevorzugen muss.

2 „Gefällt mir“

@itsbhanusharma @pfaffman Danke für Ihre Hilfe und Ihren Beitrag dazu! Ich weiß es zu schätzen, dass Sie sich beide die Zeit genommen haben, Ihr Fachwissen zu teilen.

4 „Gefällt mir“

Wenn die Datenbank der Engpass ist, haben Sie erwogen, auf einen größeren Instanztyp für Ihre Cloud-Datenbank umzusteigen?

1 „Gefällt mir“

Dieses Thema wurde 30 Tage nach der letzten Antwort automatisch geschlossen. Neue Antworten sind nicht mehr zulässig.