Re: [jBoss-Dev] CL: Clustering, let's get started

2001-03-13 Thread Juha-P Lindfors


Hi Stacy,

 I'm just about to post my code up here. So you can have a look at it, rip it
 apart, whatever.

Looking forward to it :)

-- Juha






RE: [jBoss-Dev] CL: Clustering, let's get started

2001-03-12 Thread Tom Cook

On Mon, 12 Mar 2001, Sacha Labourey wrote:

 Hello Tom,
 
  I think that this last point is one which is being lost on some
  people.  It means that there can be no central controller.  Everything
  must work in a completely distributed way.  I have tried to describe how
  this might work.  For instance, there can not be a 'master' jndi
  repository, which is replicated, nor can there be a 'master' transaction
  manager, message queue...  anything.  This is why the private/public JNDI
  tree became necessary, so that some services could retain an identity at
  each node, while beans are federated across the nodes, and a lookup on
  them may return an instance at any node.
 
 OK, I see what you mean: difference between a bean and a service i.e.
 between a cluster-view and a node-view.
 
 Consequently, you suggest to have the public tree (cluster-view) being
 replicated at each node and all the private (i.e. node-view) trees, local to
 each node, being federated under the public tree. Right? (or we may as well
 have the public (cluster) tree federated under each private local tree)

Yes, you are correct.

   2nd, this "where-could-i-find-such-a-bean..." mechanism is probably not
   strict enough.
 
  What do you mean be this?  How is it not 'strict' enough?
 
 I meant too lazy = not enough optimized. But I may have missed your point!

Yes, it is possibly that.  But the other option is to keep a replicated
index of which PK can be found where (!)  This is a clear
memory-performance tradeoff.

  Having thought this through a little more, what I really meant was that
  objects in JNDI should be treated differently depending on whether they
  are services or EJBs.  A service should have an identity at each node
  within the cluster.  For a 10-node cluster, there will be 10 transaction
  managers, which are co-operating to provide distributed
  transactions.  Each one still retains it's own identity.  So there is a
  transaction manager in each 'private' JNDI, which is not visible to the
  client anyway.  Then there are beans, which have to exist as one entity
  across all the nodes.  Do you see what I am saying?  There are two
  different sorts of clustering happening here.  One is that of many
  individuals working independantly to provide a service, the other is one
  corporate body making up a service.  The 'public/private' thing might be a
  bit confusing, it was just a way of implementing this.
 
 OK, I agree with need such local vs. global representation.
 
The list of other live nodes would probably be best acheived
  by a regular
 ...
   ...). (in fact, the failure detection mechanism is a basic layer of the
   group communication problem)
  
   What do you think?
 
  I like this group communication thingy, except for that everyone I've
  heard explaining it seems to have advocated having a central controller,
  which gets messy in the case of the controller failing.  I have tried to
  avoid this.
 
 ?!? the group communication scheme as generally implemented (like
 javagroups) is completely redundant. At a particular moment you have some
 kind of master that sequences the system. But, a completely distributed
 failure detection subsystem will detect its death (or the death of any other
 node). And if the "controler" dies, a distributed election mechanism
 automatically takes place. There no single POF. Have I answered your concern
 or am I (again ;) ) missing your point?

No, that is cool.  I just find the concept of having a controller, even a
transitory one, a bit messy.  I prefer the 'all are equals' approach,
rather than the 'first among equals'.  But that is for purely aesthetic
reasons.

Tom
-- 
"If you mess with something for long enough it will break."
- Schmidt's law of engineering





RE: [jBoss-Dev] CL: Clustering, let's get started

2001-03-12 Thread marc fleury

Alright...

I am sorry but you guys completely missed the point.

We are a week into this (good) discussion, everybody tries to impress
everybody and we still are miles away from a single line of code. In a
second we are going to +1/-1 discussions that never end...

All I want is something we can bite on, a bit ambitious and a bit
realistic... All I wanted was SSB failover as client server.

Man this is going to be a long road... Does anyone step up to provide a
simple "stateless bean" clustering, no b2b no nothing, just client server
with failover of the stateless bean.

JMX clustering will be good there:), deployer will be reworked right there..
naming will be investigated, and the failover logic will be coded.
(btw the only point I will make is "smart stubs are good" MAKE IT SIMPLE)

SO STOP SHOOTING FOR THE SKY, SHOOT AT THAT SHORT GOAL
JUST STEP UP... THE KEYBOARD IS RIGHT THERE!!

You wanna know the reason why? because I know the stuff you are going to
write is going to crap.  Believe me it is going to be absolute shite. IT
ALWAYS IS.  Or you think your code don't stink??? even rickard's was
full of poopoos, mine? I won't even mention it, same with Sebastien and
Juha, hiram, oleg, simone (;-) etc etc we ARE ALL THE SAME, the ONLY
DIFFERENCE is that we stepped up THAT IS THE ONLY REAL THING, you must
understand that your code will go to trash... so don't worry about getting
it right YOU WON'T!!.

I repeat "Clustering, let's get started", let's beat the mental barrier that
is #1 in my mind ;-)

Please get going, anything anything... please

marc

__
strip those feet of lead my friend
raise the curtain, raise the roof,
 spirit's on tonight!
--we love our audience 'bauhaus'--
__

|-Original Message-
|From: [EMAIL PROTECTED]
|[mailto:[EMAIL PROTECTED]]On Behalf Of Tom Cook
|Sent: Monday, March 12, 2001 6:15 PM
|To: JBoss-Dev
|Subject: RE: [jBoss-Dev] CL: Clustering, let's get started
|
|
|On Mon, 12 Mar 2001, Sacha Labourey wrote:
|
| Hello Tom,
|
|  I think that this last point is one which is being lost on some
|  people.  It means that there can be no central controller.  Everything
|  must work in a completely distributed way.  I have tried to
|describe how
|  this might work.  For instance, there can not be a 'master' jndi
|  repository, which is replicated, nor can there be a 'master'
|transaction
|  manager, message queue...  anything.  This is why the
|private/public JNDI
|  tree became necessary, so that some services could retain an
|identity at
|  each node, while beans are federated across the nodes, and a lookup on
|  them may return an instance at any node.
|
| OK, I see what you mean: difference between a bean and a service i.e.
| between a cluster-view and a node-view.
|
| Consequently, you suggest to have the public tree (cluster-view) being
| replicated at each node and all the private (i.e. node-view)
|trees, local to
| each node, being federated under the public tree. Right? (or we
|may as well
| have the public (cluster) tree federated under each private local tree)
|
|Yes, you are correct.
|
|   2nd, this "where-could-i-find-such-a-bean..." mechanism is
|probably not
|   strict enough.
| 
|  What do you mean be this?  How is it not 'strict' enough?
|
| I meant too lazy = not enough optimized. But I may have missed
|your point!
|
|Yes, it is possibly that.  But the other option is to keep a replicated
|index of which PK can be found where (!)  This is a clear
|memory-performance tradeoff.
|
|  Having thought this through a little more, what I really meant was that
|  objects in JNDI should be treated differently depending on whether they
|  are services or EJBs.  A service should have an identity at each node
|  within the cluster.  For a 10-node cluster, there will be 10
|transaction
|  managers, which are co-operating to provide distributed
|  transactions.  Each one still retains it's own identity.  So there is a
|  transaction manager in each 'private' JNDI, which is not visible to the
|  client anyway.  Then there are beans, which have to exist as one entity
|  across all the nodes.  Do you see what I am saying?  There are two
|  different sorts of clustering happening here.  One is that of many
|  individuals working independantly to provide a service, the
|other is one
|  corporate body making up a service.  The 'public/private'
|thing might be a
|  bit confusing, it was just a way of implementing this.
|
| OK, I agree with need such local vs. global representation.
|
|The list of other live nodes would probably be best acheived
|  by a regular
| ...
|   ...). (in fact, the failure detection mechanism is a basic
|layer of the
|   group communication problem)
|  
|   What do you think?
| 
|  I like this group communication thingy, except for that everyone I've
|  heard explaining it seems to have advocated having a central
|con

Re: [jBoss-Dev] CL: Clustering, let's get started

2001-03-12 Thread Bill Burke

  I have been reading your discussions on Clustering the past few  days  
and would like to throw my 2 cents in.  To give a little  background , 
I'm working for a  company that is planning to deploy JBoss  and Jetty 
for a production  system in the coming months.  We are porting  from 
Weblogic to JBoss for  monetary reasons.  Not having clustering in  
JBoss/Jetty was a concern at  first, but after further analysis of our  
requirements we determined it  might be ok not to have clustering. I  
have a lot of random comments so, in advance, I apologize if  the  
following points only apply to the concerns of my company or are   
ignorant or stupid in any way :-)

