SolarCatcher
Well-Known Member
Ich habe folgende Situation: Ein Webserver cacht HTML-Dateien lokal zwischen und liefert - falls vorhanden - diese aus (funktioniert ungefähr wie die typischen Caching-Plugins für WordPress: W3 Total Cache, WP Super Cache u.ä.). Das ist soweit unproblematisch und läuft gut.
Im Anschluss werden diese HTML-Dateien aber noch etwas nach-optimiert (HTML minifiziert, komprimierte Versionen gzip und brotli erzeugt) und das ist vergleichswiese aufwändig. Wenn dann einer dieser eher unfreundlichen Bots daherkommt (Google justiert die Crawl-Rate offenbar recht gut, notfalls kann man Google auch geringere Rates vorgeben; andere sind da nicht so nett) erzeugt das aber manchmal zu hohe Prozessor-Last und das System wird sehr zäh. Ich habe es schon mit
Ich sehe zwei Möglichkeiten, das Problem zu entschärfen und würde gerne mal wissen, welches Vorgehen/welche Tools Ihr dafür nehmen würdet:
1) Ich könnte die nachträgliche Optimierung reduzieren (z.B. die Stärke der Kompression mit zopfli/gzip bzw. brotli) wenn das Shell-Skript dazu die aktuelle CPU-Auslastung kennen würde. Hier weiß ich aber nicht, wie man da vorgehen würde und ob das tatsächlich performant wäre. Ziel wäre sowas wie "Ist die Prozessorlast über 80%, dann reduziere die Kompression auf ein Minimum (z.B.
2) Man könnte die Optimierungen in eine Queue schieben, von der sie abgearbeitet werden, sobald es die Prozessorlast (wieder) zulässt. Dann werden halt mal ein paar Minuten nicht-optimierte Dateien ausgeliefert, aber das System bleibt ansich einigermaßen responsiv. Ich habe mir dazu mal sowas wie
Oder gibt es noch einfachere/bessere Lösungswege?
Im Anschluss werden diese HTML-Dateien aber noch etwas nach-optimiert (HTML minifiziert, komprimierte Versionen gzip und brotli erzeugt) und das ist vergleichswiese aufwändig. Wenn dann einer dieser eher unfreundlichen Bots daherkommt (Google justiert die Crawl-Rate offenbar recht gut, notfalls kann man Google auch geringere Rates vorgeben; andere sind da nicht so nett) erzeugt das aber manchmal zu hohe Prozessor-Last und das System wird sehr zäh. Ich habe es schon mit
nice
probiert, aber das kann das Problem nur mildern, nicht abstellen.Ich sehe zwei Möglichkeiten, das Problem zu entschärfen und würde gerne mal wissen, welches Vorgehen/welche Tools Ihr dafür nehmen würdet:
1) Ich könnte die nachträgliche Optimierung reduzieren (z.B. die Stärke der Kompression mit zopfli/gzip bzw. brotli) wenn das Shell-Skript dazu die aktuelle CPU-Auslastung kennen würde. Hier weiß ich aber nicht, wie man da vorgehen würde und ob das tatsächlich performant wäre. Ziel wäre sowas wie "Ist die Prozessorlast über 80%, dann reduziere die Kompression auf ein Minimum (z.B.
gzip -1
".2) Man könnte die Optimierungen in eine Queue schieben, von der sie abgearbeitet werden, sobald es die Prozessorlast (wieder) zulässt. Dann werden halt mal ein paar Minuten nicht-optimierte Dateien ausgeliefert, aber das System bleibt ansich einigermaßen responsiv. Ich habe mir dazu mal sowas wie
at
bzw. batch
angeschaut, aber das wird standarmäßig nur alle 5 Minuten ausgeführt (Standard-Eintrag für atrun
unter /etc/crontab
). Gäbe es da eine einfache Lösung für einen etwas feiner-granulierten Queue-/Spool-Mechanismus, den man von einem Shellskript aus nutzen kann?Oder gibt es noch einfachere/bessere Lösungswege?