Re: ping for http in mod_proxy

2008-02-15 Thread Justin Erenkrantz
On Fri, Feb 15, 2008 at 8:26 AM, Jim Jagielski <[EMAIL PROTECTED]> wrote:
>  Not quite... there's nothing in providers, per se, that limit
>  how they are *used* to be oneshot... Just ask Brad and aaa :)

+1.

I personally find the vtable interface easier to deal with - you have
a 'set' of functions that all go together in one structure - whereas
for a hook, everything must be individual and one-off.  *shrug*  --
justin


Re: ping for http in mod_proxy

2008-02-15 Thread Akins, Brian
On 2/15/08 11:03 AM, "Plüm, Rüdiger, VF-Group" <[EMAIL PROTECTED]>
wrote:

> My main point is that I want to avoid
> using both hook and provider if not really needed, as it

Agreed. Was just stating my preference.  As long as it's "easy" to use, I
have no strong feelings either way.

-- 
Brian Akins
Chief Operations Engineer
Turner Digital Media Technologies



Re: ping for http in mod_proxy

2008-02-15 Thread Jim Jagielski


On Feb 15, 2008, at 10:43 AM, Akins, Brian wrote:

On 2/15/08 8:13 AM, "Plüm, Rüdiger, VF-Group" <[EMAIL PROTECTED] 
>

wrote:


Any specific reason why we need to add an hook here and why this  
cannot be
done by the existing provider (interface). I am scared of adding  
another
level of indirection here if it is not really needed and things can  
be already

done with the existing infrastructure.



I like hooks bcs providers are "one-shot."  I use both, but find my  
self

using hooks more and more.

A good example is the discussion around having stacked providers in
mod_cache.  If it were a hook, you'd already have that...

Providers are good when you will have one, and only one, "thing"  
that needs
to munge/manipulate/compute like database stuff.  With the proxy  
stuff, it
looks like we want "n" things to be able to manipulate the data.   
Once you

make the leap from 1 to 2, might as well make it a hook.


Not quite... there's nothing in providers, per se, that limit
how they are *used* to be oneshot... Just ask Brad and aaa :)



Re: ping for http in mod_proxy

2008-02-15 Thread Plüm , Rüdiger , VF-Group
 

> -Ursprüngliche Nachricht-
> Von: Akins, Brian 
> Gesendet: Freitag, 15. Februar 2008 16:44
> An: dev@httpd.apache.org
> Betreff: Re: ping for http in mod_proxy
> 
> On 2/15/08 8:13 AM, "Plüm, Rüdiger, VF-Group" 
> <[EMAIL PROTECTED]>
> wrote:
> 
>  
> > Any specific reason why we need to add an hook here and why 
> this cannot be
> > done by the existing provider (interface). I am scared of 
> adding another
> > level of indirection here if it is not really needed and 
> things can be already
> > done with the existing infrastructure.
> 
> 
> I like hooks bcs providers are "one-shot."  I use both, but 
> find my self
> using hooks more and more.
> 
> A good example is the discussion around having stacked providers in
> mod_cache.  If it were a hook, you'd already have that...
> 
> Providers are good when you will have one, and only one, 
> "thing" that needs
> to munge/manipulate/compute like database stuff.  With the 
> proxy stuff, it
> looks like we want "n" things to be able to manipulate the 
> data.  Once you
> make the leap from 1 to 2, might as well make it a hook.

But in the Auth framework we also work with providers and may call
more then one provider per request to do authn / authz. So I guess
this will be also doable. My main point is that I want to avoid
using both hook and provider if not really needed, as it

- creates unneeded overhead which lowers performance
- makes it harder to extend things with own modules as things are
  more complex
- make debugging harder

So as far as possible for solving the problem in a flexible manner
I would like to stick to KISS.

Regards

Rüdiger



Re: ping for http in mod_proxy

2008-02-15 Thread Akins, Brian
On 2/15/08 8:13 AM, "Plüm, Rüdiger, VF-Group" <[EMAIL PROTECTED]>
wrote:

 
> Any specific reason why we need to add an hook here and why this cannot be
> done by the existing provider (interface). I am scared of adding another
> level of indirection here if it is not really needed and things can be already
> done with the existing infrastructure.


I like hooks bcs providers are "one-shot."  I use both, but find my self
using hooks more and more.

A good example is the discussion around having stacked providers in
mod_cache.  If it were a hook, you'd already have that...

Providers are good when you will have one, and only one, "thing" that needs
to munge/manipulate/compute like database stuff.  With the proxy stuff, it
looks like we want "n" things to be able to manipulate the data.  Once you
make the leap from 1 to 2, might as well make it a hook.


-- 
Brian Akins
Chief Operations Engineer
Turner Digital Media Technologies



Re: ping for http in mod_proxy

2008-02-15 Thread Jim Jagielski


On Feb 15, 2008, at 8:13 AM, Plüm, Rüdiger, VF-Group wrote:





-Ursprüngliche Nachricht-
Von: Jim Jagielski
Gesendet: Freitag, 15. Februar 2008 14:05
An: dev@httpd.apache.org
Betreff: Re: ping for http in mod_proxy