- This is just an opinion, please no flames, but I would rather see the 
JBoss developer community focus on the quality of JBoss, the quality of 
the release cycle(an actual branching scheme and bug fixes branch), a 
clean 2.1 relase, and getting the docs up-to-date rather than new 
features like clustering.  JBoss is already a very cool product, and I'm 
guessing a lot of us can work around the problems that clustering solves.

- Distributed Transaction Processing.  If the JBoss developers are 
planning not to tackle DTP along with other clustering features I hope 
great concern is taken not to  break  applications that use transactions 
within their EJBs.  If a JBoss   load-balancer is bouncing nested Bean 
method calls to many different   nodes and you don't have DTP, many 
applications may break.  A solution  for this may be that nested Bean 
method calls  are "sticky".  That is,  only the initiating client 
request be  load-balanced.

- IMHO,  clustering EJBs is only half the problem.  Servlet/jsp engines  
(Jetty/Tomcat/whatever) need to be clusterable as well for a complete 
solution and to be competitve against other Enterprise app servers like 
WebLogic.  (That's the goal isn't, to beat WebLogic?).  Don't most apps 
that use EJBs also use a servlet engine?

- Also, IMHO, load-balancing is much less important than fail-over and 
DTP.  As others have said, those of us who are writing Web-Apps are 
getting load-balancing from our routers already.

- Our project is most concerned that all the ACID properties of  
Transactions are definable and reliable in a clustered or scaled  
environment.

Hope these comments are useful.

Best regards,
Bill

marc fleury wrote:

 Alright...
 
 I am sorry but you guys completely missed the point.
 
 We are a week into this (good) discussion, everybody tries to impress
 everybody and we still are miles away from a single line of code. In a
 second we are going to +1/-1 discussions that never end...
 
 All I want is something we can bite on, a bit ambitious and a bit
 realistic... All I wanted was SSB failover as client server.
 
 Man this is going to be a long road... Does anyone step up to provide a
 simple "stateless bean" clustering, no b2b no nothing, just client server
 with failover of the stateless bean.
 
 JMX clustering will be good there:), deployer will be reworked right there..
 naming will be investigated, and the failover logic will be coded.
 (btw the only point I will make is "smart stubs are good" MAKE IT SIMPLE)
 
 SO STOP SHOOTING FOR THE SKY, SHOOT AT THAT SHORT GOAL
 JUST STEP UP... THE KEYBOARD IS RIGHT THERE!!
 
 You wanna know the reason why? because I know the stuff you are going to
 write is going to crap.  Believe me it is going to be absolute shite. IT
 ALWAYS IS.  Or you think your code don't stink??? even rickard's was
 full of poopoos, mine? I won't even mention it, same with Sebastien and
 Juha, hiram, oleg, simone (;-) etc etc we ARE ALL THE SAME, the ONLY
 DIFFERENCE is that we stepped up THAT IS THE ONLY REAL THING, you must
 understand that your code will go to trash... so don't worry about getting
 it right YOU WON'T!!.
 
 I repeat "Clustering, let's get started", let's beat the mental barrier that
 is #1 in my mind ;-)
 
 Please get going, anything anything... please
 
 marc
 
 __
 strip those feet of lead my friend
 raise the curtain, raise the roof,
  spirit's on tonight!
 --we love our audience 'bauhaus'--
 __
 
 |-Original Message-
 |From: [EMAIL PROTECTED]
 |[mailto:[EMAIL PROTECTED]]On Behalf Of Tom Cook
 |Sent: Monday, March 12, 2001 6:15 PM
 |To: JBoss-Dev
 |Subject: RE: [jBoss-Dev] CL: Clustering, let's get started
 |
 |
 |On Mon, 12 Mar 2001, Sacha Labourey wrote:
 |
 | Hello Tom,
 |
 |  I think that this last point is one which is being lost on some
 |  people.  It means that there can be no central controller.  Everything
 |  must work in a completely distributed way.  I have tried to
 |describe how
 |  this might work.  For instance, there can not be a 'master' jndi
 |  repository, which is replicated, nor can there be a 'master'
 |transaction
 |  manager, message queue...  anything.  This is why the
 |private/public JNDI

RE: [jBoss-Dev] CL: Clustering, let's get started

2001-03-11 Thread Tom Cook

On Fri, 9 Mar 2001, Sacha Labourey wrote:

 Hello Tom,
 
  * In normal operation both nodes are usable.
 
 I guess by "both" you mean "any" or "all"

Yes, sorry, I got stuck thinking in two-node mode.  I meant all.  The
meaning was really that this is an active, not passive, cluster.

  * In the case that one node fails, clients which are using objects on that
node might see wierd things at this stage, but there are ways around
that.
  * In normal operation, client requests on the _home_ interface are load
balanced.  The balancing policy is just that - a matter of policy which
needn't concern us at this stage.
  * It should be possible to add and remove nodes from the cluster
transparently.
 
 ok.

I think that this last point is one which is being lost on some
people.  It means that there can be no central controller.  Everything
must work in a completely distributed way.  I have tried to describe how
this might work.  For instance, there can not be a 'master' jndi
repository, which is replicated, nor can there be a 'master' transaction
manager, message queue...  anything.  This is why the private/public JNDI
tree became necessary, so that some services could retain an identity at
each node, while beans are federated across the nodes, and a lookup on
them may return an instance at any node.

  1. Semi-federated JNDI.
  ---
  I propose that some sort of delegation model be used for JNDI.  There is a
  'public' JNDI interface and a 'private' JNDI interface.
 
  The private interface is just an ordinary server as already exists, one on
  each node, which keeps a list of the remote objects registered in that
  node.  This means that, rather than having one central instance of each
  service which co-ordinates the nodes, each node has it's own instance of
  each service and they all co-operate.  This includes JNDI.
 
  The public interface is available on each node.  It keeps a list of all
  other live nodes in the cluster, and delegates to them in a round-robin
  way.  One request may be delegated to several servers before a match is
  found for the name.  This inefficiency should only happen in exceptional
  circumstances (a node is going down for maintenance etc).  The worst case
  is when no match for the name can be found, in which case every node will
  be checked.  This is reasonable, since it indicates either the deployment
  is broken, or the user made an error.  In 'normal' circumstances, this
  should not happen.  In 'ideal' operating conditions (every node has every
  service available) there will be only one delegation for every request.
 
 IMO, this is not efficient.
 1st, it would be nice to be able to determine that a particular application
 need to be deployed to only some particular nodes.

Yes, but that would not be a huge hurdle once we had this system
implemented.  In the absolute simplest case, a node which does not have a
bean deployed may simply report that it's pool for that bean is 100% full,
so it will never get invocations on it.

 2nd, this "where-could-i-find-such-a-bean..." mechanism is probably not
 strict enough.

What do you mean be this?  How is it not 'strict' enough?

 BTW, you say that you want a private and a public JNDI interface. Why? Is it
 to optimize local calls?

No, like I said above, I want to be able to have federated and
non-federated objects in JNDI.

Having thought this through a little more, what I really meant was that
objects in JNDI should be treated differently depending on whether they
are services or EJBs.  A service should have an identity at each node
within the cluster.  For a 10-node cluster, there will be 10 transaction
managers, which are co-operating to provide distributed
transactions.  Each one still retains it's own identity.  So there is a
transaction manager in each 'private' JNDI, which is not visible to the
client anyway.  Then there are beans, which have to exist as one entity
across all the nodes.  Do you see what I am saying?  There are two
different sorts of clustering happening here.  One is that of many
individuals working independantly to provide a service, the other is one
corporate body making up a service.  The 'public/private' thing might be a
bit confusing, it was just a way of implementing this.

 Have you read my previous proposition? I suggested something like you but we
 would have only one JNDI space replicated at different places (possibly and
 most probably on each node) with the possibility (extended JNDI semantic) to
 bind several (beans) reference for a same JNDI name. Consequently:
   - for whatever JNDI node a client decides to speak with, this node exactly
 knows which nodes have subscribed a reference to this name, without
 prompting its neighboors
   - local code optimisation is (can be) achieved
   - if an application is deployed only on a few nodes (not all nodes), the
 related JNDI names of this application will receive bind request only from
 these nodes 

RE: [jBoss-Dev] CL: Clustering, let's get started

2001-03-11 Thread Sacha Labourey

