Wednesday, March 21, 2018

High-Availability Thanks to State Replication

Orbeon Forms has supported load balanced and failover configurations for a long time. This allows you to ensure that if a server fails, a user can still access her forms. But until now, users with active sessions could lose work [1] as form state was stored in memory on the failed server. Enabling the servlet container’s session replication wasn’t enough, as Orbeon Forms stores some information outside of the servlet session.

With Orbeon Forms 2017.2, we introduced replication. Replication provide high-availability of Orbeon Forms with as little disruption as possible to users currently filling out forms.

This works by replicating the in-memory state from one server to one or more other servers. If one server with an active form session fails, the load balancer can simply redirect the user to another server. Since the state has been replicated there, the session can continue operating.

This is transparent to the user, except that the first request just after the failure of a server might take a little bit more time to complete due to the load balancer redirection and the need to rebuild some data structures in memory on the new server. This is also the reason the load balancer still keeps a user assigned to a given server when possible.

Orbeon Forms achieves this replication by enabling the replication of servlet sessions and caches. All current state in memory, whether in the session or relevant caches, is replicated so that work can be resumed on other servers when needed.

The replication configuration includes:
  • a load balancer, such as HAProxy
  • two (or more) Orbeon Forms servers


The Orbeon Forms servers must be able to communicate with each other via IP multicast, which means that they must be on the same network, physical or virtual.

This does not include database replication, which must be configured, if necessary, at the database level. In a basic configuration, all the Orbeon Forms instances would talk to a central database.

For more information, see the documentation on replication.

We hope you will enjoy this new feature!

  1. Unless you use the autosave feature. But this feature only works for logged-in users.  ↩

No comments:

Post a Comment