Well, right now all it does is say "give me the best worker" and
leaves it up to the selected provider on "what that means", so it
queries a provider, not a hook. Of course, we could create an actual
hook which then queries providers, to allow people to extend
the selection even more...


Any specific reason why we need to add an hook here and why this  
cannot be
done by the existing provider (interface). I am scared of adding  
another
level of indirection here if it is not really needed and things can  
be already

done with the existing infrastructure.



No, no reason. In fact, I think the provider interface works
relatively well. I do mention 2 existing hooks which should
be changed (RUN_FIRST to RUN_ALL) which would allow even more
coolness...

I was just thinking that allowing a hook would allow people
to add things without even using providers, which some
people may like. Plus, it seemed an easy accommodation for
people who "wanted" it (I wasn't one).



Re: ping for http in mod_proxy

2008-02-15 Thread Plüm , Rüdiger , VF-Group
 

> -Ursprüngliche Nachricht-
> Von: Jim Jagielski 
> Gesendet: Freitag, 15. Februar 2008 14:05
> An: dev@httpd.apache.org
> Betreff: Re: ping for http in mod_proxy
> 
> 
> On Feb 14, 2008, at 6:41 PM, Graham Leggett wrote:
> 
> > Akins, Brian wrote:
> >
> >> Yeah that was my thought.  I guess you pass around the array of  
> >> servers.
> >> Just remove (or mark as N/A) from the list and/or reorder it.  At  
> >> the end,
> >> core proxy picks whatever is in index 0 (possibly walking 
> the list  
> >> in case
> >> of connection error or something).
> >
> > Essentially that is what proxy does now (or did before the 
> balancer  
> > stuff arrived) - it loops through everything that came back 
> from the  
> > DNS round robin query, trying to connect in turn until it gets  
> > something other than bad gateway.
> >
> > Rather than just the simplistic round robin DNS query, it should  
> > query a hook (in which is embedded as the sensible default, a  
> > simplistic round robin DNS query).
> >
> 
> Well, right now all it does is say "give me the best worker" and
> leaves it up to the selected provider on "what that means", so it
> queries a provider, not a hook. Of course, we could create an actual
> hook which then queries providers, to allow people to extend
> the selection even more...

Any specific reason why we need to add an hook here and why this cannot be
done by the existing provider (interface). I am scared of adding another
level of indirection here if it is not really needed and things can be already
done with the existing infrastructure.

Regards

Rüdiger



Re: ping for http in mod_proxy

2008-02-15 Thread Jim Jagielski


On Feb 14, 2008, at 6:41 PM, Graham Leggett wrote:


Akins, Brian wrote:

Yeah that was my thought.  I guess you pass around the array of  
servers.
Just remove (or mark as N/A) from the list and/or reorder it.  At  
the end,
core proxy picks whatever is in index 0 (possibly walking the list  
in case

of connection error or something).


Essentially that is what proxy does now (or did before the balancer  
stuff arrived) - it loops through everything that came back from the  
DNS round robin query, trying to connect in turn until it gets  
something other than bad gateway.


Rather than just the simplistic round robin DNS query, it should  
query a hook (in which is embedded as the sensible default, a  
simplistic round robin DNS query).




Well, right now all it does is say "give me the best worker" and
leaves it up to the selected provider on "what that means", so it
queries a provider, not a hook. Of course, we could create an actual
hook which then queries providers, to allow people to extend
the selection even more...



Re: ping for http in mod_proxy

2008-02-14 Thread Graham Leggett

Akins, Brian wrote:


Yeah that was my thought.  I guess you pass around the array of servers.
Just remove (or mark as N/A) from the list and/or reorder it.  At the end,
core proxy picks whatever is in index 0 (possibly walking the list in case
of connection error or something).


Essentially that is what proxy does now (or did before the balancer 
stuff arrived) - it loops through everything that came back from the DNS 
round robin query, trying to connect in turn until it gets something 
other than bad gateway.


Rather than just the simplistic round robin DNS query, it should query a 
hook (in which is embedded as the sensible default, a simplistic round 
robin DNS query).


Regards,
Graham
--


smime.p7s
Description: S/MIME Cryptographic Signature


Re: ping for http in mod_proxy

2008-02-14 Thread Akins, Brian
On 2/14/08 9:54 AM, "Graham Leggett" <[EMAIL PROTECTED]> wrote:

> In theory, you should be able to stack the providers, so that a balancer
> module could return the list of servers to try in the right order, and
> then another module could further reduce that list down to servers that
> are actually up.

Yeah that was my thought.  I guess you pass around the array of servers.
Just remove (or mark as N/A) from the list and/or reorder it.  At the end,
core proxy picks whatever is in index 0 (possibly walking the list in case
of connection error or something).


-- 
Brian Akins
Chief Operations Engineer
Turner Digital Media Technologies



Re: ping for http in mod_proxy

2008-02-14 Thread Graham Leggett

Akins, Brian wrote:


Someone could write a spread based module for origin status (or mysql, or
memcache, or...) if the interface was well defined and "clean."  The way
balancer is so hooked into proxy makes it hard to write a replacement
without hacking "core" proxy.  In proxy it could be as simple a call as:

apr_status_t ap_get_origin_server(request_rec *r, proxy_origin_t **o)

And that figures out all the balancer and sticky stuff.


That was the idea.

In theory, you should be able to stack the providers, so that a balancer 
module could return the list of servers to try in the right order, and 
then another module could further reduce that list down to servers that 
are actually up.


Smells like a filter actually.

Regards,
Graham
--


smime.p7s
Description: S/MIME Cryptographic Signature


Re: ping for http in mod_proxy

2008-02-14 Thread Jim Jagielski


On Feb 14, 2008, at 6:33 AM, Akins, Brian wrote:


On 2/13/08 12:50 PM, "Jim Jagielski" <[EMAIL PROTECTED]> wrote:

That was the other option as well... some sort of hearbeat
loop which updates worker status. Still, we get into the issue
with how much of "how proxy connects to and communicates with
the backend" to honor or work around.


An external process (using serf maybe) would be easy.  Just have  
some of the
worker stats in shared memory.  The healthchecker writes status to  
it, and

httpd reads from it.



Yep... the process would fork off at Apache start time
and update it's own current health as well as update its
own knowledge of the health of the external backends...
Not convinced that multicasting is right for this due to
the types of architectures web servers usually find
themselves in :)


