Enterprise applications need to be highly
available and scalable. In the past, this has required
“stateless” applications, which essentially require the
application to manage its state explicitly by storing it
in transactional resource managers. Despite
“stateful” applications being more natural and hence
easier to write and get correct, having the system
manage this state automatically has been considered
too difficult and too costly. The Phoenix/App system
showed how to manage state in stateful applications
transparently, by logging interactions between
components, guaranteeing “exactly once” execution of
the application. By introducing some minor
restrictions on Phoenix/App components, no logging
need be done for middle tier components, thus making
it easy to provide both availability and scalability.
Because there is no logging, the performance of failure
free application executions is excellent.