Hello Tom,

 I think that this last point is one which is being lost on some
 people.  It means that there can be no central controller.  Everything
 must work in a completely distributed way.  I have tried to describe how
 this might work.  For instance, there can not be a 'master' jndi
 repository, which is replicated, nor can there be a 'master' transaction
 manager, message queue...  anything.  This is why the private/public JNDI
 tree became necessary, so that some services could retain an identity at
 each node, while beans are federated across the nodes, and a lookup on
 them may return an instance at any node.

OK, I see what you mean: difference between a bean and a service i.e.
between a cluster-view and a node-view.

Consequently, you suggest to have the public tree (cluster-view) being
replicated at each node and all the private (i.e. node-view) trees, local to
each node, being federated under the public tree. Right? (or we may as well
have the public (cluster) tree federated under each private local tree)


  2nd, this "where-could-i-find-such-a-bean..." mechanism is probably not
  strict enough.

 What do you mean be this?  How is it not 'strict' enough?

I meant too lazy = not enough optimized. But I may have missed your point!

 Having thought this through a little more, what I really meant was that
 objects in JNDI should be treated differently depending on whether they
 are services or EJBs.  A service should have an identity at each node
 within the cluster.  For a 10-node cluster, there will be 10 transaction
 managers, which are co-operating to provide distributed
 transactions.  Each one still retains it's own identity.  So there is a
 transaction manager in each 'private' JNDI, which is not visible to the
 client anyway.  Then there are beans, which have to exist as one entity
 across all the nodes.  Do you see what I am saying?  There are two
 different sorts of clustering happening here.  One is that of many
 individuals working independantly to provide a service, the other is one
 corporate body making up a service.  The 'public/private' thing might be a
 bit confusing, it was just a way of implementing this.

OK, I agree with need such local vs. global representation.

   The list of other live nodes would probably be best acheived
 by a regular
...
  ...). (in fact, the failure detection mechanism is a basic layer of the
  group communication problem)
 
  What do you think?

 I like this group communication thingy, except for that everyone I've
 heard explaining it seems to have advocated having a central controller,
 which gets messy in the case of the controller failing.  I have tried to
 avoid this.

?!? the group communication scheme as generally implemented (like
javagroups) is completely redundant. At a particular moment you have some
kind of master that sequences the system. But, a completely distributed
failure detection subsystem will detect its death (or the death of any other
node). And if the "controler" dies, a distributed election mechanism
automatically takes place. There no single POF. Have I answered your concern
or am I (again ;) ) missing your point?

Cheers,


Sacha





RE: [jBoss-Dev] CL: Clustering, let's get started

2001-03-09 Thread Peter F. Spicer

Tom - Great stuff - your efforts to document your thoughts are good -
hopefully we can build on and extend your thoughts in an ever more complete
document.

-Original Message-
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED]]On Behalf Of Tom Cook
Sent: Thursday, March 08, 2001 3:44 PM
To: JBoss-Dev
Subject: RE: [jBoss-Dev] CL: Clustering, let's get started


OK, in all those hours I have free as a student ;-) I have been thinking
about clustering, and this is what I've come up with.

Four parts of the EJB server need to become distributed for clustering to
work.  By 'clustering' here I mean this:

* In normal operation both nodes are usable.
* In the case that one node fails, clients which are using objects on that
  node might see wierd things at this stage, but there are ways around
  that.
* In normal operation, client requests on the _home_ interface are load
  balanced.  The balancing policy is just that - a matter of policy which
  needn't concern us at this stage.
* It should be possible to add and remove nodes from the cluster
  transparently.

Here is how I propse to acheive this.

1. Semi-federated JNDI.
---
I propose that some sort of delegation model be used for JNDI.  There is a
'public' JNDI interface and a 'private' JNDI interface.

The private interface is just an ordinary server as already exists, one on
each node, which keeps a list of the remote objects registered in that
node.  This means that, rather than having one central instance of each
service which co-ordinates the nodes, each node has it's own instance of
each service and they all co-operate.  This includes JNDI.

The public interface is available on each node.  It keeps a list of all
other live nodes in the cluster, and delegates to them in a round-robin
way.  One request may be delegated to several servers before a match is
found for the name.  This inefficiency should only happen in exceptional
circumstances (a node is going down for maintenance etc).  The worst case
is when no match for the name can be found, in which case every node will
be checked.  This is reasonable, since it indicates either the deployment
is broken, or the user made an error.  In 'normal' circumstances, this
should not happen.  In 'ideal' operating conditions (every node has every
service available) there will be only one delegation for every request.

The list of other live nodes would probably be best acheived by a regular
broadcast ping.  This sounds inefficient, but it is how commercial vendors
(like Borland Visibroker) acheive similar ends.

2 Distributed J2EE deployer.

When a package is deployed, it should be transferred to every node and
deployed on them also.  It may be safe to assume that if one node can
deploy a package, then the others can too, or you might want to check them
all and then undeploy if it fails.

3 Distributed home interfaces.
--
The home interfaces need to be distributed to implement the sort of load
balancing I have in mind.  The idea is this.  Pretty much any operation
you can do on a home interface involves either activating an instance of a
bean or finding an instance.  So there are to activities:

3.1 Activating an instnace.
---
Here the home interface finds the node which is least loaded (the
definition of 'least loaded' depends on your load balancing policy - it
might mean the next one in a list) and activates the instance on that
node, returning the reference to the client.

3.2 Finding an instance.

This might well require a sort of braodcast to see if anyone has an
instance already activated as that bean.  If so, return that instance.  If
not, use the activation described in 3.1.

This sounds messy, but the aim is to simplify things by restricting an
entity to only existing on one node at a time.  This makes distributed
transaction a hell of a lot easier, as far as I can see.

4 Distributed transaction manager.
--
I don't think this is as bad as it sounds, if we can do a two phase commit
on the beans.  Then we need to find some way of propogating a unique
transaction ID in bean to bean calls.  The transaction management would
look something like this:

* Client makes a call on bean A.  Transaction is started (given
  appropriate transaction attribute).  Unique transaction ID is assigned
  (UUID might be necessary here).  Say this is XID 111.
* Bean A makes call on bean B.  New transaction is started on bean B with
  the same transaction ID, ie. 111.  This is independant of which node the
  transaction is started on.  Bean A keeps a note that it has invoked bean
  B in this transaction.
* Method on bean B completes, but bean B stays associated with transaction
  111.
* Method on bean A completes, and we decide whether to commit or rollback.
 - Commit
   Do a two phase commit on each node which bean A has accessed.  This
   commit needs

RE: [jBoss-Dev] CL: Clustering, let's get started

2001-03-09 Thread Filip Hanik

So this is the scenario where information could be shared in the JNDI tree
for other purposes than just storing references to home interfaces.

===
 |   NODE 1  |NODE 2 |   NODE3   |
===
JNDI |App1/BeanAHome |App1/BeanAHome |App1/BeanAHome |
SPACE|App1/BeanA |App1/BeanA |App1/BeanA |
 |App2/BeanBHome |App2/BeanBHome |App2/BeanBHome |
 |App2/BeanB |App2/BeanB |App2/BeanB |
 |myapp.Snapshot |myapp.Snapshot |   |
===
EJB  |   |   |   |
SERVER   | App1 running  | App1 running  | App1 running  |
 | App2 deployed but | App2 running  |   |
 | in standby backup |   |   |
===
CACHE|   |   |   |
DATA | Data {A,B}| Data {B,C}| Data {D,E}|
===

I have made a monitor system built into my app. This monitor system consist
of an internal measurement/snapshot component that sits inside the EJB
application and an external report/analysis component.
The internal snapshot component gathers information about the EJB app
statistics and publishes them into an object into the JNDI tree.
In a non-clustered environment, the external report/analysis component will
go to each server and take the latest snap shot and compile the information
and produce a report. The snapshot is bound to the name myapp.Snapshot.

So far so good, the monitoring works great with my 3 different server nodes.

No client transparent fail-over has become a requirement from the EJB client
app (another app that accesses the EJB server, not the monitor report app).

The developers thought they could do this seamlessly, but as it turns out,
all the content in the JNDI tree gets replicated between the cluster nodes.
This means that object bound to the name "myapp.Snapshot" represents the
latest snapshot of each of the individual servers. But what happens if NODE
2 gets restarted, and a snapshot has not been performed (bound to the JNDI
tree)? Now there is a risk that a snapshot from NODE 1 or 3 gets replicated
into the JNDI tree of NODE 2 and the report component is accessing incorrect
data.

Also, lets say that the client is reading snapshot data as well and
collecting a history on client machine, so when NODE 2 fails, the request
gets automatically redirected to NODE 1 and the client data doesn't make
sense anymore :)