Re: ping for http in mod_proxy

2008-02-14 Thread Jim Jagielski


On Feb 13, 2008, at 6:01 PM, Graham Leggett wrote:


Jim Jagielski wrote:


Ideally, it would be nice if we had better insight on the
actual health of the backends than a simple "do they respond
to OPTIONS * and how long does it take", but that's pretty
much all we can do unless go full-on multicasting of info
ala mod_backhand... At least the balancer is setup to allow
for load balancing based on that, if the submodule/provider
actually existed :)


Is there anything stopping us going the multicasting route, say by  
adding a hook or hooks of some kind to proxy that keeps track of  
known server states?





A dedicated module could then have it's job as handling the  
multicasting and letting the rest of the server know if a server is  
on or off the air, in realtime.


The proxy can then just say "which of these servers should I connect  
to?", and the hook will return the suggested ones in the given order.




Well, we almost do that now... :)

As a dedicated module, people who don't need it can turn it off or  
not build it.







Re: ping for http in mod_proxy

2008-02-14 Thread Akins, Brian
On 2/14/08 6:44 AM, "Plüm, Rüdiger, VF-Group" <[EMAIL PROTECTED]>
wrote:

> 1. We currently have no mechanism in place that "simulates" these kind of
>failures we experience ourselves with the backend for the client. Returning
>a 500 or 503 does not cause the client to repeat the request. IMHO we would
>need to cut off the network connection without sending anything to trigger
>this behaviour in a well designed client.


Hrm.. Seems like the HTTP client should "just handle" this case.

> 2. Clients are only allowed to resend the request automatically, if the
> request
>was idempotent. Clients are not allowed to do so with non-idempotent
> requests
>like POST's without user intervention. So by probing the keepalive
> connection
>before sending the request we want to reduce these cases.


>From real world experience, I can say that we have rarely every had an issue
with POSTS.  The active health-checking we do is based on how our load
balancers do it.  They (the load balancers) can occasionally send requests
to a down server for a few seconds if it goes down in between healthchecks.
Sound bad in theory, but in reality, it has never been a real issue.


-- 
Brian Akins
Chief Operations Engineer
Turner Digital Media Technologies



Re: ping for http in mod_proxy

2008-02-14 Thread Plüm , Rüdiger , VF-Group
 

