21 Dec 05 11:55
I'm investigating possible solutions to the problem of adding failover and load balancing features to our project.
Telecom Application Server (TAS) is communicating with telecom gateway (TGW) using CORBA (Parlay). TAS sees TGW as single entity, and this cannot be changed. It uses address of TGW to obtain reference to some initial object, that is then used to obtain other objects and set callbacks etc. After initial phase TAS holds references to several permanent objects representing TGW services and TGW has their corresponding callback objects. Then telecom traffic starts to flow - for each call there is a separate object created on TGW, and passed to TAS. TAS creates corresponding callback objects and registers them with TGW. Each such object represents state of a single call. There can be many calls being handled at any time. During handling of the call there are methods invoked by TAS on call objects existing on TGW and callback invocations on TAS by TGW. When call handling terminates the object representing it is abandoned.
For performance and high availability reasons TGW is made of two physical nodes (two servers).
The problem is: what to put between TAS and TGW to make TAS see one logical TGW? It should balance the load incoming from TAS to TGW, and redirect all requests to the alive physical TGW node when the other one fails. At the same time, this little thing itself must not be a single point of failure.
I've done plenty of research on Google but haven't found any clear solution to that. I'm not experienced with CORBA, although I think I understand basics of its operation quite well. I've found that Orbix (http://www.iona.com
) has the features like failover and load balancing. Can it also deal correctly with stateful traffic (objects representing calls)? Or maybe there is other, simpler and/or cheaper solution? Can the problem be solved somehow without specialized tools, for example by writing a simple load balancer on our own and using standard IP failover tools (like FST-HA or LinuxHA)?
I feel a bit too unexperienced with CORBA to find a solution to this problem on my own and be sure that it will work, so I'll appreciate any help.
Thanks in advance