On Mon, 07 Nov 2016 00:20:12 -0500, JackDrogon <[email protected]> wrote:

Hi, All:
I need varnish to return data directly and update cache at every time when the backend is ok. I also need varnish to return the last normal beresq data from >the cache when the backend is down. How shuold I do with varnish?

Thanks.

Hi Jack,

There are a couple of ways to approach this (as there almost always are with a tool as flexible as Varnish). If traffic is generally light, you could get away with something like this:

in vcl_backend_response, set

beresp.ttl = 1ms;
beresp.keep = 0s;
beresp.grace = 1h; # or as long as you would want to serve from cache during an outage

The very short TTL should translate into no hits as long as you don't get a lot of requests within a 1ms window. But this might not be exactly the behavior you want.

If you have a heavily loaded scenario where you would get multiple hits in this period, then you could simply put some logic into vcl_hit that looks at the backend health, and forces a cache miss if the backend is healthy, and otherwise honors the TTL/grace periods. In this scenario it wouldn't matter as much what the TTL value is, but beresp.keep should stay set to 0s.

in vcl_recv,

if ( std.healthy(req.backend_hint) ) {
   set req.http.allow-caching = "no";
} else {
   set req.http.allow-caching = "yes";
}

in vcl_hit

 if ( req.http.allow-caching == "no" ) {
    return (fetch);
 }
//... otherwise, carry on with the rest of the normal vcl_hit comparisons of ttl, grace, and keep...

Of course these examples don't take into account the behavior of what to do with set-cookie and other headers on the response, but for simplicity I'm assuming here that it's ok to cache the responses as-is. You could always strip headers out during vcl_deliver on the basis of the req.http.allow-caching header, or more generically on the obj.hits counter, if necessary.

Best,
Mark
_______________________________________________
varnish-misc mailing list
[email protected]
https://www.varnish-cache.org/lists/mailman/listinfo/varnish-misc

Reply via email to