【问题标题】:Increase varnish grace time while backend is sick在后端生病时增加清漆宽限期
【发布时间】:2016-07-28 14:50:45
【问题描述】:

我们使用 Varnish Cache 作为我们许多客户的前端,并且当任何后端出现问题时,我们会优雅地提供陈旧的内容。

我们现在确实有一个失败的后端,我们想要增加宽限期(当它生病时),这是一种可能的情况吗?我尝试在文档中挖掘,但一无所获。

清漆 4

【问题讨论】:

    标签: varnish varnish-vcl varnish-4


    【解决方案1】:

    当生病的后端是常用缓存时,在 Varnish Cache 4.x 中提供过时的内容。你只需要实现你自己的vcl_hitsubroutine。这个想法是使用高宽限值(例如 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 并将 Grace 设置为 5h,后端生病了。我想将这 5 小时增加到 10 小时左右,而它仍然生病,这是一种可能的情况吗?
    • 据我所知,如果您使用 X 小时的宽限值将内容存储在 Varnish Cache 中,则该内容将在插入存储 X 小时后从存储中删除,并且有您在 VCL 中无能为力来避免这种情况(您有 beresp.keep,但我认为这里没有用)。因此,唯一的解决方案是使用高于最长预期后端中断的宽限值来存储对象。
    猜你喜欢
    • 2012-09-11
    • 2017-09-12
    • 2015-08-26
    • 2016-01-03
    • 2016-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多