Now this is clearly a design that was not made with clustering (shared JNDI
contexts) in mind.
But it happens, and they probably already exist.

We could say, "hey dude, you should have thought of clustering at the time
you designed your report monitor" and the guy will reply
"well, there wasn't a clustering strategy in place for JBoss when I designed
my app, I had no idea that the JNDI context would replicate everything into
other server nodes."

Although this example is clearly not anything I would do (I know better than
to use JNDI for shared caching :) I'm sure similar scenarios actually do
exist.

Just trying to point out two things here
1. You will have name conflicts when replicating JNDI objects
2. If you have a strategy of resolving those name conflicts by applying some
FIFO overwrite rule, you may end up overwriting data that applications
depend upon.
3. When a client gets transparently redirected to another NODE, they may see
unexpected data in the JNDI tree from what they say in their previous call

One way to do clustering if you have an app like this is to use NODE 1 as
main server and NODE 2 as hot standby, ie no clients connect to NODE 2 until
NODE 1 crashes. this way the transparent failover is truly transparent

just some thoughts on JNDI replication issues

Filip


~
Namaste - I bow to the divine in you
~
Filip Hanik
Software Architect
[EMAIL PROTECTED]
www.filip.net





Re: [jBoss-Dev] CL: Clustering, let's get started

2001-03-09 Thread Hiram Chirino

Sounds cool..  but I think that JMS CAN do most of that stuff.  It's all in
how it's implemented.  In the JBossMQ CVS we already have a working
Multicast JMS server.  This server is different than the normal JBossMQ JMS
server, I'm calling this one JBossMQ-Cluster.  That's because I'm aiming to
optimize it for operating in clustered environments.  In other works
JBossMQ-Cluster will not support persistence, queues, durable subscriptions,
message priorities, or transactions to name a few missing features.  It's
going to provide FAST publish-subscribe services via multicast.  What does
it do now that java groups does? :

* losses transmission of a message to all recipients (with retransmission
 of missing messages)
* fragmentation of large messages into smaller ones and reassembly at the
  receiver's side  ordering of messages, e.g. messages m1 and m2 sent by P
  will be received by all receivers in the same order, and not as m2,  m1
 (FIFO order)

Using the above features and the standard JMS publish-subscribe services, I
think we can build all the other features quickly.  The only non standard
JMS extension we would have to use is so that app could get notified when a
peer failure is detected by the JMS Server.

I've started working on a class that keeps a list which peers are active in
the cluster.  It should not be too hard to extend that so that it provides
some similar "group" notification services such as the ones provided by
javagroups.

Regards,
Hiram

P.S. I have looked at the Javagroups site and they do have a WAY better
multicast implementation.  I think I'm going to have to steal a few Ideas
from over there ;-)  But the point of the e-mail was that: I think a
framework around JMS can be implemented which will provide all the services
that we will need.

- Original Message -
From: "Filip Hanik" [EMAIL PROTECTED]
To: "JBoss-Dev" [EMAIL PROTECTED]
Sent: Friday, March 09, 2001 11:52 AM
Subject: RE: [jBoss-Dev] CL: Clustering, let's get started


 I wasn't aware that JMS could

 a) allow you to modify/customize the protocol stack
 b) provide notification of members that joins, leaves or crashes
 c) atomicity

 these are the big things, I would like to hear what info you have one JMS
 over multicast

 Filip
 --8---

 JavaGroups is a group communication toolkit written entirely in Java. It
is
 based on IP multicast, but extends it with reliability and  group
 membership.

 Reliability includes
 * lossless transmission of a message to all recipients (with
retransmission
 of missing messages)
 * fragmentation of large messages into smaller ones and reassembly at the
 receiver's side  ordering of messages, e.g. messages m1 and m2 sent by P
 will be received by all receivers in the same order, and not as m2,  m1
 (FIFO order)
 * atomicity: a message will be received by all receivers, or none.

 Group Membership includes
 * Knowledge of who the members of a group are and
 * Notification when a new member joins, an existing member leaves, or an
 existing member has crashed



 ~
 Namaste - I bow to the divine in you
 ~
 Filip Hanik
 Software Architect
 [EMAIL PROTECTED]
 www.filip.net

  -Original Message-
  From: [EMAIL PROTECTED]
  [mailto:[EMAIL PROTECTED]]On Behalf Of Hiram Chirino
  Sent: Friday, March 09, 2001 11:44 AM
  To: JBoss-Dev
  Subject: Re: [jBoss-Dev] CL: Clustering, let's get started
 
 
 
  I would like to know what javagroups give you that JMS over multicast
does
  not?
 
  Regards,
  Hiram
 
  
   Yes, I read up on JavaGroups, it is a brilliant idea. if anyone of you
   haven't taken a look at it yet,
   goto www.javagroups.com
  
   the idea of building your own stack on top of their technology is very
   appealing to me.
  
   Furthermore, the idea of groups will blow away an implementation like
   Weblogic that uses IP multicast and heart beats to determine whether a
   server is up or down. Javagroups has that capability built in already.
   not trying to be competitive, just comparative. :)
  
  
   Tom and Sacha, great ideas and great work!
  
   ~
   Namaste - I bow to the divine in you
   ~
   Filip Hanik
   Software Architect
   [EMAIL PROTECTED]
   www.filip.net
  
  
  
 
 







Re: [jBoss-Dev] CL: Clustering, let's get started

2001-03-09 Thread Hiram Chirino

Wow,  I stand corrected.  I did not understand that "view" concept.  I see
how that is very powerful and useful.  This is definitely something that JMS
will not be able to provide.  I'm going to have to research it further.

Thanks,
Hiram


- Original Message -
From: "Sacha Labourey" [EMAIL PROTECTED]
To: "JBoss-Dev" [EMAIL PROTECTED]
Sent: Friday, March 09, 2001 1:57 PM
Subject: RE: [jBoss-Dev] CL: Clustering, let's get started


  I wasn't aware that JMS could
 
  a) allow you to modify/customize the protocol stack
  b) provide notification of members that joins, leaves or crashes
  c) atomicity

 Exactly. Furthermore, it may also give you synchronous view group
 communication i.e.
   "- Agreement: correct processes deliver the same set of messages in any
 given view
 - Integrity: if a process P delivers message m, then it will not deliver m
 again
 - Validity: correct processes always deliver the messages that they send.
 If the system fails to deliver a message to any process q, then it
notifies
 the suviving processes by delivering a new view with q excluded,
immediately
 after the view in which any of them delivered the message.

 In a view-synchronous system, the delivery of a new view draws a
conceptual
 line across the system and every message that is delivered at all is
 consistently devlivered one side or the other of that line. This enables
the
 programmer to draw userful conclusions about the set of messages that
other
 correct processes have delivered when it delivers a new view, based only
on
 the local ordering of message delivery and view delivery events." (from
 Distributed systems, concepts and design, Coulouris-Dollimore-Kindbert,
3rd
 ed., Addison-Wesley)

 Some approximate definitions:
 - a group is a set of processes
 - a view is a set of process
 - delivering a message means receiving it
 - delivering a view means receiving the new set of processes that are
 corrects (i.e. alive, ...)


 Consequently, it is possible to exchange information in a group (new JNDI
 name binding for example...) and be sure that everyone correct will
receive
 it (in the same order if necessary). As each view change (v0, v1, v2, ...,
 vn) and message (m1, m2, ..., mn) is numbered, it is possible for a
process,
 when it wakes up, to ask the group to get all updates  mi (i is the last
 message he got before collapsing). Furthermore, such a system needs to
 detect when a system has failed (to deliver a new view), which why such a
 subsystem is present in javagroups to detect these potential failures. The
 algorithm that determines which view is valid, ... is distributed and
 fault-tolerant in itself : if the "master" dies, an election automatically
 takes place to determine the new master.

 I understand it is a bit a quick introduction... ask if you have some
 questions!

 Cheers,



 Sacha







RE: [jBoss-Dev] CL: Clustering, let's get started

2001-03-08 Thread Sacha Labourey

Hello,

 This naming service would eventually need to be some sort of
 federated/replicated thing, for HA. Each instance in the cluster
 might run
 its own NS.

 that would be my recommendation too, just like weblogic where
 each node runs
 its own NS and content gets replicated across the cluster using multicast.

 using a shared NS becomes to much of a headache.

I aggree with you and sorry if my suggestion wasn't clear enough. We have
many NS (one per server for example) each synchronized to (i.e. a replicate
of) the other through group communication (hence the
sourceforge.net/projects/javagroups link). This provide better HA,
scalability, and performance (as resolution can be made locally).