> -Ursprüngliche Nachricht-
> Von: Akins, Brian [mailto:[EMAIL PROTECTED] 
> Gesendet: Donnerstag, 14. Februar 2008 12:37
> An: dev@httpd.apache.org
> Betreff: Re: ping for http in mod_proxy
> 
> On 2/13/08 1:09 PM, "Jim Jagielski" <[EMAIL PROTECTED]> wrote:
> 
> > And again, we're basically doubling traffic and adding
> > overheard (more overhead than AJP's cping/cpong) at which
> > point I go back into wondering whether this sort of
> > implementation makes sense at all...
> 
> 
> So is the main issue we are trying to solve is that we have a 
> keepalive
> connection to an origin but it does away (closes) before we 
> make or next
> request and this causes an "error." (Sorry if I'm behind on 
> the thread.)

Basicly yes.

> Shouldn't the HTTP client handle all of this?  I know that 
> libcurl handles
> this situations very well - it just tries to reconnect.  How does serf
> handle it?

There are two problems here:

1. We currently have no mechanism in place that "simulates" these kind of
   failures we experience ourselves with the backend for the client. Returning
   a 500 or 503 does not cause the client to repeat the request. IMHO we would
   need to cut off the network connection without sending anything to trigger
   this behaviour in a well designed client.

2. Clients are only allowed to resend the request automatically, if the request
   was idempotent. Clients are not allowed to do so with non-idempotent requests
   like POST's without user intervention. So by probing the keepalive connection
   before sending the request we want to reduce these cases.

Regards

Rüdiger
  


Re: ping for http in mod_proxy

2008-02-14 Thread Akins, Brian
On 2/13/08 6:01 PM, "Graham Leggett" <[EMAIL PROTECTED]> wrote:

 
> Is there anything stopping us going the multicasting route, say by
> adding a hook or hooks of some kind to proxy that keeps track of known
> server states?

Multicasting doesn't work well for us, for example, because servers are
spread across several different vlan's that explicitly don't allow multicast
between them.

If it were "hookable" or used providers, that would be fine.  I think sticky
sessions should be hookable/provider as well.

Someone could write a spread based module for origin status (or mysql, or
memcache, or...) if the interface was well defined and "clean."  The way
balancer is so hooked into proxy makes it hard to write a replacement
without hacking "core" proxy.  In proxy it could be as simple a call as:

apr_status_t ap_get_origin_server(request_rec *r, proxy_origin_t **o)

And that figures out all the balancer and sticky stuff.

-- 
Brian Akins
Chief Operations Engineer
Turner Digital Media Technologies



Re: ping for http in mod_proxy

2008-02-14 Thread Akins, Brian
On 2/13/08 2:10 PM, "Jim Jagielski" <[EMAIL PROTECTED]> wrote:

> The latter is relatively easy to do with the current
> impl... Maybe I'll drop the ping idea and work on this ;)


+1 ;)

 

-- 
Brian Akins
Chief Operations Engineer
Turner Digital Media Technologies



Re: ping for http in mod_proxy

2008-02-14 Thread Akins, Brian
On 2/13/08 1:09 PM, "Jim Jagielski" <[EMAIL PROTECTED]> wrote:

> And again, we're basically doubling traffic and adding
> overheard (more overhead than AJP's cping/cpong) at which
> point I go back into wondering whether this sort of
> implementation makes sense at all...


So is the main issue we are trying to solve is that we have a keepalive
connection to an origin but it does away (closes) before we make or next
request and this causes an "error." (Sorry if I'm behind on the thread.)
Shouldn't the HTTP client handle all of this?  I know that libcurl handles
this situations very well - it just tries to reconnect.  How does serf
handle it?  

-- 
Brian Akins
Chief Operations Engineer
Turner Digital Media Technologies



Re: ping for http in mod_proxy

2008-02-14 Thread Akins, Brian
On 2/13/08 12:50 PM, "Jim Jagielski" <[EMAIL PROTECTED]> wrote:
> That was the other option as well... some sort of hearbeat
> loop which updates worker status. Still, we get into the issue
> with how much of "how proxy connects to and communicates with
> the backend" to honor or work around.

An external process (using serf maybe) would be easy.  Just have some of the
worker stats in shared memory.  The healthchecker writes status to it, and
httpd reads from it.

-- 
Brian Akins
Chief Operations Engineer
Turner Digital Media Technologies



Re: ping for http in mod_proxy

2008-02-14 Thread Filip Hanik - Dev Lists

Graham Leggett wrote:

Jim Jagielski wrote:


Ideally, it would be nice if we had better insight on the
actual health of the backends than a simple "do they respond
to OPTIONS * and how long does it take", but that's pretty
much all we can do unless go full-on multicasting of info
ala mod_backhand... At least the balancer is setup to allow
for load balancing based on that, if the submodule/provider
actually existed :)


Is there anything stopping us going the multicasting route, say by 
adding a hook or hooks of some kind to proxy that keeps track of known 
server states?


A dedicated module could then have it's job as handling the 
multicasting and letting the rest of the server know if a server is on 
or off the air, in realtime.


The proxy can then just say "which of these servers should I connect 
to?", and the hook will return the suggested ones in the given order.


As a dedicated module, people who don't need it can turn it off or not 
build it.

this is an idea I've been sitting on for a couple of years now.
Tomcat's cluster can also multicast more than just that the node is 
alive, it can broadcast, what applications (URL contexts) are available, 
how many threads are in use, what the server load is etc. It can even 
broadcast automount points, or when applications are being taken 
offline, while the server is still up.


Filip


Re: ping for http in mod_proxy

2008-02-13 Thread Graham Leggett

Jim Jagielski wrote:


Ideally, it would be nice if we had better insight on the
actual health of the backends than a simple "do they respond
to OPTIONS * and how long does it take", but that's pretty
much all we can do unless go full-on multicasting of info
ala mod_backhand... At least the balancer is setup to allow
for load balancing based on that, if the submodule/provider
actually existed :)


Is there anything stopping us going the multicasting route, say by 
adding a hook or hooks of some kind to proxy that keeps track of known 
server states?


A dedicated module could then have it's job as handling the multicasting 
and letting the rest of the server know if a server is on or off the 
air, in realtime.


The proxy can then just say "which of these servers should I connect 
to?", and the hook will return the suggested ones in the given order.


As a dedicated module, people who don't need it can turn it off or not 
build it.


Regards,
Graham
--



smime.p7s
Description: S/MIME Cryptographic Signature


Re: ping for http in mod_proxy

2008-02-13 Thread Jim Jagielski


On Feb 13, 2008, at 1:49 PM, Mads Toftum wrote:


On Wed, Feb 13, 2008 at 12:22:43PM -0500, Akins, Brian wrote:
Would it be more useful to have active healthchecking to backend  
servers?
Ie, periodically hit a url on each origin and mark them up/down  
based on
response.  Only send traffic to up servers.  I think mod_backhand  
does

something similar but much more complex (?).


Yes. Being able to check a URL seems more useful than plain ping.
Even more useful would be recording the time a backend takes to  
answer a

request and using that to distribute requests.



The latter is relatively easy to do with the current
impl... Maybe I'll drop the ping idea and work on this ;)



Re: ping for http in mod_proxy

2008-02-13 Thread Mads Toftum
On Wed, Feb 13, 2008 at 12:22:43PM -0500, Akins, Brian wrote:
> Would it be more useful to have active healthchecking to backend servers?
> Ie, periodically hit a url on each origin and mark them up/down based on
> response.  Only send traffic to up servers.  I think mod_backhand does
> something similar but much more complex (?).
> 
Yes. Being able to check a URL seems more useful than plain ping.
Even more useful would be recording the time a backend takes to answer a
request and using that to distribute requests.

vh

Mads Toftum
-- 
http://soulfood.dk


Re: ping for http in mod_proxy

2008-02-13 Thread Jim Jagielski


On Feb 13, 2008, at 1:09 PM, Plüm, Rüdiger, VF-Group wrote:



Right. Furthermore I guess we could create a generic module that  
needs a
URL configured for a HEAD request that only replies 200 if the  
backend can
still handle more requests. If it does not respond or with a  
different code
this backend would be dead. I guess this module needs to fork a  
separate
process / thread to do this checking periodically and modify the  
worker status

accordingly.
So much interesting work and so few time :-(.


Or send a custom request header that has Apache respond with
a custom response header that contains specific health
info...

Re: ping for http in mod_proxy

2008-02-13 Thread Jim Jagielski


On Feb 13, 2008, at 1:04 PM, Plüm, Rüdiger, VF-Group wrote:



Sorry for my I-want-it-all-at-once approach :-). But this leaves
the problems (most notably PR 37770) open for SSL backend connection
(which would be a pity). So IMHO the socket approach would be only a  
first step.


No, I want it all too... The problem is that you then
start going beyond a simply yes/no implementation to something
more robust and information-filled, but also with more overhead...

Re: ping for http in mod_proxy

2008-02-13 Thread Plüm , Rüdiger , VF-Group
 

> -Ursprüngliche Nachricht-
> Von: Jim Jagielski 
> Gesendet: Mittwoch, 13. Februar 2008 19:00
> An: dev@httpd.apache.org
> Betreff: Re: ping for http in mod_proxy
> 
> 
> On Feb 13, 2008, at 12:41 PM, Plüm, Rüdiger, VF-Group wrote:
> >
> > Agreed, but I doubt that it is possible with a reasonable amout of  
> > health
> > check frequency to find out before the first real request falls  
> > through,
> > provided that your health checks are designed to only fail if the  
> > backend
> > is down. If your health checks are smarter and notice that the  
> > backend will
> > fail soon (e.g. because it reached 98% or 99% percent of its  
> > capacity) then
> > this is a different story and can be very useful.
> > Regarding the reactivation of a failed backend I fully 
> agree: Active  
> > health
> > checks would be an asset here instead of just retrying failed  
> > backends periodically
> > with real requests.
> >
> 
> Ideally, it would be nice if we had better insight on the
> actual health of the backends than a simple "do they respond
> to OPTIONS * and how long does it take", but that's pretty
> much all we can do unless go full-on multicasting of info
> ala mod_backhand... At least the balancer is setup to allow
> for load balancing based on that, if the submodule/provider
> actually existed :)

