Ich habe darüber nachgedacht, speicherintensive Unicorn-Instanzen zu entlasten, indem ich meinen externen Nginx (den ich bereits für die Ausgabe der 502-Wartungsseite und für die korrekte Zuordnung von IPv6-Adressen verwende) auch dafür konfiguriere, Anfragen für Bilder zu bedienen. Das Ziel ist es, einen Großteil des Nutzens zu erzielen, den man beim Verschieben der Bilder nach S3 (oder einem kompatiblen Objektspeicher) hätte, aber die Seite dennoch vollständig auf meinem eigenen Server zu halten. (Dies würde andere Site-Assets nicht von den Unicorn-Instanzen entfernen, doch diese werden von Seite zu Seite gut zwischengespeichert, sodass dies insgesamt nur geringere Kosten für die Unicorn-Instanzen verursacht.)
Genau wie bei der Konfiguration, dass externer Nginx auf einen Socket in /var/discourse/shared zeigt, würde ich /uploads aus /var/discourse/shared/$container/uploads bereitstellen.
Ich habe hier auf Meta keinen Hinweis gefunden, dass jemand dies bereits umgesetzt hat, obwohl meine Suchfähigkeiten vielleicht nicht optimal sind. Gibt es Gründe, warum dies nicht funktionieren oder in der Praxis schlecht abschneiden könnte, die ich übersehe?
Wenn du deinen Einhorn-Instanzen helfen möchtest, hilft es tatsächlich, ein CDN für dein Discourse zu aktivieren, da es die wenigen Ressourcen, die auf Einhorn-Instanzen bereitgestellt werden – wie zum Beispiel Stylesheets – zwischenspeichert.
Ich würde vermuten, dass das Aktivieren des Caching auf dem externen Nginx den gleichen Vorteil beim Laden der Unicorns bietet, ohne ein CDN einrichten zu müssen. Ich sehe Cache-Control-Header bei allen JavaScript-Assets, also werde ich das vielleicht ausprobieren…
… nun, ich sehe, dass der interne Nginx bereits proxy_cache mit einer 7-Tage-Gültigkeit für nicht-fehlgeschlagene Anfragen verwendet:
location ~ ^/(svg-sprite/|letter_avatar/|letter_avatar_proxy/|user_avatar|highlight-js|stylesheets|theme-javascripts|favicon/proxied|service-worker) {
...
# Hinweis: x-accel-redirect kann nicht mit proxy_cache verwendet werden
proxy_cache one;
proxy_cache_key "$scheme,$host,$request_uri";
proxy_cache_valid 200 301 302 7d;
proxy_cache_valid any 1m;
proxy_pass http://discourse;
break;
}
Wie hilft ein CDN in diesem Fall bei den Unicorns? Ich sehe stylesheets in dieser Liste.