Hi,
Having in mind all the issues behind the idea of sharing backends
among controllers, I guess the solution that best fits our needs is
something like the “Flood Alert System” one. One difference, however,
is that, in our system, there will be many more clients than
controllers/backends; in such scenario, each client would choose a
particular controller according to some load balance technique and
would stick to it till the end of its work.
In this case, we can see that the current Sequoia load balance system
is completely misused, whereas there would be the need for a similar
system at the driver’s level. If we go further, we realize that the
whole controller is debased as it doesn’t perform anymore most of its
useful functionality (like managing different replication models).
Another caveat of this arrangement is that each controller/backend
would have its own recovery log, which sounds a bit excessive to me.
Well… We are seriously considering the possibility of implementing
what I would call a LPAE Sequoia, which main feature is to work with
only two tiers instead of three. The main consequences that arise from
this architecture are:
a) a great deal of code would have to be migrated from the controller
level to the driver level,
b) there might be necessary to implement a two-phase-commit protocol
to maintain the multiple controllers synchronized with a single shared
recovery log.
Do you see any obvious flaws into these ideas ?
Actually the Sequoia driver probably implements already all the features
you need.
If you look at the load balancing capabilities of the driver described
at
http://sequoia.continuent.org/doc/infocenter/topic/org.continuent.sequoia.doc/html/Balancing_client_connections_to_controllers.html,
something like:
|jdbc:sequoia://controller1,controller2,controller3/myDB?preferredController=controller1,controller2|
will allow clients to first load balance on controller1 and controller2
(let's suppose they are local) and only switch to a remote controller3
if and only if controller1 and controller2 are down.
Sequoia drivers are also capable of transparent failover and can
seamlessly reconnect and pursue any in-flight transaction in case of a
controller failure. This way the application never see any failure
unless the entire system is unavailable.
Note that each controller maintains its own local copy of the recovery
log which allows to resynchronize with remote controllers.
Hope this clarifies things,
Emmanuel
--
Emmanuel Cecchet
Chief Scientific Officer, Continuent
Blog: http://emanux.blogspot.com/
Open source: http://www.continuent.org
Corporate: http://www.continuent.com
Skype: emmanuel_cecchet
Cell: +33 687 342 685
_______________________________________________
Sequoia mailing list
[EMAIL PROTECTED]
https://forge.continuent.org/mailman/listinfo/sequoia