Right. Furthermore I guess we could create a generic module that needs a
URL configured for a HEAD request that only replies 200 if the backend can
still handle more requests. If it does not respond or with a different code
this backend would be dead. I guess this module needs to fork a separate
process / thread to do this checking periodically and modify the worker status
accordingly.
So much interesting work and so few time :-(.

Regards

Rüdiger



Re: ping for http in mod_proxy

2008-02-13 Thread Jim Jagielski


On Feb 13, 2008, at 12:59 PM, Plüm, Rüdiger, VF-Group wrote:


We will never be able to completely avoid race conditions...
whether keepalives are in place or not.


But at least the one that comes from the keepalive timer expiring on
the backend at the same time I sent the request to it. If the
backend answered to OPTIONS * on a keepalive connection it is
reasonable to assume that the keepalive timeout will not expire
until the real request hit the backend.
Regarding other races I agree, but I think the above one is the
one that is hit most frequently.



Ahh... but that goes back to one of my original questions:
do we honor force-proxy-request-1.0 and/or proxy-nokeepalive
for example or not... I can see reasons for both :)

And again, we're basically doubling traffic and adding
overheard (more overhead than AJP's cping/cpong) at which
point I go back into wondering whether this sort of
implementation makes sense at all...

Re: ping for http in mod_proxy

2008-02-13 Thread Plüm , Rüdiger , VF-Group
 

> -Ursprüngliche Nachricht-
> Von: Jim Jagielski [mailto:[EMAIL PROTECTED] 
> Gesendet: Mittwoch, 13. Februar 2008 18:55
> An: dev@httpd.apache.org
> Betreff: Re: ping for http in mod_proxy
> 
> 
> On Feb 13, 2008, at 12:23 PM, Plüm, Rüdiger, VF-Group wrote:
> 
> >
> >
> >> -Ursprüngliche Nachricht-
> >> Von: Jim Jagielski
> >> Gesendet: Mittwoch, 13. Februar 2008 17:07
> >> An: dev@httpd.apache.org
> >> Betreff: ping for http in mod_proxy
> >>
> >> I've started looking at adding "ping" support for
> >> mod_proxy_http to complement whats in mod_proxy_ajp...
> >> The idea is to send a simple OPTIONS * to the backend
> >> and hope for a reply.
> >>
> >> The rub is that I've been working on 2 separate
> >> implementations: one talks direct to the socket and the
> >> other basically tries to do what ap_proxy_http_request()
> >> and ap_proxy_http_process_response() does, as far
> >> as using brigades, etc... The former is much further
> >> along, btw.
> >
> > We cannot use the socket approach since we need to be able to
> > handle SSL backend connections and this requires the brigades -  
> > filters
> > approach.
> 
> The initial approach was to not honor SSL connections and
> just ignore that... The idea that we really want a fast and
> dirty "Are you there" flag, so to avoid as much overhead
> as possible...

Sorry for my I-want-it-all-at-once approach :-). But this leaves
the problems (most notably PR 37770) open for SSL backend connection
(which would be a pity). So IMHO the socket approach would be only a first step.

Regards

Rüdiger


Re: ping for http in mod_proxy

2008-02-13 Thread Jim Jagielski


On Feb 13, 2008, at 12:41 PM, Plüm, Rüdiger, VF-Group wrote:


Agreed, but I doubt that it is possible with a reasonable amout of  
health
check frequency to find out before the first real request falls  
through,
provided that your health checks are designed to only fail if the  
backend
is down. If your health checks are smarter and notice that the  
backend will
fail soon (e.g. because it reached 98% or 99% percent of its  
capacity) then

this is a different story and can be very useful.
Regarding the reactivation of a failed backend I fully agree: Active  
health
checks would be an asset here instead of just retrying failed  
backends periodically

with real requests.



Ideally, it would be nice if we had better insight on the
actual health of the backends than a simple "do they respond
to OPTIONS * and how long does it take", but that's pretty
much all we can do unless go full-on multicasting of info
ala mod_backhand... At least the balancer is setup to allow
for load balancing based on that, if the submodule/provider
actually existed :)



