Also, if state storage is needed, consider the possibility of reconstructing the state if failure occurs, instead of guranteeing state through replication. What this means is if you want to develop an application that stores data in HttpSession, instead of enabling distributed session to handle failover, try developing your application so that it checks if the attributes are present in session, if not recreate those attributes.
Application performance consideration - web layer
You should always use the Model-View-Controller architecture for developing web applications. The MVC pattern requires distinct separation of the view, controller and athe model. Using the MVC pattern enables optimization of the performacne and scalability of each layer separately If possible try creating statless application i.e. application which does not store any state on the server. If not try keeping the size of state data as well as time for which state data should be stored to minimum.