Un oggetto hit_for_pass viene creato per ottimizzare la procedura di recupero su un server di back-end.
Per errori di cache ordinari, Varnish mette in coda tutti i client che richiedono lo stesso oggetto cache e invia una singola richiesta al back-end. Questo è solitamente il più veloce, lasciando che il backend lavori su una singola richiesta invece di sommergerlo con n richieste allo stesso tempo.
Ricordare che alcuni backend utilizzano molto tempo per preparare un oggetto; 10 secondi non è raro. Se questo è l'HTML della prima pagina e hai 3000 req/s contro di esso, inviare solo una richiesta di backend ha molto senso.
Il problema sorge quando dopo che Varnish ha recuperato l'oggetto, vede che non può essere memorizzato nella cache. I motivi possono essere che il backend invia "Cache-Control: max-age = 0" o (più spesso) un'intestazione Set-Cookie. In questo caso si ha da qualche parte tra 3.000 e 30.000 client (3k req/s * 10sec) seduti in attesa in coda e per ognuno di questi client deve essere completata la stessa richiesta di back-end una tantum per servirli. Questo rovinerà il tempo di risposta del tuo sito.
So Varnish salva la decisione che questa richiesta non può essere memorizzata nella cache creando un oggetto hit_for_pass.
Alla richiesta successiva per lo stesso URL, la ricerca cache restituirà un oggetto hit_for_pass. Ciò indica che è possibile eseguire più recuperi contemporaneamente. Il tuo back-end potrebbe non essere troppo felice, ma almeno Varnish non fa la coda ai client senza motivo.
capito. Grazie @ikarsten –
spiegazione molto chiara. Grazie. – Vaheh
ottimo. Molte grazie! – tven