5

Dado que JavaServer Faces es inherentemente con estado en el lado del servidor, ¿qué métodos se recomiendan para escalar horizontalmente una aplicación JSF 2.0?Escalado horizontal de la aplicación JSF 2.0

Si una aplicación se ejecuta varios servidores JSF, puedo imaginar los siguientes escenarios:

  1. Sesiones Sticky: enviar todas las peticiones que coinciden con un determinado período de sesiones en el mismo servidor.
    • Pregunta: ¿Qué tecnología se utiliza comúnmente para lograr esto?
    • Problema: servidor falla resulta en la pérdida de sesiones ... y parece por lo general como la arquitectura frágil, especialmente al inicio fresco (no tratando de escalar una aplicación existente)
  2. Estado de replicación (Sesión): replicar JSF estado en todos los servidores JSF en clúster
    • Pregunta: ¿Qué tecnología se utiliza comúnmente para lograr esto?
    • Problema: no escala. memoria total del clúster = memoria total en el servidor más pequeño
  3. Indique a JSF (mediante configuración) que almacene su estado en un recurso externo (por ejemplo, otro servidor que ejecuta una base de datos en memoria muy rápida), luego acceda a ese recurso desde Servidores JSF cuando se necesita el estado de la aplicación?
    • Pregunta: ¿Esto es posible?
  4. ¿Instalar JSF (vía configuración) para ser apátrida?
    • Pregunta: ¿Esto es posible?

[EDIT]

Actualizado en respuesta a la sugerencia de Sticky Sesiones

Respuesta

2

Este de Ravi se puede lograr mediante la configuración de su equilibrador de carga en el modo de sesión pegajosa.

Más info

De esta manera todas sus peticiones posteriores se envían al mismo servidor de aplicaciones.

+1

Gracias @Ravi, he actualizado mi pregunta en consecuencia. Pero, en mi opinión, esto es más una solución de curita que una solución arquitectónica. –

+0

Sí, si un nodo falla, entonces todas las sesiones en ese nodo se pierden. – Ravi

0

¿Qué ocurre con la replicación de sesión con semántica "buddy"?

Con un amigo, la memoria total se reduce a la mitad (cada servidor necesita mantener los datos de sesión de dos servidores), lo cual es mucho mejor que tener que almacenar los datos de todos y cada uno de los servidores.

La replicación de amigos también reduce la sobrecarga de ancho de banda.

2

He aquí una idea de Jelastic PaaS:

instancias de aplicación de par en marcha en los grupos 2-servidor, y aplicar la replicación sesión entre estos 2 casos el plazo de un clúster. Luego puede agregar tantos clústeres de 2 instancias como desee y cargar solicitudes de saldo entre clústeres, con cada sesión pegada al clúster del que se originó. Dentro del clúster, las solicitudes se pueden equilibrar de carga entre instancias.

De esta manera, hay cierto grado de seguridad contra fallas, ya que si una instancia en el clúster falla, la otra se hace cargo, con el mismo estado de sesión. Por otro lado, el impacto de la memoria no es tan grave como con la replicación completa.

En resumen, es la combinación de 1. y 2. de su pregunta. Por supuesto, puede haber más de 2 instancias en cada clúster, si la disponibilidad es de mayor preocupación.

Enlace a los documentos de Jelastic Levanté la idea de: http://jelastic.com/docs/session-replication.

Descargo de responsabilidad: Realmente no sé cómo configurar esto con JSF2, y no tengo afiliación con Jelastic. Me gustó la idea y pensé que podría ser útil.

Cuestiones relacionadas