varnish - Varnish 在 MISS 上的行为

标签 varnish

考虑这个场景:
Varnish 缓存有一个 MISS,后端服务器现在正在重新生成请求的内容。在生成期间,第二个请求进入并得到一个 MISS。当另一个请求未决时,varnish 是否将此请求发送到后端?如果这一次之间出现了数千个请求怎么办。服务器会崩溃吧?每一个请求都会让它变慢。

这是正确的还是 Varnish “同步”这些场景以防止出现此类问题?

先感谢您!

最佳答案

Varnish 将所有请求发送到后端。 IE。它不会对其他请求进行排队,只发出一个后端请求,并将其响应用于所有请求。

然而 Varnish 有一个 grace option这让您可以在缓存中为这些类型的情况保留旧的、过期的内容。

例如,考虑以下 VCL:

sub vcl_recv {
  if (req.backend.healthy) {
    set req.grace = 5m;
  } else {
    set req.grace = 24h;
  }
}

sub vcl_fetch {
   set beresp.grace = 24h;
}

现在,如果后端是健康的(参见 backend polling )并且请求结果是 MISS ,第一个请求被发送到后端。如果另一个请求针对相同的内容,但缓存中有一个年龄 MISS,就会发生这种情况。从后端获取响应(并且缓存再次刷新)或项目的年龄变得大于 TTL+req.grace。

如果后端关闭(req.backend.healthy == FALSE),只要 age
您可能还想查看 Saving a request Varnish book的部分更全面的例子和练习。

固定:未转义 < 字符。

修复更多:还有另一个未转义的 < 字符...

关于varnish - Varnish 在 MISS 上的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14580491/

相关文章:

centos - 坚持配置 Varnish

regex - 剥离选择查询字符串属性/值对,以便 Varnish 不会因它们而改变缓存

apache - 使 Plone 站点暂时静态以应对高流量高峰

Nginx代理-proxy_set_header-来自site.conf的自定义 header (用于Varnish缓存)

HTTP 验证所有 Varnish 请求

regex - 匹配Cookie字符串中的所有内容,但特定键后的值除外

reverse-proxy - Varnish :性能影响大禁止列表

varnish - VCL中的 "~"符号是什么意思?

caching - Varnish 清除配置导致启动错误

caching - LB服务器下的varnish