Today's real-time enterprise solutions often deploy a messaging middleware that enables communication between various sub-components. This middleware is entrusted with important data that should be delivered reliably and as fast as possible to the recipient application. The middleware server might also be required to store this data in its data store until it is picked up.
A failure of this middleware message bus might bring the entire system down within seconds. Hence, it is absolutely imperative for the messaging backbone to provide its backup, which allows messaging operations to resume quickly in the event of a failure of the running server. This backup server should restore the state prior to failure of the original message server. Any data that was stored previously in the server's data store should be accessible through this backup server and most importantly this operation of shifting from one server to its backup should be automatic and transparent to the client application.
1.1 Known HA implementations / solutions
To enable any HA implementation one need to provide certain guarantees. In case active server is down, second server need to take all the existing connections and undelivered messages must be delivered. To achieve this task, the state information of servers must be exchanged between the two servers and database used by servers must be consistent. In order to make database consistent there are two methods one can use. First one is replicated database, where both servers has their own copy of database but on any changes to active server's database those changes are propagated to passive server's database. In this way consistency of these two servers is maintained. In the second implementation one can use a common shared database for both the servers. In this case only the active server makes changes to the common database. As this database is also available to passive server on failure of active server (say primary), when passive server (say secondary) takes over, it has all the changes made by Primary server.