52

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

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

但我无法理解“hit-for-pass”的用法。清漆什么时候用?我没有在网上找到任何有用的材料让我清楚。

4

1 回答 1

166

制作一个 hit_for_pass 对象以针对后端服务器优化获取过程。

对于普通的缓存未命中,Varnish 会将所有请求相同缓存对象的客户端排队,并向后端发送单个请求。这通常是最快的,让后端处理单个请求,而不是同时处理 n 个请求。

请记住,一些后端会花费大量时间来准备对象;10 秒并不少见。如果这是首页 HTML,并且您有 3000 个请求/秒,那么只发送一个后端请求就很有意义。

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

所以 Varnish 通过创建一个 hit_for_pass 对象来保存这个请求不能被缓存的决定。

在对同一 URL 的下一次请求中,缓存查找将返回一个 hit_for_pass 对象。这表明可以同时进行多个提取。您的后端可能对此不太满意,但至少 Varnish 不会无缘无故地让客户端排队。

于 2012-10-03T07:32:14.153 回答