web-dev-qa-db-fra.com

Vernis hit-for-pass signifie?

Comme Varnish Version 3 a quelques objets pour différentes opérations.

Par exemple, pass est utilisé lorsqu'il doit récupérer des données du backend. et il utilise hit lorsqu'il trouve le contenu demandé dans le cache.

Mais je ne peux pas comprendre l'utilisation du hit-for-pass. quand le vernis l'utilise? Je n'ai trouvé aucun matériel utile sur le net qui me permette de comprendre.

47
Muneeb Nasir

Un objet hit_for_pass est conçu pour optimiser la procédure de récupération sur un serveur principal.

Pour les échecs de cache ordinaires, Varnish mettra en file d'attente tous les clients demandant le même objet de cache et enverra une seule demande au backend. C'est généralement le plus rapide, car le backend fonctionne sur une seule requête au lieu de l'envahir avec n requêtes en même temps.

N'oubliez pas que certains backends utilisent beaucoup de temps pour préparer un objet; 10 secondes n'est pas rare. Si c'est le HTML de la première page et que vous avez 3000 req/s contre, envoyer une seule requête backend a beaucoup de sens.

Le problème survient lorsque Varnish a récupéré l'objet, il voit qu'il ne peut pas être mis en cache. Les raisons peuvent être que le backend envoie "Cache-Control: max-age = 0", ou (plus souvent) un en-tête Set-Cookie. Dans ce cas, vous avez entre 3 000 et 30 000 clients (3 000 requêtes/s * 10 secondes) inactifs dans la file d'attente, et pour chacun de ces clients, la même demande de traitement lent et lent doit être effectuée pour les servir. Cela ruinera le temps de réponse de votre site.

Varnish enregistre donc la décision selon laquelle cette demande ne peut pas être mise en cache en créant un objet hit_for_pass.

À la prochaine demande pour la même URL, la recherche de cache renverra un objet hit_for_pass. Cela indique que plusieurs récupérations peuvent être effectuées en même temps. Votre backend n'est peut-être pas trop content, mais au moins Varnish ne fait pas la queue pour les clients sans raison.

161
lkarsten