Cheers,



Sacha





RE: [jBoss-Dev] CL: Clustering, let's get started

2001-03-07 Thread Peter F. Spicer

Yippee!!  Or more precisely - clustering will make jBoss a 'real' commercial
contender for obvious reasons.

-Original Message-
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED]]On Behalf Of marc fleury
Sent: Tuesday, March 06, 2001 4:27 PM
To: jBoss Developer
Subject: [jBoss-Dev] CL: Clustering, let's get started


Ok, it's been promised, it's been discussed, it has already started,  it is
really wanted.

Also it will put JBoss on the map for ever...

The clustering.

I would like to "officially" call the season for clustering "open".

There have been some discussions already some public some private and I
believe we should really take this take by step.  So we won't shoot for the
stars in the very beginning, just something simple.

I will assume the interim leadership for the implementation since there is
no clear lead yet and the team is yet to form.  I invite all of you that
have touched the subject to publicly post and explain your view.

STEP ONE:
-Start 2 servers do "round robin" on STATELESS SESSION.

Simple right? That will be some work

go!

marc

_
Marc Fleury, Ph.D
[EMAIL PROTECTED]
_







RE: [jBoss-Dev] CL: Clustering, let's get started

2001-03-07 Thread Sacha Labourey

Hello,

just some ideas to start a discussion...

As said in a precedent post, administration tools will be very important in
the clustering and they may also help, during the design phase, to see (as a
kind of "use cases") what features the clustering should provide.

I do not know much about WL, but have you checked Borland Appcenter tool?
http://www.borland.com/appcenter/ It gives some nice ideas.

Some general issues I have thought of:
- should be clustering stuff be available to Java-RMI only
clients or to all clients? If we want it to be available
to all clients, we cannot rely on specific smart code (i.e. algo)
in the dynamic stubs but instead need to have the logic
on "the server side" (or approaching) and use some more
standard principles such as IIOP multiple profiles IOR on
the client side. We may also have a mix of solutions.

- I suggest to have a (as someone mentioned earlier) a fault
tolerant CORBA Naming Service able to store more than one
reference for a particular binding. These extended binding features
would be provided as extension of the basic IDL CORBA NS, thus allowing
standard NS clients to get an appropriate IOR (selected by a pluggable
algorithm)
see next point for an implementation helper

- it may be very interesting to keep an eye on JavaGroups
(http://sourceforge.net/projects/javagroups), an open source project which
may
be of interest to provide the basic layer for group communication
(sychrnonous view, group multicast, ...)
It could be for example used to have the NS implementation (see point
above) completely
redundant and not using some kind of master-slave design where only one
server
can, at a time, receive write invocations


The general idea would be to have load-balancing at the session level: the
client connect to the NS and get a reference to its target (bean). As many
containers may be bound to the same NS name, a pluggable algorithm in the NS
would decide which particular container it wants the client to use (=
load-balancing). Furthermore, in the case of IIOP, it may add some other
profiles to other containers in the IOR to provide fail-over feature. In the
case of RMI-Java client, the provided stub may contain the failover logic
itself.

If the client invocation fails because its server becomes corrupted, the
client mechanism will automagically retry a new invocation. Thanks to the
multi-profile IOR for IIOP and to the smart stub for Java-RMI.

If a server is too busy to serve a request, it may send back a
LOCATION_FORWARD IIOP message to the client (thus really helping the server
to lower its load but creating a new consumming client-server network
round-trip) or itself forward the request to another server in the cluster
and act as a proxy.

It is evident that all these ideas are just very general idea to "activate
the pump" and concerns such as bean kind (entity, SFSB, SLSB), transactions
consistency during failover, solving dependant object aliasing issue for EJB
2.0 entity beans, ... are not taken in consideration.

Cheers,



Sacha



 -Message d'origine-
 De : [EMAIL PROTECTED]
 [mailto:[EMAIL PROTECTED]]De la part de marc fleury
 Envoy : mercredi, 7 mars 2001 01:27
  : jBoss Developer
 Objet : [jBoss-Dev] CL: Clustering, let's get started


 Ok, it's been promised, it's been discussed, it has already
 started,  it is
 really wanted.

 Also it will put JBoss on the map for ever...

 The clustering.

 I would like to "officially" call the season for clustering "open".

 There have been some discussions already some public some private and I
 believe we should really take this take by step.  So we won't
 shoot for the
 stars in the very beginning, just something simple.

 I will assume the interim leadership for the implementation since there is
 no clear lead yet and the team is yet to form.  I invite all of you that
 have touched the subject to publicly post and explain your view.

 STEP ONE:
 -Start 2 servers do "round robin" on STATELESS SESSION.

 Simple right? That will be some work

 go!

 marc

 _
 Marc Fleury, Ph.D
 [EMAIL PROTECTED]
 _








RE: [jBoss-Dev] CL: Clustering, let's get started

2001-03-07 Thread marc fleury

Ok, time to be more precise...

Assume a client talking directly to the bean, and load balance SSB.  When
THAT is done we will get B2B calls that need DTM. XP methodology. Don't
stop.

We know all that :) YES trivially if you deploy to n nodes, and you do
nothing about "keep beans of an app in one node" and you do B2B, then you
need a DTM.

In clear I specifically want to avoid what mr cook is talking about. 10k
feet "approach" talk. We need this and that oh but first bla bla.. XP!

If DTM is your thing then please work on it since we will need it at the
end. But in terms of approach I want to think of SSB direct clustering :)


marc

|-Original Message-
|From: [EMAIL PROTECTED]
|[mailto:[EMAIL PROTECTED]]On Behalf Of Jeremy Boynes
|Sent: Wednesday, March 07, 2001 1:35 AM
|To: [EMAIL PROTECTED]
|Subject: RE: [jBoss-Dev] CL: Clustering, let's get started
|
|
|Tom's question was really about approach rather than solutions and you did
|ask for views... You might choose a "simple" scenario such as pure SSBs
|first, but I tend to agree with Tom that you should consider the core
|building blocks (e.g. DTM, cluster membership, resource location, state
|replication, and many more) whilst doing so as in reality none of the
|scenarios are actually that simple.
|
|
|As for applicability of a DTM, one of the goals of a cluster is location
|transparency (at least to the application). So consider a cluster with two
|nodes, 1  2, and two SSBs A  B; SSB A calls a method on SSB B; SSB A is
|deployed to node 1, SSB B to node 2.
|
|So if a client invokes SSB A, it is directed by availability to node 1. SSB
|A calls SSB B and is directed by availability to node 2. You now have more
|than one node involved which requires a distributed transaction.
|
|Now make it more complex, deploy SSB A on both node 1 and node 2 so the
|client could be load balanced to either node. If it goes to node 1 then you
|have a distributed transaction as above whereas if it is directed to node 2
|then the transaction is local to node 2.
|
|Take it further and deploy both beans on both nodes. The client can get
|load-balanced to either node; in theory so could the inter-bean
|call but due
|to the overhead of a remote call + DTM you would prefer it was directed to
|the local machine.
|
|However, suppose SSB B becomes temporarily unavailable on one node for some
|reason; availability would require that the inter-bean call is now directed
|to the surviving node. The determination of which node will service the
|request is dynamic, based on availability, and as a result so is the
|determination of whether the transaction is local or distributed.
|
|If you plan to support scenarios beyond the most basic, you *will* need a
|DTM so design it in early.
|
|Jeremy
|
|-Original Message-
|From: [EMAIL PROTECTED]
|[mailto:[EMAIL PROTECTED]]On Behalf Of marc fleury
|Sent: Tuesday, March 06, 2001 7:18 PM
|To: JBoss-Dev
|Subject: RE: [jBoss-Dev] CL: Clustering, let's get started
|
|
|what does a dtm have to do with Stateless session bean load balancing and
|high availability
|
|?
|
|marc
|
|





RE: [jBoss-Dev] CL: Clustering, let's get started

2001-03-07 Thread Micheal J



 -Original Message-
 From: [EMAIL PROTECTED]
 [mailto:[EMAIL PROTECTED]]On Behalf Of Jeremy Boynes
 Sent: 07 March 2001 06:35
 To: [EMAIL PROTECTED]
 Subject: RE: [jBoss-Dev] CL: Clustering, let's get started


 Tom's question was really about approach rather than solutions and you did
 ask for views... You might choose a "simple" scenario such as pure SSBs
 first, but I tend to agree with Tom that you should consider the core
 building blocks (e.g. DTM, cluster membership, resource location, state
 replication, and many more) whilst doing so as in reality none of the
 scenarios are actually that simple.


 As for applicability of a DTM, one of the goals of a cluster is location
 transparency (at least to the application). So consider a cluster with two
 nodes, 1  2, and two SSBs A  B; SSB A calls a method on SSB B; SSB A is
 deployed to node 1, SSB B to node 2.

