21 novembre 2022

Vernis et Cache Control, comment bien maîtriser la durée du Cache

Cache Control est un en-tête HTTP qui peut aider à informer les serveurs de cache comme Varnish de la durée de vie du cache.

Introduction

Vernis Cache est un proxy inverse HTTP et un accélérateur HTTP populaires. Il se trouve devant nos services Web/applicatifs et utilise une gamme de techniques de mise en cache, de prélecture et de compression pour réduire la charge sur les services backend en amont et fournir à nos clients des temps de réponse améliorés.

En plus d'améliorer les performances, une fonctionnalité peut-être moins connue de Varnish est qu'il peut être configuré pour protéger les clients contre les pannes et les pannes en amont. Si un service en amont est temporairement indisponible ou commence à échouer, Varnish peut se replier pour fournir des réponses obsolètes à partir de son cache, à condition que la période de grâce des objets mis en cache n'ait pas expiré.

Nous pouvons désormais affirmer sans en faire un secret que Varnish Cache est la base de notre infrastructure et de nos services Hosting Performance.

Contrôle du cache

Le rôle cache-controlde l'en-tête est d'indiquer aux caches en aval (navigateurs et caches proxy comme Varnish) comment mettre en cache les réponses. La valeur de s-maxagepermet à Varnish de connaître le nombre de secondes pendant lesquelles la réponse peut être mise en cache, également appelée durée de vie (TTL). La valeur de max-ageil sera utilisé par les caches du navigateur (et aussi par les caches proxy au cas où s-maxagenon précisé). Interne au vernis, la valeur est utilisée pour définir la beresp.ttlvariable.

Il stale-while-revalidateLa valeur informe le cache de la durée pendant laquelle il est acceptable de réutiliser une réponse obsolète. Dans l'exemple ci-dessus, la réponse deviendra périmée après 10 m (600 s), de sorte que le cache peut la réutiliser pour toute requête effectuée dans les 2 prochains jours (172800 XNUMX s). Ceci est également connu sous le nom de période de grâce, interne à Varnish la valeur est utilisée pour définir le beresp.gracevariable. La première réponse récupérée pendant la période de grâce déclenchera une requête de récupération en arrière-plan asynchrone, rendant l'objet mis en cache à nouveau frais, sans transmettre le coût de latence de la revalidation au client.

De plus, si le service backend est en panne ou répond lentement, les clients seront protégés contre de telles réponses jusqu'à l'expiration de la période de grâce, ce qui, espérons-le, donnera au service suffisamment de temps pour récupérer, ou aux ingénieurs suffisamment de temps pour résoudre un problème, avant qu'il n'affecte négativement le client. vivre. Il ne faut pas oublier qu'il s'agit d'un compromis : s'il fournit des réponses plus rapides et une plus grande résilience, il augmente également les chances de fournir des réponses obsolètes, voire incorrectes.

Le réglage d'un stale-while-revalidateune durée de vie élevée est un jugement et peut ne pas être appropriée pour les réponses contenant des données hautement dynamiques rendues côté serveur, où la fraîcheur est essentielle. Nous avons essayé de maximiser l'utilisation de la fonctionnalité sur les réponses contenant des données relativement statiques, telles que notre contenu éditorial et les pages de destination des catégories.

Configuration du vernis

Par défaut, Varnish fournira une réponse obsolète pendant la période de grâce s'il ne peut pas se connecter au service backend ou si la demande expire. Le comportement peut être étendu aux erreurs 5xx avec le code suivant danssub vcl_backend_response

sous vcl_backend_response {    si (beresp.status >= 500 && bereq.is_bgfetch) { 
        retour (abandon); 
    }    .... 
}

beresp.statuscontient le code de statut renvoyé par le service backend, bereq.is_bgfetchsera vrai si la requête backend a été envoyée de manière asynchrone après que le client a reçu une réponse mise en cache et return (abandon)ordonne à Varnish d'abandonner la demande et de ne rien faire.

En conclusion

Une réponse en cache obsolète, si elle est disponible, offrira dans la plupart des cas une meilleure expérience client qu'une page d'erreur. Lorsque le contenu rendu côté serveur est suffisamment statique pour permettre à stale-while-revalidatehaute durabilité, la mise en cache peut être un outil utile pour augmenter sa résilience.

Vous avez des doutes ? Vous ne savez pas par où commencer ? Contactez-nous !

Nous avons toutes les réponses à vos questions pour vous aider à faire le bon choix.

Discute avec nous

Discutez directement avec notre support avant-vente.

0256569681

Contactez-nous par téléphone pendant les heures de bureau 9h30 - 19h30

Contactez-nous en ligne

Ouvrez une demande directement dans l'espace contact.

