- Cloud Run gebruiken voor het serveren van statische bestanden - 1
- Een blogpost over het gebruik van Google Cloud Run om statische bestanden te leveren. De focus ligt op redirects en het verbeteren van de prestaties.
Dit is een door AI vertaalde tekst.
Samenvatting van de tekst door durumis AI
- We hebben een CDN-systeem opgezet dat Google Cloud Storage (GCS) en Cloud Run integreert om afbeeldingen en webresources efficiënt te beheren en geoptimaliseerde bestanden te leveren aan webbrowsers.
- Geüploade afbeeldingen worden geconverteerd en opgeslagen in verschillende formaten zoals webp en avif, en tekstbestanden worden gecomprimeerd met gzip, br en andere methoden om geoptimaliseerde content te leveren aan gebruikers.
- Door Cloud Storage en Cloud Run in 8 regio's over de hele wereld te implementeren, leveren we resources vanaf de dichtstbijzijnde locatie naar de gebruiker, wat de latentie minimaliseert en de gebruikerservaring verbetert.
Vorig berichtheeft beschreven hoe durumis statische bestanden serveert met behulp van Cloud Run.
Maar in tegenstelling tot bestanden zoals robots.txt of favicon.ico, kunnen de afbeeldingsbestanden die op de blog worden geplaatst of de resources van de webpagina zelf niet eenvoudig worden behandeld als statische bestanden.
Daarom moeten deze bestanden worden gebruikt met Cloud Run die is gekoppeld aan Google Cloud Storage (hierna GCS genoemd).
Het basisconcept is eenvoudig. Afbeeldingen die in realtime worden geüpload of nieuwe resources die worden geüpload wanneer de site wordt bijgewerkt, worden geüpload naar GCS, en wanneer er een externe aanvraag binnenkomt, controleert Cloud Run of het bestand in GCS aanwezig is en verzendt het bestand als het aanwezig is.
De werkelijke werking is echter veel complexer dan dat.
Bij het uploaden van een afbeelding naar GCS converteert durumis de afbeeldingsbestanden standaard in drie formaten.
Als het bestand bij het uploaden jpeg of png is, worden deze afbeeldingsbestanden standaard geconverteerd naar webp en avif en tegelijkertijd opgeslagen.
Alle afbeeldingsbestanden worden aangevraagd via een URL zonder extensie. Wanneer er een aanvraag wordt gedaan, controleert Cloud Run de header van de aanvragende webbrowser en controleert of de webbrowser avif en webp kan ontvangen in die volgorde. Als geen van beide bestanden kan worden ontvangen, wordt het bestand doorgestuurd als jpeg of png. Naast het eenvoudig wijzigen van het formaat, wordt het bestand ook vooraf verkleind tot de grootte die nodig is op de webpagina en wordt het opgeslagen en doorgestuurd.
Diagram
Het is hetzelfde voor tekstbestanden.
Naast afbeeldingen zijn er veel resources die nodig zijn op een website, zoals js- en css-bestanden.
Net als bij afbeeldingen worden js- en css-bestanden gecomprimeerd met gzip en br tijdens het uploaden en opgeslagen, en bij een aanvraag wordt het bestand dat door de webbrowser wordt ondersteund rechtstreeks verzonden.
De rol van een CDN beperkt zich niet tot het eenvoudig cachen van content. In het geval van Google Cloud Platform (GCP) kan de Cloud CDN-functionaliteit rechtstreeks worden gekoppeld aan Google Cloud Load Balancer (GCLB), waardoor nog krachtigere functies worden geboden.
Cloud CDN ontvangt gegevens van de Backend Service, slaat deze op en levert deze aan de client. Tijdens dit proces kan Cloud CDN geoptimaliseerde bestanden verzenden op basis van de aanvraagheader van de client. Hierdoor kan voor dezelfde URL content in verschillende formaten worden aangeboden.
Bijvoorbeeld, voor dezelfde URL '/image/tempImage':
- In het geval van afbeeldingsbestanden
- Wordt er op basis van de 'Accept'-header van de browser content in een ander formaat verzonden.
- De Chrome-browser geeft doorgaans de voorkeur aan 'image/avif,image/webp,image/apng' in die volgorde.
- De CDN levert content in het beschikbare formaat in deze volgorde en vervangt deze door jpeg of png als deze niet wordt ondersteund.
- Evenzo, in het geval van tekstbestanden
- Wordt er ook rekening gehouden met de voorkeur voor compressiemethode.
- De Chrome-browser ondersteunt compressiemethoden zoals 'gzip, deflate, br, zstd'.
- Bijvoorbeeld, de durumis-service ondersteunt momenteel gzip en br, dus het br-gecomprimeerde bestand wordt eerst verzonden.
Door deze geavanceerde functies van de CDN kan content worden aangeboden die is geoptimaliseerd voor de omgeving van de gebruiker, wat de prestaties en gebruikerservaring van de website aanzienlijk kan verbeteren.
Zelfs met Cloud CDN is er standaard een bestandsaanvraag nodig van de CDN naar Cloud Run. Daarom gebruikt durumis een methode waarbij Cloud Storage en Cloud Run van tevoren worden geplaatst in 8 regio's over de hele wereld om resources van tevoren te plaatsen en deze resources te verzenden. Dit resulteert in een lichte toename van de kosten en het werk, maar gebruikers ervaren een aanzienlijk verbeterde latentie.
Zelfs wanneer Cloud CDN wordt gebruikt, moet het bestand standaard worden opgehaald van de oorspronkelijke server (in dit geval Cloud Run). Durumis optimaliseert deze structuur om een betere service te bieden aan wereldwijde gebruikers.
De globale optimalisatiestrategie van durumis:
- Cloud Storage en Cloud Run worden vooraf in 8 regio's over de hele wereld geplaatst
- De benodigde resources worden vooraf in elke regio gedistribueerd
- Resources worden verzonden vanuit de dichtstbijzijnde regio wanneer een gebruiker een aanvraag doet
Deze methode vereist een lichte toename van de kosten en extra werk, maar biedt gebruikers de volgende voordelen:
- Aanzienlijk verbeterde latentie
- Snellere contentlaadtijden
- Algehele verbetering van de gebruikerservaring
Deze structuur kan als volgt worden gevisualiseerd:
Met deze structuur kan durumis consistent snelle services leveren aan wereldwijde gebruikers. Omdat content wordt geleverd vanuit de dichtstbijzijnde regio, ongeacht de locatie van de gebruiker, kan de service overal ter wereld worden gebruikt met lage latentie.
Deze aanpak vereist meer inspanning voor de initiële configuratie en het onderhoud, maar levert aanzienlijke voordelen op voor de eindgebruikerservaring. Vooral voor bedrijven die wereldwijde services leveren, kan deze structuur een grote bijdrage leveren aan het leveren van concurrerende services.
In dit verhaal over CDN hebben we alleen de basisprincipes behandeld.
Eigenlijk hadden we ook de gedetailleerde instellingen kunnen behandelen, maar omdat deze per cloudprovider (GCP, Azure, AWS) verschillen en minder interessant zijn, hebben we ons gericht op de uitleg van de concepten.
In de toekomst zullen we, als de kans zich voordoet, ook dieper ingaan op de details.
In het volgende verhaal zullen we dan ingaan op hoe Cloud Storage in meerdere regio's (wij hebben er maar liefst 8!) wordt gesynchroniseerd.
Bedankt.