在后端生病时增加清漆宽限时间

时间:2016-07-26 09:03:35

标签: varnish varnish-vcl varnish-4

我们使用Varnish Cache作为我们许多客户的前端,并且我们在任何后端生病时通过优雅服务陈旧内容。

我们现在有一个失败的后端,我们想要增加宽限期(虽然它生病了),这是一种可能的情况吗?我试着挖掘文档而一无所获。

清漆4

1 个答案:

答案 0 :(得分:1)

当病毒中的后端是常用缓存时,在Varnish Cache 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);
        }
    }
}

有关详细信息,请查看: