后端生病时增加清漆宽限时间
Increase varnish grace time while backend is sick
我们使用 Varnish Cache 作为我们许多客户的前端,并且当任何后端出现问题时,我们都会优雅地处理过时的内容。
我们现在确实有一个失败的后端,我们想增加宽限期(当它生病时),这是可能的情况吗?我尝试在文档中进行挖掘,但一无所获。
清漆 4
在 Varnish 缓存中提供过时的内容 4.x 当后端出现故障时是常用缓存。您只需要实现自己的 vcl_hit
子例程。这个想法是使用高宽限值(例如 24 小时)来缓存内容,但是当您的后端健康时,将宽限期限制在很短的时间 window(例如 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);
}
}
}
更多信息请查看:
- Deliver stale content after error fetch in Varnish 4 before "probe" marks the server unhealth.
- https://info.varnish-software.com/blog/grace-varnish-4-stale-while-revalidate-semantics-varnish.
我们使用 Varnish Cache 作为我们许多客户的前端,并且当任何后端出现问题时,我们都会优雅地处理过时的内容。
我们现在确实有一个失败的后端,我们想增加宽限期(当它生病时),这是可能的情况吗?我尝试在文档中进行挖掘,但一无所获。
清漆 4
在 Varnish 缓存中提供过时的内容 4.x 当后端出现故障时是常用缓存。您只需要实现自己的 vcl_hit
子例程。这个想法是使用高宽限值(例如 24 小时)来缓存内容,但是当您的后端健康时,将宽限期限制在很短的时间 window(例如 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);
}
}
}
更多信息请查看:
- Deliver stale content after error fetch in Varnish 4 before "probe" marks the server unhealth.
- https://info.varnish-software.com/blog/grace-varnish-4-stale-while-revalidate-semantics-varnish.