My definition of application server clustering does not allow a situation as
you just described Jeremy. The beans (actually the application) would be
deployed to the "cluster" and not to any particular node (or nodes) in a
cluster. On an implemenatation level, I would still expect all nodes to host
all applications once deployed. This removes the possibility of any
application being unavailable even though a cluster is atill active. This
could happen if either node 1 or node 2 failed in your example.

Also I believe we need to think about the jBoss clustering effort in the
wider context of clustering complete J2EE applications. Perhaps I am missing
something here but shouldn't think about how a cluster-capable jBoss affects
jBoss-Tomcat and/or jBoss-Jetty and other such (aggregated) J2EE stacks?.

My Use Cases for a "JBoss Cluster User" includes :
- Cluster Management: define/change the set of nodes (JBoss only or
JBoss_+_Tomact/Jetty/etc) that belong together as a cluster
- Application Deployment: deploy a JAR, WAR, EAR e.t.c on a node (any node?)
in a jBoss-Tomcat (or jBoss-Jetty) cluster and have the application
automagically deployed (and load-balanced) across all the nodes in the
cluster. I presume that there would be a deployment tool for this purpose
and that hot-deploy may or may not work (it would be great if it did
though).

Issues:
- WHAT IS DEFINED AS A NODE IN THE CLUSTER?
  a) A physical computer running jBoss ?
 A cluster is then a named set of physical computers. This raises
 questions such as "must all instances (i.e. on different port nos)
 of jBoss on these computers be automatically clustered?".
  b) A specific instance (identified by port no) of JBoss running on a
 specified port on a physical computer?.
 A cluster may be all instances of jBoss running on the same port on
 a specified set of physical computers. If the instances are truly
 isolated, one can run a dev, test and staging cluster on the same
 set of physical computers for instance. I use multiple instances
 in this way with Oracle and SQL Server currently.

- WHICH APPLICATION RESOURCES CAN BE CLUSTERED?
  * EJB Jars only ?
  * WAR, EAR ??
  * other files ???

Cheers!,

Micheal





RE: [jBoss-Dev] CL: Clustering, let's get started

2001-03-07 Thread Sacha Labourey

Hello,

 My definition of application server clustering does not allow a
 situation as
 you just described Jeremy. The beans (actually the application) would be
 deployed to the "cluster" and not to any particular node (or nodes) in a
 cluster. On an implemenatation level, I would still expect all
 nodes to host
 all applications once deployed. This removes the possibility of any
 application being unavailable even though a cluster is atill active. This
 could happen if either node 1 or node 2 failed in your example.

You are right, we need to set some terminology. IMO, we should be able to
define a cluster has a set of Jboss instances (eg. A B C and D), we do not
care if they are located on the same machine or not i.e. we may have a
cluster of two instances running on the same machine. When we deploy an
application, we can decide on which node of the cluster it should be running
(A B only for example). In Borland tool, it is even possible to say, for
example, that Application A1 should be working on at least 2 nodes, starting
with nodes A and B but never on node D. Consequently, from the outside
world, the cluster is seen as a single entity, but from the inside, we can
decide what should run where.

 Also I believe we need to think about the jBoss clustering effort in the
 wider context of clustering complete J2EE applications. Perhaps I
 am missing
 something here but shouldn't think about how a cluster-capable
 jBoss affects
 jBoss-Tomcat and/or jBoss-Jetty and other such (aggregated) J2EE stacks?.

Yes, it is a good idea, we could then share the administration tool for the
presentation tier, but in fact, IMHO, this is not direclty related (but
could gain in performance if again integrated).

Cheers,



Sacha





RE: [jBoss-Dev] CL: Clustering, let's get started

2001-03-07 Thread Peter F. Spicer

Lots of good feedback on the Clustering issue.  Anybody thought about
putting together a requirements document that captures these ideas and
defines "The Path" for the effort?  Does not have to be fancy - I would
volunteer but don't have the chops (domain expertise).


-Original Message-
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED]]On Behalf Of Micheal J
Sent: Wednesday, March 07, 2001 6:41 AM
To: JBoss-Dev
Subject: RE: [jBoss-Dev] CL: Clustering, let's get started




 -Original Message-
 From: [EMAIL PROTECTED]
 [mailto:[EMAIL PROTECTED]]On Behalf Of Jeremy Boynes
 Sent: 07 March 2001 06:35
 To: [EMAIL PROTECTED]
 Subject: RE: [jBoss-Dev] CL: Clustering, let's get started


 Tom's question was really about approach rather than solutions and you did
 ask for views... You might choose a "simple" scenario such as pure SSBs
 first, but I tend to agree with Tom that you should consider the core
 building blocks (e.g. DTM, cluster membership, resource location, state
 replication, and many more) whilst doing so as in reality none of the
 scenarios are actually that simple.


 As for applicability of a DTM, one of the goals of a cluster is location
 transparency (at least to the application). So consider a cluster with two
 nodes, 1  2, and two SSBs A  B; SSB A calls a method on SSB B; SSB A is
 deployed to node 1, SSB B to node 2.

My definition of application server clustering does not allow a situation as
you just described Jeremy. The beans (actually the application) would be
deployed to the "cluster" and not to any particular node (or nodes) in a
cluster. On an implemenatation level, I would still expect all nodes to host
all applications once deployed. This removes the possibility of any
application being unavailable even though a cluster is atill active. This
could happen if either node 1 or node 2 failed in your example.

Also I believe we need to think about the jBoss clustering effort in the
wider context of clustering complete J2EE applications. Perhaps I am missing
something here but shouldn't think about how a cluster-capable jBoss affects
jBoss-Tomcat and/or jBoss-Jetty and other such (aggregated) J2EE stacks?.

My Use Cases for a "JBoss Cluster User" includes :
- Cluster Management: define/change the set of nodes (JBoss only or
JBoss_+_Tomact/Jetty/etc) that belong together as a cluster
- Application Deployment: deploy a JAR, WAR, EAR e.t.c on a node (any node?)
in a jBoss-Tomcat (or jBoss-Jetty) cluster and have the application
automagically deployed (and load-balanced) across all the nodes in the
cluster. I presume that there would be a deployment tool for this purpose
and that hot-deploy may or may not work (it would be great if it did
though).

Issues:
- WHAT IS DEFINED AS A NODE IN THE CLUSTER?
  a) A physical computer running jBoss ?
 A cluster is then a named set of physical computers. This raises
 questions such as "must all instances (i.e. on different port nos)
 of jBoss on these computers be automatically clustered?".
  b) A specific instance (identified by port no) of JBoss running on a
 specified port on a physical computer?.
 A cluster may be all instances of jBoss running on the same port on
 a specified set of physical computers. If the instances are truly
 isolated, one can run a dev, test and staging cluster on the same
 set of physical computers for instance. I use multiple instances
 in this way with Oracle and SQL Server currently.

- WHICH APPLICATION RESOURCES CAN BE CLUSTERED?
  * EJB Jars only ?
  * WAR, EAR ??
  * other files ???

Cheers!,

Micheal







RE: [jBoss-Dev] CL: Clustering, let's get started

2001-03-07 Thread Filip Hanik

ok, let me raise my voice :)
the emails around clustering seem to focus a lot on loadbalancing as the
primary reason to cluster servers.
well, imho it is not.
there is only one reason you would cluster servers, fail-over and high
availability.

if you want to do loadbalancing, you have much better performance using
non-clustered servers and a stateful loadbalancer.
as a matter of fact, you can buy a load balancing router for a couple of
thousand bucks, so why try to replicate functionality that is already done.
even with weblogic, if you are serious about loadbalancing because you have
so much traffic, you do it the hardware way. again this is in my humble
opinion :)

so the whole round robin thing? let's focus on the main issue.

let's focus on the important things
1. how do we share data in the JNDI tree
2. how do we solve JNDI naming conflicts (ie two server nodes try to bind
different objects with the same name)
3. pinned vs. unpinned server objects (unpinned would be the goal, that the
remote stub would automatically reconnect to a different server node if the
main node fails) again, if you have full clustering on the server, the load
balancing router can reconnect you to a different node, without any client
logic, but this piece of hardware will not always be in place)
4. cluster management/communication
5. deployment management, does every node in a cluster have the same
deployment configuration, or will this be automatically replicated