Re: ping for http in mod_proxy

2008-02-13 Thread Plüm , Rüdiger , VF-Group
 

> -Ursprüngliche Nachricht-
> Von: Jim Jagielski 
> Gesendet: Mittwoch, 13. Februar 2008 18:52
> An: dev@httpd.apache.org
> Betreff: Re: ping for http in mod_proxy
> 
> 
> On Feb 13, 2008, at 12:27 PM, Plüm, Rüdiger, VF-Group wrote:
> 
> >
> >
> >> -Ursprüngliche Nachricht-
> >> Von: Akins, Brian
> >> Gesendet: Mittwoch, 13. Februar 2008 18:23
> >> An: dev@httpd.apache.org
> >> Betreff: Re: ping for http in mod_proxy
> >>
> >> On 2/13/08 11:07 AM, "Jim Jagielski" <[EMAIL PROTECTED]> wrote:
> >>
> >>> I've started looking at adding "ping" support for
> >>> mod_proxy_http to complement whats in mod_proxy_ajp...
> >>> The idea is to send a simple OPTIONS * to the backend
> >>> and hope for a reply.
> >>
> >>
> >> Would it be more useful to have active healthchecking to
> >> backend servers?
> >
> > This does not help with race conditions on HTTP keepalive 
> connections.
> 
> We will never be able to completely avoid race conditions...
> whether keepalives are in place or not.

But at least the one that comes from the keepalive timer expiring on
the backend at the same time I sent the request to it. If the
backend answered to OPTIONS * on a keepalive connection it is
reasonable to assume that the keepalive timeout will not expire
until the real request hit the backend.
Regarding other races I agree, but I think the above one is the
one that is hit most frequently.


Regards

Rüdiger 


Re: ping for http in mod_proxy

2008-02-13 Thread Jim Jagielski


On Feb 13, 2008, at 12:23 PM, Plüm, Rüdiger, VF-Group wrote:





