Given that JavaServer Faces is inherently stateful on the server side, what methods are recommended for horizontally scaling a JSF 2.0 application?
If an application runs multiple JSF servers, I can imagine the following scenarios:
- Sticky Sessions: send all requests matching a given session to the same server.
- Question: what technology is commonly used to achieve this?
- Problem: server failure results in lost sessions... and generally seems like fragile architecture, especially when starting fresh (not trying to scale an existing application)
- State (Session) Replication: replicate JSF state on all JSF servers in cluster
- Question: what technology is commonly used to achieve this?
- Problem: does not scale. total memory of cluster = total memory on smallest server
- Instruct JSF (via configuration) to store its state on an external resource (e.g. another server running a very fast in-memory database), then access that resource from the JSF servers when application state is needed?
- Question: is this possible?
- Instruct JSF (via configuration) to be stateless?
- Question: is this possible?
[EDIT]
Updated in response to Ravi s suggestion of Sticky Sessions