Wir haben gerade ein brandneues Container-Image veröffentlicht, das bei Ihrem nächsten Befehl ./launcher rebuild app verwendet wird. Wie immer müssen Sie keine Konfiguration ändern, sofern Sie unserer offiziellen Standard-Installation für Discourse gefolgt sind. Dennoch gibt es neue Funktionen, die einigen Installationen helfen werden.
Redis 6
Wir setzen in vielen Bereichen von Discourse stark auf Redis – sei es für Caching, Sidekiq, MessageBus oder verteilte Sperren und Ratenbegrenzungen. Insgesamt war es eine absolut zuverlässige Wahl für uns.
Bei sehr spezifischen Arbeitslasten kann Redis jedoch zum Flaschenhals werden. Aufgrund der einzeln-threadigen Natur von Redis, kombiniert mit unserer Unfähigkeit, mehrere Instanzen zu nutzen (aufgrund unserer LUA-Skripte), war dies ein schwer zu umgehender Engpass.
Glücklicherweise unterstützt Redis 6 die Verwendung eines Thread-Pools für I/O-Operationen. Unsere Tests haben gezeigt, dass dies bei Discourse-Clustern, die durch Redis ausgebremst werden, sehr gut funktioniert.
Wenn Sie also auf einer Maschine mit vielen CPU-Kernen laufen und Ihre Metriken zeigen, dass Redis Schwierigkeiten hat, die Last zu bewältigen, können Sie nun über den params-Abschnitt in der app.yml-Konfiguration die Verwendung von Threads für Schreiboperationen aktivieren:
params:
redis_io_threads: "4" # 1 deaktiviert es, n>1 verwendet n-1 zusätzliche Threads für I/O-Schreibvorgänge
Kleineres Image
Zu Beginn des Projekts haben wir uns dafür entschieden, ein großes Container-Image auszuliefern, um es nicht-technischen Nutzern zu erleichtern, Discourse auszuführen, und um alle erforderlichen Abhängigkeiten, Versionsverwaltungen, Updates usw. abzudecken.
Trotzdem haben wir vor kurzem die 1-Gigabyte-Grenze für das komprimierte Image überschritten, was etwas zu viel war.
Um die ständig wachsende Größe des Images einzudämmen, haben wir den Discourse-Quellcode innerhalb des Images von einer vollständigen Kopie des Quellcodes auf einen „shallow clone" umgestellt, der nur die neueste Version des Codes enthält.
Diese Änderung reduziert die Größe des komprimierten Images um 25 %, was weniger Serverplatz erfordert und Neuaufbauten bei Veröffentlichung eines neuen Images beschleunigt. Zudem sollte dies das Wachstum des Images im Laufe der Zeit begrenzen.
Wir haben dies in den Umgebungen tests-passed, beta und stable sowohl mit Neuaufbauten als auch mit Web-Updates getestet, und es unterbricht keine Standardpfade. Nutzer, die jedoch exotischere Git-Operationen in den app.yml-Hooks durchführen, müssen möglicherweise ihre Anpassungen anpassen.