Como você sabe, os aplicativos JSP têm o conceito de um objeto Session para lidar com várias solicitações HTTP. Isso ocorre porque o protocolo HTTP é sem estado e a Sessão é usada para manter o estado do usuário em várias solicitações HTTP.
Em uma configuração de servidor web único, não há problema, mas assim que você tiver um web farm com balanceamento de carga de vários servidores executando um aplicativo JSP, você imediatamente se deparará com o problema de onde manter a Sessão. Isso ocorre porque um balanceador de carga idealmente gosta de rotear cada solicitação HTTP para o servidor web mais apropriado. Mas, se a Sessão for mantida apenas em um servidor da Web, você será forçado a usar o recurso de sessão fixa do balanceador de carga, onde ele envia solicitações relacionadas a uma determinada Sessão apenas para o servidor da Web em que a Sessão reside.
Isso significa que um servidor da Web pode ficar sobrecarregado mesmo quando você tem outro servidor da Web ocioso porque a Sessão desse usuário reside nesse servidor da Web. Isso, obviamente, dificulta a escalabilidade. Além disso, manter o objeto Session apenas em um servidor web também significa perda de dados de sessão se esse servidor web ficar inativo por qualquer motivo.
Para evitar esse problema de perda de dados, você deve ter um mecanismo onde a Sessão seja replicada para mais de um servidor web. Aqui, os principais Servlet Engines (Tomcat, WebLogic, WebSphere e JBoss) fornecem alguma forma de persistência de sessão. Eles até incluem alguma forma de replicação de sessão, mas todos têm problemas. Por exemplo, persistência baseada em arquivo e JDBC são lentas e causam problemas de desempenho e escalabilidade. A replicação de sessão também é muito fraca porque replica todas as sessões para todos os servidores da Web, criando cópias desnecessárias da Sessão quando você tem mais de dois servidores da Web, embora a tolerância a falhas possa ser alcançada com apenas duas cópias.
Em tais situações, um cache distribuído Java como NCache é sua melhor aposta para garantir que a persistência da sessão em vários servidores no cluster da Web seja feita de maneira muito inteligente e sem prejudicar sua escalabilidade. NCache tem uma topologia de cache chamada “Partition-Replica” que não apenas oferece alta disponibilidade e failover por meio de replicação, mas também oferece grande armazenamento de sessão na memória por meio de particionamento de dados. O particionamento de dados permite armazenar em cache grandes quantidades de dados dividindo o cache em partições e armazenando cada partição em diferentes servidores de cache no cluster de cache.
NCache A topologia de réplica de partição replica os dados de sessão de cada nó para apenas um outro nó no cluster. Essa abordagem elimina as implicações de desempenho da replicação de dados de sessão em todos os nós do servidor sem comprometer a confiabilidade.
Além disso, a persistência de sessão fornecida pelos servidores web (Apache, Tomcat, Weblogic e WebSphere) utiliza o recurso e a memória do cluster web. Essa abordagem prejudica o desempenho do aplicativo porque os nós do cluster da Web responsáveis por processar a solicitação do cliente também estão lidando com o trabalho extra de replicação de sessão e seu armazenamento na memória. Considerando que você pode executar NCache em caixas separadas, em uma parte do seu cluster da web. Dessa forma, você pode liberar os recursos do cluster da web e o cluster da web pode usar esses recursos para lidar com mais e mais solicitações de clientes.
Para persistência de sessão JSP, NCache implementou um módulo de sessão NCacheSessionProvider como filtro Java. NCache O Filtro de Servlet JSP intercepta dinamicamente solicitações e respostas e trata a persistência da sessão nos bastidores. E você não precisa alterar nenhum código do aplicativo JSP.
Aqui está um exemplo NCache Configuração do Filtro de Servlet JSP que você precisa definir em seu descritor de implementação de aplicativo para usar NCache para persistência de sessão JSP:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<filter> <filter-name>NCacheSessionProvider</filter-name> <filter-class> com.alachisoft.ncache.web.sessionstate.NSessionStoreProvider </filter-class> </filter> <filter-mapping> <filter-name>NCacheSessionProvider</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <init-param> <param-name>cacheName</param-name> <param-value>PORCache</param-value> </init-param> <init-param> <param-name>configPath</param-name> <param-value>/usr/local/ncache/config/</param-value> </init-param> |
Conseqüentemente, NCache fornecem a você um mecanismo muito melhor para obter persistência de sessão no cluster da Web, juntamente com aumento de desempenho e escalabilidade.
Então, baixe um teste de 60 dias totalmente funcional do NCache Enterprise e experimente você mesmo.