Am I completely out in the blue? please let me know.

Filip


~
Namaste - I bow to the divine in you
~
Filip Hanik
Software Architect
[EMAIL PROTECTED]
www.filip.net

 -Original Message-
 From: [EMAIL PROTECTED]
 [mailto:[EMAIL PROTECTED]]On Behalf Of Stefan Siprell
 Sent: Wednesday, March 07, 2001 8:26 AM
 To: 'JBoss-Dev'
 Subject: AW: [jBoss-Dev] CL: Clustering, let's get started


 to put a tie around all of my complaining, I would also volunteer
 to create
 a dcoument describing the main ideas and concepts:
 -Round Robin (kind of low, but the one that would create working versions
 the fastest)
 -Bean-level Request Dispatching
 -CORBA infrastructure
 -and maybe JINI and SPACES (my little idea)

 Might be easier to discuss (if required at all) the future path.

 -Ursprungliche Nachricht-
 Von: [EMAIL PROTECTED]
 [mailto:[EMAIL PROTECTED]]Im Auftrag von Peter F. Spicer
 Gesendet: Mittwoch, 7. Marz 2001 16:39
 An: JBoss-Dev
 Betreff: RE: [jBoss-Dev] CL: Clustering, let's get started


 Lots of good feedback on the Clustering issue.  Anybody thought about
 putting together a requirements document that captures these ideas and
 defines "The Path" for the effort?  Does not have to be fancy - I would
 volunteer but don't have the chops (domain expertise).


 -Original Message-
 From: [EMAIL PROTECTED]
 [mailto:[EMAIL PROTECTED]]On Behalf Of Micheal J
 Sent: Wednesday, March 07, 2001 6:41 AM
 To: JBoss-Dev
 Subject: RE: [jBoss-Dev] CL: Clustering, let's get started




  -Original Message-
  From: [EMAIL PROTECTED]
  [mailto:[EMAIL PROTECTED]]On Behalf Of Jeremy Boynes
  Sent: 07 March 2001 06:35
  To: [EMAIL PROTECTED]
  Subject: RE: [jBoss-Dev] CL: Clustering, let's get started
 
 
  Tom's question was really about approach rather than solutions
 and you did
  ask for views... You might choose a "simple" scenario such as pure SSBs
  first, but I tend to agree with Tom that you should consider the core
  building blocks (e.g. DTM, cluster membership, resource location, state
  replication, and many more) whilst doing so as in reality none of the
  scenarios are actually that simple.
 
 
  As for applicability of a DTM, one of the goals of a cluster is location
  transparency (at least to the application). So consider a
 cluster with two
  nodes, 1  2, and two SSBs A  B; SSB A calls a method on SSB
 B; SSB A is
  deployed to node 1, SSB B to node 2.

 My definition of application server clustering does not allow a
 situation as
 you just described Jeremy. The beans (actually the application) would be
 deployed to the "cluster" and not to any particular node (or nodes) in a
 cluster. On an implemenatation level, I would still expect all
 nodes to host
 all applications once deployed. This removes the possibility of any
 application being unavailable even though a cluster is atill active. This
 could happen if either node 1 or node 2 failed in your example.

 Also I believe we need to think about the jBoss clustering effort in the
 wider context of clustering complete J2EE applications. Perhaps I
 am missing
 something here but shouldn't think about how a cluster-capable
 jBoss affects
 jBoss-Tomcat and/or jBoss-Jetty and other such (aggregated) J2EE stacks?.

 My Use Cases for a "JBoss Cluster User" includes :
 - Cluster Management: define/change the set of nodes (JBoss only or
 JBoss_+_Tomact/Jetty/etc) that belong together as a cluster
 - Application Deployment: deploy a JAR, WAR, EAR e.t.c o

RE: [jBoss-Dev] CL: Clustering, let's get started

2001-03-07 Thread Sacha Labourey

Hello,

 ok, let me raise my voice :)
 the emails around clustering seem to focus a lot on loadbalancing as the
 primary reason to cluster servers.
 well, imho it is not.
 there is only one reason you would cluster servers, fail-over and high
 availability.

"only one reason" is probably a bit strong... It depends of your business:
you may need high availability or/and you may need very high throughput
while keeping the cluster state consistent without worring much about lost
clients when a server dies.

 if you want to do loadbalancing, you have much better performance using
 non-clustered servers and a stateful loadbalancer.
 as a matter of fact, you can buy a load balancing router for a couple of
 thousand bucks, so why try to replicate functionality that is
 already done.
 even with weblogic, if you are serious about loadbalancing
 because you have
 so much traffic, you do it the hardware way. again this is in
 my humble
 opinion :)

Yes sure, if you are serious about fail-over, you buy a 1M$ TPM with a Sun
Enterprise 1 ;), SAN replicated datastore, Oracle DB cluster, ... ;)

I think we need to focus on both aspects without imposing that 99% of JBoss
user only want fail-over. It is not because some other products also offer
this feature that we should not provide it! (Furthermore, I hadn't the
feeling that we were only speaking about LB.)

But I agree, load-balancing without HA is not very functionaly interesting
whereas HA without load-balancing is a bit "unfinished work".

 so the whole round robin thing? let's focus on the main issue.

focus status=ON target=MAIN_ISSUE

 let's focus on the important things

focus status=ON target=IMPORTANT_THINGS


 1. how do we share data in the JNDI tree

I was suggesting to use a standard CORBA NS and extend it to be able to
share the same binding name more than once.

= The container knows the extended IDL and is able to register it
correctly.
= When a client asks to resolve a name, the NS build a multi-profile IOR
(here comes the HA) thanks to a particular algorith. The algo could be :"
put the profiles from the least loaded server first" or whatever plugged
algorithm is selected.

We may use the JavaGroups framework to replicate the different instances of
extended NS and thus insure that all NS can receive Read and Write
invocations while staying consistent.

For the egg and chicken problem... we need to be able to give to the client
the complete list of NS which are available if one fails : either with an
multi-profil IOR (beurk) or with any other bootstraping system (don't have
enough info at the moment)

 2. how do we solve JNDI naming conflicts (ie two server nodes try to bind
 different objects with the same name)

conflicts would be at the heart of the system! ;)

 3. pinned vs. unpinned server objects (unpinned would be the
 goal, that the
 remote stub would automatically reconnect to a different server
 node if the
 main node fails) again, if you have full clustering on the
 server, the load
 balancing router can reconnect you to a different node, without any client
 logic, but this piece of hardware will not always be in place)

I think we need to develop an hardware-less solution as much as possible.

For the stub, this would work for Java client but with standard CORBA
client, it wouldn't = multi-profile IOR idea.

 4. cluster management/communication

base on JavaGroups? no real idea at the moment...

 5. deployment management, does every node in a cluster have the same
 deployment configuration, or will this be automatically replicated

I suggested to be able to choose, in the cluster, to which node an
application is deployed (subset)

/focus
/focus

 Am I completely out in the blue? please let me know.

No or we are two ;)

Cheers,



Sacha





RE: [jBoss-Dev] CL: Clustering, let's get started

2001-03-07 Thread Filip Hanik

 Maybe you are addressing Marc's concern about finding a small enough bite?
 Clustering focused on fail-over first, then load-balancing?

I believe so, thanks for you humble respons, having a rough day, hope I
didn't bitch too much :)

Filip

~
Namaste - I bow to the divine in you
~
Filip Hanik
Software Architect
[EMAIL PROTECTED]
www.filip.net





Re: [jBoss-Dev] CL: Clustering, let's get started

2001-03-07 Thread Tom Coleman


Filip wrote:
 
  if you want to do loadbalancing, you have much better performance using
  non-clustered servers and a stateful loadbalancer.
  as a matter of fact, you can buy a load balancing router for a couple of
  thousand bucks, so why try to replicate functionality that is
  already done.
  even with weblogic, if you are serious about loadbalancing
  because you have
  so much traffic, you do it the hardware way. again this is in
  my humble
  opinion :)
 

Sasha wrote:
 
 I think we need to develop an hardware-less solution as much as possible.
 

My $.02

Contributed in the spirit of:

"Are we sure we have a problem, and are we sure it hasn't already been "fixed"?

A few weeks ago, Marc posted a message about the "Sys Admin" culture and
how important it is to understand these guys if you're marketing to them.

I just toured the hardware room of a fairly large Texas company developing
large-scale internet applications.  I know they're familiar with WL - they 
might even be using it.

