On 07/27/2006 11:31 AM, Jean-frederic Clere wrote:
> Ruediger Pluem wrote:
> 
>> On 07/26/2006 10:53 PM, Jean-frederic Clere wrote:
>>
>>
>>  
>>
>>> I already have a prototype of an external health checker process that
>>> uses an AJP cping/cpong and a simple connect for http/https.
>>> Basicaly mod_proxy uses the health_worker_method routine to write and
>>> read from a slot mem that contains the information of the workers + a
>>> health information. A balancer could check the health information before
>>> using the worker. The health checker process uses the worker description
>>> (thru the health_worker_method) to check if the back-end service is
>>> running.
>>>   
>>
>>
>> Sorry, you may have explained that before, but why using an external
>> health
>> checker process?
>>  
>>
> The idea is to have the health check independant from the requests so
> that httpd knows in advance that a worker is not working.

Ah, now I get it. Ok, I guess we both have slightly different ideas about what
to health check. Your idea is more of a server health check and is somewhat
similar to what HW loadbalancers are doing: Check each backend on a regular
schedule if it is still available.

My idea is more of a connection health check. I want to check if the connection
I leased from the pool is still healthy. If it is not that does not mean
necessarily that the server in the backend failed.
It could be just this connection. So the default response on a faulty connection
would be to close this one and try with a new one. Only if this fails also then
there seems to be something wrong with the backend server. This is more like 
what
most DB connection pools offer with a health-check query.

I think both ideas make sense. Of course the connection health checks should be
simpler than the server health check to avoid too much overhead and too much
lost time.
That is the reason why I think that e.g. doing a HTTP request on a HTTP 
connection
leased from the pool is unreasonable. We need some quick network layer check in 
this
case, whereas in the AJP case CPING/CPONG has still an acceptable overhead.

Finally I think if we have a good provider interface we can use the health 
check providers
for both kind of health checks. We only need to create the frameworks for them
to start in different parts of the code (separate process in your case, in my 
case
I would guess that it needs to replace is_socket_connected which is called from
ap_proxy_connect_backend)

Regards

RĂ¼diger

Reply via email to