-Ursprüngliche Nachricht-
Von: Jim Jagielski
Gesendet: Mittwoch, 13. Februar 2008 17:07
An: dev@httpd.apache.org
Betreff: ping for http in mod_proxy

I've started looking at adding "ping" support for
mod_proxy_http to complement whats in mod_proxy_ajp...
The idea is to send a simple OPTIONS * to the backend
and hope for a reply.

The rub is that I've been working on 2 separate
implementations: one talks direct to the socket and the
other basically tries to do what ap_proxy_http_request()
and ap_proxy_http_process_response() does, as far
as using brigades, etc... The former is much further
along, btw.


We cannot use the socket approach since we need to be able to
handle SSL backend connections and this requires the brigades -  
filters

approach.


The initial approach was to not honor SSL connections and
just ignore that... The idea that we really want a fast and
dirty "Are you there" flag, so to avoid as much overhead
as possible...


Re: ping for http in mod_proxy

2008-02-13 Thread Jim Jagielski


On Feb 13, 2008, at 12:27 PM, Plüm, Rüdiger, VF-Group wrote:





-Ursprüngliche Nachricht-
Von: Akins, Brian
Gesendet: Mittwoch, 13. Februar 2008 18:23
An: dev@httpd.apache.org
Betreff: Re: ping for http in mod_proxy

On 2/13/08 11:07 AM, "Jim Jagielski" <[EMAIL PROTECTED]> wrote:


I've started looking at adding "ping" support for
mod_proxy_http to complement whats in mod_proxy_ajp...
The idea is to send a simple OPTIONS * to the backend
and hope for a reply.



Would it be more useful to have active healthchecking to
backend servers?


This does not help with race conditions on HTTP keepalive connections.


We will never be able to completely avoid race conditions...
whether keepalives are in place or not.



Re: ping for http in mod_proxy

2008-02-13 Thread Jim Jagielski


On Feb 13, 2008, at 12:22 PM, Akins, Brian wrote:


On 2/13/08 11:07 AM, "Jim Jagielski" <[EMAIL PROTECTED]> wrote:


I've started looking at adding "ping" support for
mod_proxy_http to complement whats in mod_proxy_ajp...
The idea is to send a simple OPTIONS * to the backend
and hope for a reply.



Would it be more useful to have active healthchecking to backend  
servers?
Ie, periodically hit a url on each origin and mark them up/down  
based on

response.  Only send traffic to up servers.  I think mod_backhand does
something similar but much more complex (?).

I had started looking to add this to balancer, but I have no time.



That was the other option as well... some sort of hearbeat
loop which updates worker status. Still, we get into the issue
with how much of "how proxy connects to and communicates with
the backend" to honor or work around.



Re: ping for http in mod_proxy

2008-02-13 Thread Akins, Brian
On 2/13/08 12:41 PM, "Plüm, Rüdiger, VF-Group" <[EMAIL PROTECTED]>
wrote:
> If your health checks are smarter and notice that the backend will
> fail soon (e.g. because it reached 98% or 99% percent of its capacity) then
> this is a different story and can be very useful.

Correct.  Perhaps a weighted round-robin that is based on response time
would be fairly easy to code... (Says the guy with no time.)

-- 
Brian Akins
Chief Operations Engineer
Turner Digital Media Technologies



Re: ping for http in mod_proxy

2008-02-13 Thread Plüm , Rüdiger , VF-Group
 

> -Ursprüngliche Nachricht-
> Von: Akins, Brian 
> Gesendet: Mittwoch, 13. Februar 2008 18:34
> An: dev@httpd.apache.org
> Betreff: Re: ping for http in mod_proxy
> 
> On 2/13/08 12:27 PM, "Plüm, Rüdiger, VF-Group" 
> <[EMAIL PROTECTED]>
> wrote:
> 
> > This does not help with race conditions on HTTP keepalive 
> connections.
> > Nevertheless active healthchecking could be useful. But on 
> a busy site
> > I guess a real request will notice before the healthcheck 
> that one backend
> > is down or the frequence of health checks needs to be insane.
> 
> 
> On a busy site you want to know if a server is down before 
> you send a few
> thousand requests to it and want to know that it's up as soon as it's
> available so you can send a few thousand requests to it.

Agreed, but I doubt that it is possible with a reasonable amout of health
check frequency to find out before the first real request falls through,
provided that your health checks are designed to only fail if the backend
is down. If your health checks are smarter and notice that the backend will
fail soon (e.g. because it reached 98% or 99% percent of its capacity) then
this is a different story and can be very useful.
Regarding the reactivation of a failed backend I fully agree: Active health
checks would be an asset here instead of just retrying failed backends 
periodically
with real requests.

Regards

Rüdiger



Re: ping for http in mod_proxy

2008-02-13 Thread Akins, Brian
On 2/13/08 12:27 PM, "Plüm, Rüdiger, VF-Group" <[EMAIL PROTECTED]>
wrote:

> This does not help with race conditions on HTTP keepalive connections.
> Nevertheless active healthchecking could be useful. But on a busy site
> I guess a real request will notice before the healthcheck that one backend
> is down or the frequence of health checks needs to be insane.


