Mit der 1RTT-Philosophie von Discourse ist es vielleicht an der Zeit, den Code für die Bereitstellung von Avatar-Bildern neu zu schreiben.
Avatar-Bilder sollten wie jedes andere hochgeladene Bild behandelt werden. Sie sollten beim Hochladen in der Größe geändert, gespeichert und direkt vom Dateisystem/S3/CDN bereitgestellt werden.
Die aktuelle Discourse-Methode verwendet eine Proxy-Methode zur Bereitstellung von Avatar-Bildern. Dieser Ansatz erzeugt unnötige HTTP-Roundtrips und Herausforderungen bei der IP-Adressierung.
Hier ist ein Überblick über Avatar-Anfragen:
- Das anfängliche Discourse-HTML wird gerendert.
- Der Browser erkennt ein Avatar-Bild und fordert ein Bild vom Discourse-Server an.
- Der Discourse-Server fungiert als Proxy und fordert das Bild aus dem lokalen Dateispeicher/S3/CDN an.
- Der Discourse-Server empfängt das Bild.
- Der Discourse-Server sendet das Bild an den Browser.
Jeder benutzerdefinierte Avatar hat 1 zusätzlichen HTTP-Roundtrip und die damit verbundene Serververarbeitungszeit. Ein typisches Thema oder eine Themenliste kann mehr als 30 benutzerdefinierte Avatar-Bilder enthalten. Auf meiner Website führt dies zu 10.000 bis 20.000 zusätzlichen RTTs und einer damit verbundenen Serverlast pro Tag, die vermieden werden könnten.
Darüber hinaus werden die Avatar-Bilder direkt vom Server aufgerufen. Um einen CDN-Schutz auf CDN-Ebene zu implementieren, ist eine Whitelisting der IP-Adresse erforderlich. Dies erfordert das Whitelisting von Gateways anstelle von Server-IP-Adressen. Hosting-Unternehmen nehmen regelmäßig Änderungen vor, um den Netzwerkverkehr auszugleichen. Meine Gateway-IP-Adresse wird sich ändern/weiterentwickeln. Die Software sollte sich nicht auf die Aktualisierung der IP-Adresse verlassen, damit grundlegende Avatar-Bilder funktionieren. Dies basiert auf dem folgenden Vorfall im Support: Avatar Proxy und CDN Hot-Link Protection
Aus Sicht der Leistung und Einfachheit, können Avatar-Bilder direkt aus dem dafür vorgesehenen Datenspeicher von Discourse bereitgestellt werden?