[squid-users] inconsistent caches using a sibling cache hierarchy

From: Domingos Parra Novo <domingosnovo@dont-contact.us>
Date: Mon, 29 May 2006 22:20:30 -0300

Hiyas,

I'm using a pool of (4) squid servers as a web accelerator for a slow backend (vignette, to be more exact). Right now, almost everything works like a charm, besides one thing.

I'm using a sibling hierarchy betwen those machines, and the cache mechanism works like that:

1 - the request arrives on any squid server;
2 - the server tries to find the object on its own cache (delivers to the client if found, goes to the next step if not);
3 - the server uses ICP to contact its siblings, and check if any of them got the content (retrieves from the sibling and delivers to the client if found, goes to the next step if not);
4 - if all the above fails, the request is directed to the (slow) backend server.

But, this backend server contain a "expire/purge" feature. I've written a gateway (using the "purge" tool, and converting it to a simple CGI). So, anytime my webmasters change an object on our CMS (which is also the backend server), an automatic "purge" is generated on all our squid servers.This request works as expected, but, usually takes some seconds (around 10 to 15 seconds) to complete.

If, for any reason (high load, for example), a purge request (for object "foo") reaches servers 1, 2 and 3 (but haven't got the time to purge the object on server 4), and a new request for the object "foo" arrives on server 1 (which already expired this object), the request is redirected from server 1 to server 4 (which contains an old version of the object). In a few words, I sometimes get a invalid cache, with old objects on my squid servers.

I tried to circunvent this situation using the keyword "refresh_stale_hit", but it didn't help anything (I configured it to 30 seconds, but it seems that squid does not consider a purged object "stale").

I would like to know if anyone got any solution for my problem (forcing an specific object to be retrieved from the origin, and not from the cache, if just expired).

I know I can use other kinds of hierarchies, but I was not able to find one which would guarantee some kind of high availability (with no SPOFs), and a small number of requests on my backend.

By the way, would htcp help me on this task? I know its "smarter" then ICP, but I haven't seen much documentation about any of them, to tell you the truth.

Thanks in advance,

Domingos.

-- 
Domingos Parra Novo
Terra Networks Brasil
domingosnovo@terra.com.br
Received on Mon May 29 2006 - 19:22:41 MDT

This archive was generated by hypermail pre-2.1.9 : Thu Jun 01 2006 - 12:00:02 MDT