Varnish hit-for-pass意味着什么?

时间:2012-10-02 13:45:12

标签: varnish varnish-vcl

由于Varnish Version 3有一些用于不同操作的对象。

例如,当必须从后端检索数据时使用pass。并且当它在缓存中发现请求内容时使用命中。

但是我无法理解命中传球的用法。当清漆使用它?我没有在网上找到任何有用的材料让我清楚。

1 个答案:

答案 0 :(得分:160)

使用hit_for_pass对象来优化针对后端服务器的获取过程。

对于普通的高速缓存未命中,Varnish将对请求相同高速缓存对象的所有客户端进行排队,并向后端发送单个请求。这通常是最快的,让后端可以处理单个请求,而不是同时使用n个请求淹没它。

请记住,有些后端会花很多时间准备一个对象; 10秒并不罕见。如果这是首页HTML并且你有3000 req / s反对它,发送一个后端请求很有意义。

问题出现在Varnish获取对象后,它看到它无法缓存。造成这种情况的原因可能是后端发送“Cache-Control:max-age = 0”,或者(更常见的)是Set-Cookie标头。在这种情况下,您有大约3,000到30,000个客户端(3k req / s * 10秒)在队列中闲置,并且对于每个客户端,必须完成相同的慢速一次性后端请求才能为它们提供服务。这将破坏您的网站响应时间。

因此,Varnish通过创建hit_for_pass对象来保存无法缓存此请求的决定。

在对同一URL的下一个请求中,缓存查找将返回hit_for_pass对象。这表示可以同时完成多次提取。你的后端可能不会对此感到高兴,但至少Varnish不会毫无理由地将客户排队等候。