1
我们使用Varnish Cache作为前端服务给很多客户,而我们通过宽限期服务器陈旧内容,而任何后端生病。增加后端生病时的清漆宽限时间
我们现在有一个失败的后端,我们想增加宽限期(虽然它生病了),这是一种可能的情况吗?我试着在文档中挖掘并没有发现任何东西。
光油4
我们使用Varnish Cache作为前端服务给很多客户,而我们通过宽限期服务器陈旧内容,而任何后端生病。增加后端生病时的清漆宽限时间
我们现在有一个失败的后端,我们想增加宽限期(虽然它生病了),这是一种可能的情况吗?我试着在文档中挖掘并没有发现任何东西。
光油4
清漆缓存4.x的服务内容陈旧时生病后端是一个普遍使用的缓存。你只需要实现你自己的vcl_hit
子程序。这个想法是使用高宽限期值(如24小时)缓存的内容,但限制的宽限期,以一个小的时间窗口(例如10秒)时,你的后台是健康的:
sub vcl_hit {
if (obj.ttl >= 0s) {
# Normal hit.
return (deliver);
}
# We have no fresh fish. Lets look at the stale ones.
if (std.healthy(req.backend_hint)) {
# Backend is healthy. Limit age to 10s.
if (obj.ttl + 10s > 0s) {
return (deliver);
} else {
# No candidate for grace. Fetch a fresh object.
return(fetch);
}
} else {
# Backend is sick. Use full grace.
if (obj.ttl + obj.grace > 0s) {
return (deliver);
} else {
# No graced object.
return (fetch);
}
}
}
欲了解更多信息,请查询:
谢谢,但我仍然没有得到它。情景是,我有你所说的vcl_hit,并设置宽限为5h,后端生病了。我想增加这些5小时,让我们说10小时左右,但它仍然生病,这是一种可能的情况? –
据我所知,如果您使用宽限值为X小时的内容将内容存储在Varnish Cache中,则该内容将在存储插入X小时后从存储中删除,并且在VCL中无法执行任何操作避免(你有''beresp.keep'',但我认为这里没有用)。因此,唯一的解决方案是使用高于最长期望后端中断的宽限值来存储objets。 –
明白了,谢谢,我非常感谢你的帮助:) –