AVIS DE NON-RESPONSABILITÉ, Mentions légales et droits d'auteur. Red Hat, Inc. détient les droits sur Red Hat®, RHEL®, RedHat Linux® et CentOS® ; AlmaLinux™ est une marque commerciale de la AlmaLinux OS Foundation ; Rocky Linux® est une marque déposée de la Rocky Linux Foundation ; SUSE® est une marque déposée de SUSE LLC ; Canonical Ltd. détient les droits sur Ubuntu® ; Software in the Public Interest, Inc. détient les droits sur Debian® ; Linus Torvalds détient les droits sur Linux® ; FreeBSD® est une marque déposée de la Fondation FreeBSD ; NetBSD® est une marque déposée de la Fondation NetBSD ; OpenBSD® est une marque déposée de Theo de Raadt ; Oracle Corporation détient les droits sur Oracle®, MySQL®, MyRocks®, VirtualBox® et ZFS® ; Percona® est une marque déposée de Percona LLC ; MariaDB® est une marque déposée de MariaDB Corporation Ab ; PostgreSQL® est une marque déposée de PostgreSQL Global Development Group ; SQLite® est une marque déposée de Hipp, Wyrick & Company, Inc. ; KeyDB® est une marque déposée d'EQ Alpha Technology Ltd. ; Typesense® est une marque déposée de Typesense Inc. ; REDIS® est une marque déposée de Redis Labs Ltd ; F5 Networks, Inc. détient les droits sur NGINX® et NGINX Plus® ; Varnish® est une marque déposée de Varnish Software AB ; HAProxy® est une marque déposée de HAProxy Technologies LLC ; Traefik® est une marque déposée de Traefik Labs ; Envoy® est une marque déposée de CNCF ; Adobe Inc. détient les droits sur Magento® ; PrestaShop® est une marque déposée de PrestaShop SA ; OpenCart® est une marque déposée d'OpenCart Limited ; Automattic Inc. détient les droits sur WordPress®, WooCommerce® et JetPack® ; Open Source Matters, Inc. détient les droits sur Joomla® ; Dries Buytaert détient les droits sur Drupal® ; Shopify® est une marque déposée de Shopify Inc. ; BigCommerce® est une marque déposée de BigCommerce Pty. Ltd.; TYPO3® est une marque déposée de la TYPO3 Association; Ghost® est une marque déposée de la Ghost Foundation; Amazon Web Services, Inc. détient les droits sur AWS® et Amazon SES® ; Google LLC détient les droits sur Google Cloud™, Chrome™ et Google Kubernetes Engine™ ; Alibaba Cloud® est une marque déposée d'Alibaba Group Holding Limited ; DigitalOcean® est une marque déposée de DigitalOcean, LLC ; Linode® est une marque déposée de Linode, LLC ; Vultr® est une marque déposée de The Constant Company, LLC ; Akamai® est une marque déposée d'Akamai Technologies, Inc. ; Fastly® est une marque déposée de Fastly, Inc. ; Let's Encrypt® est une marque déposée d'Internet Security Research Group ; Microsoft Corporation détient les droits sur Microsoft®, Azure®, Windows®, Office® et Internet Explorer® ; Mozilla Foundation détient les droits sur Firefox® ; Apache® est une marque déposée de The Apache Software Foundation ; Apache Tomcat® est une marque déposée de The Apache Software Foundation ; PHP® est une marque déposée de PHP Group ; Docker® est une marque déposée de Docker, Inc. Kubernetes® est une marque déposée de The Linux Foundation ; OpenShift® est une marque déposée de Red Hat, Inc. ; Podman® est une marque déposée de Red Hat, Inc. ; Proxmox® est une marque déposée de Proxmox Server Solutions GmbH ; VMware® est une marque déposée de Broadcom Inc. ; CloudFlare® est une marque déposée de Cloudflare, Inc. ; NETSCOUT® est une marque déposée de NETSCOUT Systems Inc. ; ElasticSearch®, LogStash® et Kibana® sont des marques déposées d'Elastic NV ; Grafana® est une marque déposée de Grafana Labs ; Prometheus® est une marque déposée de The Linux Foundation ; Zabbix® est une marque déposée de Zabbix LLC ; Datadog® est une marque déposée de Datadog, Inc. ; Ceph® est une marque déposée de Red Hat, Inc. ; MinIO® est une marque déposée de MinIO, Inc. ; Mailgun® est une marque déposée de Mailgun Technologies, Inc. ; SendGrid® est une marque déposée de Twilio Inc. Postmark® est une marque déposée d'ActiveCampaign, LLC ; cPanel®, LLC détient les droits sur cPanel® ; Plesk® est une marque déposée de Plesk International GmbH ; Hetzner® est une marque déposée de Hetzner Online GmbH ; OVHcloud® est une marque déposée d'OVH Groupe SAS ; Terraform® est une marque déposée de HashiCorp, Inc. ; Ansible® est une marque déposée de Red Hat, Inc. ; cURL® est une marque déposée de Daniel Stenberg ; Facebook®, Inc. détient les droits sur Facebook®, Messenger® et Instagram®. Ce site n'est pas affilié, sponsorisé ou autrement associé à l'une des entités mentionnées ci-dessus et ne représente aucune de ces entités de quelque manière que ce soit. Tous les droits sur les marques et noms de produits mentionnés sont la propriété de leurs titulaires respectifs des droits d'auteur. Toutes les autres marques mentionnées sont la propriété de leurs titulaires respectifs.

JUSTE UN MOMENT !

Vous êtes-vous déjà demandé si votre hébergement était nul ?

Découvrez dès maintenant si votre hébergeur vous pénalise avec un site web lent digne des années 1990 ! Résultats immédiats.

Fermer le CTA
Retour en haut de page