The place was stacked with Sun "pizza boxes", larger servers, and a rack full 
of (vendor name deleted - they're much too big and overpriced) guess what...
load balancing routers.

It's what these guys understand.  If it "breaks", they replace the box.

Tom





RE: [jBoss-Dev] CL: Clustering, let's get started

2001-03-07 Thread Tom Cook

Cool.  I haven't really the first idea where to start on it, but I do have
time now, so I'll start looking into DTMs.. anyone else out there looking?

Tom

On Wed, 7 Mar 2001, marc fleury wrote:

 Ok, time to be more precise...
 
 Assume a client talking directly to the bean, and load balance SSB.  When
 THAT is done we will get B2B calls that need DTM. XP methodology. Don't
 stop.
 
 We know all that :) YES trivially if you deploy to n nodes, and you do
 nothing about "keep beans of an app in one node" and you do B2B, then you
 need a DTM.
 
 In clear I specifically want to avoid what mr cook is talking about. 10k
 feet "approach" talk. We need this and that oh but first bla bla.. XP!
 
 If DTM is your thing then please work on it since we will need it at the
 end. But in terms of approach I want to think of SSB direct clustering :)
 
 
 marc
 
 |-Original Message-
 |From: [EMAIL PROTECTED]
 |[mailto:[EMAIL PROTECTED]]On Behalf Of Jeremy Boynes
 |Sent: Wednesday, March 07, 2001 1:35 AM
 |To: [EMAIL PROTECTED]
 |Subject: RE: [jBoss-Dev] CL: Clustering, let's get started
 |
 |
 |Tom's question was really about approach rather than solutions and you did
 |ask for views... You might choose a "simple" scenario such as pure SSBs
 |first, but I tend to agree with Tom that you should consider the core
 |building blocks (e.g. DTM, cluster membership, resource location, state
 |replication, and many more) whilst doing so as in reality none of the
 |scenarios are actually that simple.
 |
 |
 |As for applicability of a DTM, one of the goals of a cluster is location
 |transparency (at least to the application). So consider a cluster with two
 |nodes, 1  2, and two SSBs A  B; SSB A calls a method on SSB B; SSB A is
 |deployed to node 1, SSB B to node 2.
 |
 |So if a client invokes SSB A, it is directed by availability to node 1. SSB
 |A calls SSB B and is directed by availability to node 2. You now have more
 |than one node involved which requires a distributed transaction.
 |
 |Now make it more complex, deploy SSB A on both node 1 and node 2 so the
 |client could be load balanced to either node. If it goes to node 1 then you
 |have a distributed transaction as above whereas if it is directed to node 2
 |then the transaction is local to node 2.
 |
 |Take it further and deploy both beans on both nodes. The client can get
 |load-balanced to either node; in theory so could the inter-bean
 |call but due
 |to the overhead of a remote call + DTM you would prefer it was directed to
 |the local machine.
 |
 |However, suppose SSB B becomes temporarily unavailable on one node for some
 |reason; availability would require that the inter-bean call is now directed
 |to the surviving node. The determination of which node will service the
 |request is dynamic, based on availability, and as a result so is the
 |determination of whether the transaction is local or distributed.
 |
 |If you plan to support scenarios beyond the most basic, you *will* need a
 |DTM so design it in early.
 |
 |Jeremy
 |
 |-Original Message-
 |From: [EMAIL PROTECTED]
 |[mailto:[EMAIL PROTECTED]]On Behalf Of marc fleury
 |Sent: Tuesday, March 06, 2001 7:18 PM
 |To: JBoss-Dev
 |Subject: RE: [jBoss-Dev] CL: Clustering, let's get started
 |
 |
 |what does a dtm have to do with Stateless session bean load balancing and
 |high availability
 |
 |?
 |
 |marc
 |
 |
 
 
 

-- 
"If you mess with something for long enough it will break." - Schmidt





Re: [jBoss-Dev] CL: Clustering, let's get started

2001-03-06 Thread Tom Cook

Hmmm, game...

Would it be better to do it piecemeal like this, developing a bit at a
time, or to implement the underlying infrastructure first (like a
distributed transaction manager)?

Tom

On Tue, 6 Mar 2001, marc fleury wrote:

 Ok, it's been promised, it's been discussed, it has already started,  it is
 really wanted.
 
 Also it will put JBoss on the map for ever...
 
 The clustering.
 
 I would like to "officially" call the season for clustering "open".
 
 There have been some discussions already some public some private and I
 believe we should really take this take by step.  So we won't shoot for the
 stars in the very beginning, just something simple.
 
 I will assume the interim leadership for the implementation since there is
 no clear lead yet and the team is yet to form.  I invite all of you that
 have touched the subject to publicly post and explain your view.
 
 STEP ONE:
 -Start 2 servers do "round robin" on STATELESS SESSION.
 
 Simple right? That will be some work
 
 go!
 
 marc
 
 _
 Marc Fleury, Ph.D
 [EMAIL PROTECTED]
 _
 
 
 

-- 
"If you mess with something for long enough it will break." - Schmidt





RE: [jBoss-Dev] CL: Clustering, let's get started

2001-03-06 Thread marc fleury

what does a dtm have to do with Stateless session bean load balancing and
high availability

?

marc


|-Original Message-
|From: [EMAIL PROTECTED]
|[mailto:[EMAIL PROTECTED]]On Behalf Of Tom Cook
|Sent: Tuesday, March 06, 2001 8:16 PM
|To: JBoss-Dev
|Subject: Re: [jBoss-Dev] CL: Clustering, let's get started
|
|
|Hmmm, game...
|
|Would it be better to do it piecemeal like this, developing a bit at a
|time, or to implement the underlying infrastructure first (like a
|distributed transaction manager)?
|
|Tom
|
|On Tue, 6 Mar 2001, marc fleury wrote:
|
| Ok, it's been promised, it's been discussed, it has already
|started,  it is
| really wanted.
|
| Also it will put JBoss on the map for ever...
|
| The clustering.
|
| I would like to "officially" call the season for clustering "open".
|
| There have been some discussions already some public some private and I
| believe we should really take this take by step.  So we won't
|shoot for the
| stars in the very beginning, just something simple.
|
| I will assume the interim leadership for the implementation
|since there is
| no clear lead yet and the team is yet to form.  I invite all of you that
| have touched the subject to publicly post and explain your view.
|
| STEP ONE:
| -Start 2 servers do "round robin" on STATELESS SESSION.
|
| Simple right? That will be some work
|
| go!
|
| marc
|
| _
| Marc Fleury, Ph.D
| [EMAIL PROTECTED]
| _
|
|
|
|
|--
|"If you mess with something for long enough it will break." - Schmidt
|
|





RE: [jBoss-Dev] CL: Clustering, let's get started

2001-03-06 Thread Jeremy Boynes

Tom's question was really about approach rather than solutions and you did
ask for views... You might choose a "simple" scenario such as pure SSBs
first, but I tend to agree with Tom that you should consider the core
building blocks (e.g. DTM, cluster membership, resource location, state
replication, and many more) whilst doing so as in reality none of the
scenarios are actually that simple.


As for applicability of a DTM, one of the goals of a cluster is location
transparency (at least to the application). So consider a cluster with two
nodes, 1  2, and two SSBs A  B; SSB A calls a method on SSB B; SSB A is
deployed to node 1, SSB B to node 2.

So if a client invokes SSB A, it is directed by availability to node 1. SSB
A calls SSB B and is directed by availability to node 2. You now have more
than one node involved which requires a distributed transaction.

Now make it more complex, deploy SSB A on both node 1 and node 2 so the
client could be load balanced to either node. If it goes to node 1 then you
have a distributed transaction as above whereas if it is directed to node 2
then the transaction is local to node 2.

Take it further and deploy both beans on both nodes. The client can get
load-balanced to either node; in theory so could the inter-bean call but due
to the overhead of a remote call + DTM you would prefer it was directed to
the local machine.

However, suppose SSB B becomes temporarily unavailable on one node for some
reason; availability would require that the inter-bean call is now directed
to the surviving node. The determination of which node will service the
request is dynamic, based on availability, and as a result so is the
determination of whether the transaction is local or distributed.

If you plan to support scenarios beyond the most basic, you *will* need a
DTM so design it in early.

Jeremy

-Original Message-
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED]]On Behalf Of marc fleury
Sent: Tuesday, March 06, 2001 7:18 PM
To: JBoss-Dev
Subject: RE: [jBoss-Dev] CL: Clustering, let's get started


what does a dtm have to do with Stateless session bean load balancing and
high availability

?

marc