Coppia di pensieri su questo (disclaimer: io lavoro per il cotto/EHCache ... in modo da tenere a mente ... ma ancora cercando di essere imparziale qui):
1 - C'è qualche dati ridondanti a ciascuna delle sessioni? Qualcosa che potrebbe essere condiviso attraverso le sessioni? Se sì, +1 per ehcache per archiviare le cose condivise (perché ehcache è ottimizzato per una concorrenza pesante)
2 - Quanto saranno grandi gli oggetti della sessione? E quanti utenti concorrenti ti aspetti su base stabile? (in altre parole, quanta memoria hai intenzione di dedicare allo storage di sessione sul tuo server delle app?)
Se l'ingombro della sessione non è così grande e può adattarsi bene all'heap senza problemi di GC, quindi utilizzare la sessione dovrebbe essere una soluzione eccellente.
Ma più grande diventa, più grande sarà il tuo heap java ... e più dovrai usare i trucchi voodoo per tenere sotto controllo i garbage collection e i tempi di pausa gc. Utilizzando ehcache, è possibile archiviare centralmente alcuni oggetti a cui possono accedere più sessioni ... consolidando quindi il footprint di memoria (stesso punto 1) Inoltre, utilizzando l'estensione aziendale per ehcache (BigMemory = http://terracotta.org/products/bigmemory), è possibile ignorare l'heap limitazioni e archiviare i dati off-heap (quanto necessario: 10, 100 o più GB). Con ciò, la dimensione degli oggetti che devono essere in memoria diventa irrilevante (purché sia possibile aggiungere RAM al server ovviamente)
3 - Per la replica di sessione, server di app come JBOSS, Weblogic, supporto Websphere esso. Di nuovo, si tratta ancora di dimensioni della sessione (quanti dati dovranno essere replicati attraverso il filo). Se gli oggetti di sessione sono grandi e ne hai molti, ci sarà molto traffico di rete nel tuo cluster ... potrebbe o non potrebbe funzionare bene. Avere gli oggetti di base in un layer EhCache distribuito ottimizzato per l'archiviazione dei dati, mantenendo al minimo la sessione (ovvero le informazioni di accesso/autenticazione) migliorerebbe sicuramente il meccanismo di replica della sessione secondo me.
Spero che questo aiuti.
Potete chiarire cosa intendete con "application server". È un server completo, ad es. JBoss, o può essere anche Tomcat? – davidcyp