On a busy site you want to know if a server is down before you send a few
thousand requests to it and want to know that it's up as soon as it's
available so you can send a few thousand requests to it.



-- 
Brian Akins
Chief Operations Engineer
Turner Digital Media Technologies



Re: ping for http in mod_proxy

2008-02-13 Thread Plüm , Rüdiger , VF-Group
 

> -Ursprüngliche Nachricht-
> Von: Akins, Brian 
> Gesendet: Mittwoch, 13. Februar 2008 18:23
> An: dev@httpd.apache.org
> Betreff: Re: ping for http in mod_proxy
> 
> On 2/13/08 11:07 AM, "Jim Jagielski" <[EMAIL PROTECTED]> wrote:
> 
> > I've started looking at adding "ping" support for
> > mod_proxy_http to complement whats in mod_proxy_ajp...
> > The idea is to send a simple OPTIONS * to the backend
> > and hope for a reply.
> 
> 
> Would it be more useful to have active healthchecking to 
> backend servers?

This does not help with race conditions on HTTP keepalive connections.
Nevertheless active healthchecking could be useful. But on a busy site
I guess a real request will notice before the healthcheck that one backend
is down or the frequence of health checks needs to be insane.

Regards

Rüdiger



re: ping for http in mod_proxy

2008-02-13 Thread Plüm , Rüdiger , VF-Group
 

> -Ursprüngliche Nachricht-
> Von: Jim Jagielski  
> Gesendet: Mittwoch, 13. Februar 2008 17:07
> An: dev@httpd.apache.org
> Betreff: ping for http in mod_proxy
> 
> I've started looking at adding "ping" support for
> mod_proxy_http to complement whats in mod_proxy_ajp...
> The idea is to send a simple OPTIONS * to the backend
> and hope for a reply.
> 
> The rub is that I've been working on 2 separate
> implementations: one talks direct to the socket and the
> other basically tries to do what ap_proxy_http_request()
> and ap_proxy_http_process_response() does, as far
> as using brigades, etc... The former is much further
> along, btw.

We cannot use the socket approach since we need to be able to
handle SSL backend connections and this requires the brigades - filters
approach.

> 
> In any case, both implementations can have what I can
> envision as some "weird effects" as far as how they
> should actually work in the real world. For example,
> should it honor force-proxy-request-1.0 and/or
> proxy-nokeepalive, and, if so, how does that affect

I think the ping is of limited use for HTTP/1.0 / non keepalive requests.
I see it mainly as a measure to avoid race conditions with keepalive
connections that get closed just in the moment as the request is being sent.
The only benefit I would see for HTTP/1.0 / non keepalive requests would be
that a successful connect call (we always create a new connections in this case)
does not guarantee us that you get *any* response (in a timely manner). This 
could
be because the connect is queued up on the backend in the connection backlog
or in an application specific request queue and will be never processed.

> the subsequent "real" request... In other words,
> it's not as clean as AJP which has a "real" ping.
> And all this is wondering whether or not it's
> really useful in the 1st place...
> 
> So before I go any further, any comments or ideas
> on whether is is even a Good Idea or not... I'm starting
> to have 2nd thoughts :)
> 

It is a good idea for certain purposes and I really appreciate that you
work on this. This issue is still on my when-I-got-time-TODO list.
If not done until then, maybe something for the hackathon to work on.


Regards

Rüdiger


Re: ping for http in mod_proxy

2008-02-13 Thread Akins, Brian
On 2/13/08 11:07 AM, "Jim Jagielski" <[EMAIL PROTECTED]> wrote:

> I've started looking at adding "ping" support for
> mod_proxy_http to complement whats in mod_proxy_ajp...
> The idea is to send a simple OPTIONS * to the backend
> and hope for a reply.


Would it be more useful to have active healthchecking to backend servers?
Ie, periodically hit a url on each origin and mark them up/down based on
response.  Only send traffic to up servers.  I think mod_backhand does
something similar but much more complex (?).

I had started looking to add this to balancer, but I have no time.

-- 
Brian Akins
Chief Operations Engineer
Turner Digital Media Technologies



ping for http in mod_proxy

2008-02-13 Thread Jim Jagielski

I've started looking at adding "ping" support for
mod_proxy_http to complement whats in mod_proxy_ajp...
The idea is to send a simple OPTIONS * to the backend
and hope for a reply.

The rub is that I've been working on 2 separate
implementations: one talks direct to the socket and the
other basically tries to do what ap_proxy_http_request()
and ap_proxy_http_process_response() does, as far
as using brigades, etc... The former is much further
along, btw.

In any case, both implementations can have what I can
envision as some "weird effects" as far as how they
should actually work in the real world. For example,
should it honor force-proxy-request-1.0 and/or
proxy-nokeepalive, and, if so, how does that affect
the subsequent "real" request... In other words,
it's not as clean as AJP which has a "real" ping.
And all this is wondering whether or not it's
really useful in the 1st place...

So before I go any further, any comments or ideas
on whether is is even a Good Idea or not... I'm starting
to have 2nd thoughts :)