You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@geronimo.apache.org by Jules Gosnell <ju...@coredevelopers.net> on 2003/09/11 15:34:20 UTC

clustering... web/ejb/jms etc.. - a common impl

James,

I've done some thinking about the chat we had about integrating web, ejb 
and jms clustering strategies. Here is a gross simplification of some of 
the stuff we covered. Hopefully you can fit JMS into the picture....

let's assume that the lb/replication strategies are combined and have 
two values: dumb and sticky.

'dumb' means the next request (web or ejb) can fall anywhere
'sticky' means it will fall wherever the last request in the same 
conversation fell

'dumb' involves synchronous replication to avoid a client request racing 
and beating a replication request to a node (although you could use 
asynchronous and cross your fingers if your LAN was fast).

'sticky' allows the luxury of asynchronous replication at a slight risk 
(in the case of failure), since we know subsequent requests will al fall 
on the same node.

'dumb' is not an environment that EJBs generally have to survive in, 
since their container is usually in charge of the client side proxy lb 
strategy. Web components, however, do need to be able to live happily in 
a dumb environment.

The fun occurs when a call needs to cross over between the two tiers:

(a) web-dumb/ejb-dumb : cross-over is local, but ejb tier must use 
synchronous replication like web-tier
(b) web-dumb/ejb-sticky: cross-over is probably remote, but ejb tier may 
use asynchronous replication
(c) web-sticky/ejb-dumb: cross-over is local -  ejb-tier gains nothing 
by synchronous replication - inefficient -it might as well be sticky
(d) web-sticky/ejb-sticky: cross-over is local - both tiers are able to 
replicate asynchrously - maximum efficiency

(a) and (b) are where the current Jetty distributable httpsession impl 
is with JB*ss, since integration between web and ejb tiers is still not 
perfect.

(d) is where I want to see Geronimo go.

This of course means that in a partitioned/subclustered cluster the web 
and ejb deployments must be arranged, load-balanced and replicated 
identically so that their resources can pair up properly.

given that we have to support (IMHO) both dumb and sticky web 
environments, and the underlying replication layer will hopefully be 
reused underneath all tiers, I think it makes sense to support ejb-dumb, 
for cases where in a web-dumb environment many reads are made between 
the web tier and ejb tier for each web request. This would ensure that 
all reads are local, whilst causing no additional ejb replications.... 
etc...

There are many other issues that will impact on this, such as the 
different ways stickiness is implemented in different lbs and 
replication is implemented under different tiers, but I'm hoping that 
the overall classifications and optimisations deriving therefrom will 
survive....

So, over to you, how does JMS fit into this picture ? Are the same 
abstractions meaningful in the JMS world ? If I put a topic or queue 
into my httpsession and then wake up on a different node, will I always 
end up talking through them to a remote resource, or might these 
components be replicated locally?

and then there is JNDI :-) any JNDI experts out there ?


Jules


-- 
/**********************************
 * Jules Gosnell
 * Partner
 * Core Developers Network (Europe)
 **********************************/



Re: clustering... web/ejb/jms etc.. - a common impl

Posted by Jules Gosnell <ju...@coredevelopers.net>.
Jules Gosnell wrote:

>
> James,
>
> I've done some thinking about the chat we had about integrating web, 
> ejb and jms clustering strategies. Here is a gross simplification of 
> some of the stuff we covered. Hopefully you can fit JMS into the 
> picture....
>
> let's assume that the lb/replication strategies are combined and have 
> two values: dumb and sticky.
>
> 'dumb' means the next request (web or ejb) can fall anywhere
> 'sticky' means it will fall wherever the last request in the same 
> conversation fell
>
> 'dumb' involves synchronous replication to avoid a client request 
> racing and beating a replication request to a node (although you could 
> use asynchronous and cross your fingers if your LAN was fast).
>
> 'sticky' allows the luxury of asynchronous replication at a slight 
> risk (in the case of failure), since we know subsequent requests will 
> al fall on the same node.
>
> 'dumb' is not an environment that EJBs generally have to survive in, 
> since their container is usually in charge of the client side proxy lb 
> strategy. Web components, however, do need to be able to live happily 
> in a dumb environment.
>
> The fun occurs when a call needs to cross over between the two tiers:
>
> (a) web-dumb/ejb-dumb : cross-over is local, but ejb tier must use 
> synchronous replication like web-tier
> (b) web-dumb/ejb-sticky: cross-over is probably remote, but ejb tier 
> may use asynchronous replication
> (c) web-sticky/ejb-dumb: cross-over is local -  ejb-tier gains nothing 
> by synchronous replication - inefficient -it might as well be sticky
> (d) web-sticky/ejb-sticky: cross-over is local - both tiers are able 
> to replicate asynchrously - maximum efficiency
>
> (a) and (b) are where the current Jetty distributable httpsession impl 
> is with JB*ss, since integration between web and ejb tiers is still 
> not perfect.

oops - what I meant was (b) and (d) - although (d) only works with 
mod_jk provided that the initial node remains up, if you take it down, 
mod_jk reverts to a 'dumb' strategy (or at least one where the next 
request is not garanteed to land where the last one in the same 
conversation did), so you are back to (b). What I want in Geronimo, is a 
solution where we can run continually at (d), whilst popping nodes up 
and down with no ill effect...

>
> (d) is where I want to see Geronimo go.
>
> This of course means that in a partitioned/subclustered cluster the 
> web and ejb deployments must be arranged, load-balanced and replicated 
> identically so that their resources can pair up properly.
>
> given that we have to support (IMHO) both dumb and sticky web 
> environments, and the underlying replication layer will hopefully be 
> reused underneath all tiers, I think it makes sense to support 
> ejb-dumb, for cases where in a web-dumb environment many reads are 
> made between the web tier and ejb tier for each web request. This 
> would ensure that all reads are local, whilst causing no additional 
> ejb replications.... etc...
>
> There are many other issues that will impact on this, such as the 
> different ways stickiness is implemented in different lbs and 
> replication is implemented under different tiers, but I'm hoping that 
> the overall classifications and optimisations deriving therefrom will 
> survive....
>
> So, over to you, how does JMS fit into this picture ? Are the same 
> abstractions meaningful in the JMS world ? If I put a topic or queue 
> into my httpsession and then wake up on a different node, will I 
> always end up talking through them to a remote resource, or might 
> these components be replicated locally?
>
> and then there is JNDI :-) any JNDI experts out there ?
>
>
> Jules
>
>


-- 
/**********************************
 * Jules Gosnell
 * Partner
 * Core Developers Network (Europe)
 **********************************/