In "our" proxy, we launch an external helper app the does active health
checking of the origin servers.  This is a HEAD request on a configurable
(per origin "pool") uri (ie, http://host:port/url/blah).  When an origin
passes/fails a given number of checks it is marked up/down.  For example,
when an origin passes 2 health checks in a row, it is marked up; when it
fails 3 in a row, it is marked down.  We check each backend every x seconds
(x usually equal to 5).

The proxy module and the health checker are linked via a simple array in
shared memory.  The health checker marks the index of each origin as 1 (up)
or 0 (down).  

I have been contemplating writing a balancer module that implements this,
but haven't had the time.

With this method, we don't have to check every time, as we assume if the
origin is up in the health checker that it is up.

This works several million times a day for us :)

(Also, we do "true" connection pooling to the origins, but that's another
story...)


-- 
Brian Akins
Chief Operations Engineer
Turner Digital Media Technologies

Reply via email to