Melhore a escalabilidade com o serviço SessionCache

06/Jun/2014
PDF (365 KB)
 
Abelard Chow 的照片

Abelard Chow

Advisory Software Developer

Siga-me no Google+

Photo of Paul Chen

Paul Chen

Senior Software Developer

Siga-me no Google+

Photo of Brian Martin

Brian Martin

Distinguished Engineer, Websphere XS/DataPower XC10 Chief Architect

 

Acesse IBM Bluemix
Esta plataforma em nuvem é abastecida com serviços gratuitos, tempos de execução, e infra-estrutura para ajudá-lo a criar e implantar rapidamente o seu próximo ou aplicativo móvel ou na web.

Como arquitetos de software, sabemos que o armazenamento em cluster e o balanceamento de carga são tópicos importantes em aplicativos corporativos. No entanto, muitas vezes não temos os recursos para projetá-los e implementá-los. É necessária uma estrutura de persistência de sessão bem projetada para obter desempenho e escalabilidade.

Felizmente, é possível usar o serviço de SessionCache disponível por meio do IBM Bluemix™ para ajudar na escalabilidade e no gerenciamento de desempenho. Este artigo mostra como desenvolver e implementar um aplicativo que usa o serviço de SessionCache.

O Bluemix e o serviço de SessionCache permitem alterar a escala do aplicativo corporativo facilmente.

Prefácio: sessão de HTTP e persistência de sessão

 

HTTP é uma das mais antigas tecnologias de Internet. As sessões de HTTP permitem que informações persistam entre várias solicitações de HTTP. As informações, também conhecidas como dados da sessão, são armazenadas na memória física de uma máquina, o que é bom quando um aplicativo é pequeno e serve apenas a alguns usuários. No entanto, para aplicativos corporativos que envolvem vários servidores e sistemas de computador, os dados da sessão podem ser compartilhados entre várias máquinas para balanceamento de carga, armazenamento em cluster, failover e outros cenários de uso de escalabilidade. Neste caso, manter os dados da sessão na memória de uma única máquina não é bom o suficiente.

Persistência de sessão significa armazenar os dados da sessão em um sistema de arquivos para compartilhá-los entre várias máquinas. Geralmente, um banco de dados é usado para armazenar dados de sessão acessados por vários servidores, mas um único servidor de banco de dados que serve vários servidores da web provoca um gargalo no sistema. Para obter melhores resultados, é possível usar vários servidores de banco de dados, mas a frequência de replicação de dados entre os servidores de banco de dados torna-se, então, um desafio. A replicação muito frequente leva à interrupção dos recursos do sistema, enquanto a replicação menos frequente pode causar problemas de integração de dados. Felizmente, o IBM SessionCache Service pode ajudar.

O SessionCache Service permite que os dados de sessão sejam armazenados em uma grade de objeto, de modo que os aplicativos corporativos façam ajuste de escala com melhor desempenho e sem qualquer um dos vários problemas de servidor de banco de dados mencionados anteriormente.

Na Idade da Pedra, os desenvolvedores de aplicativos implementaram persistência de sessão. Hoje, como a persistência de sessão é tão comum, a maioria dos servidores de aplicativos permite a seleção de um destino de persistência usando as configurações de servidor. Os desenvolvedores de aplicativos apenas interagem com APIs de sessão de HTTP; as configurações do servidor determinam se deve-se persistir e qual tecnologia a ser usada para a persistência.

Parte 1: Implementar e executar o aplicativo de exemplo

 

Antes de implementar o aplicativo em Bluemix, você deve fazer o registro. Acesse Bluemix e clique em LOGIN. Siga as instruções para registrar ou gerenciar sua conta, em seguida:

  1. Instalar o cliente do Cloud Foundry. Crie uma pasta em seu ambiente — , por exemplo, myWS. Faça o download do comando cf v6 na pasta que você criou. Execute o arquivo transferido por download e siga as instruções para instalar o cliente Cloud Foundry na mesma pasta.
  2. Crie uma pasta na pasta Cloud Foundry, — por exemplo, "amostras".
  3. Faça o download do arquivo sessionCacheSample.war no IBM DevOps Services e salve-o na pasta que você acabou de criar. Observação: Este aplicativo de amostra requer um serviço de SessionCache chamado scsSampleSessionServiceDWDemo001. Se você acha que esse nome pode resultar em um conflito, consulte "Incluir a configuração do servidor" em Desenvolver um aplicativo de amostra na Parte 2 para ligar o aplicativo a um serviço com um nome diferente.
  4. Implementar o arquivo WAR ao Bluemix.
    1. No prompt de comandos, altere os diretórios para a pasta de amostras recém-criada. Use o comando cf api https://api.ng.bluemix.net para se conectar ao Bluemix.
    2. Efetue login no Bluemix usando o cf login e siga os prompts.
    3. Agora, use cf push <app name> -p sessionCacheSample.war para implementar o arquivo WAR, em que <app name> é um nome de aplicativo exclusivo. Você verá mensagens semelhantes quando o comando push for executado com sucesso e o aplicativo for executado. Push successfully
    4. Crie uma instância de serviço SessionCache para o aplicativo. Use o cf create-service SessionCache free <service instance name> para criar a instância do serviço, em que free é o nome do plano de serviço e <service instance name> é o nome exclusivo para a instância de serviço. Usamos scsSampleSessionServiceDWDemo001 como o nome da instância de serviço para corresponder à configuração do servidor xml.
    5. Com o aplicativo implementado e a instância de serviço disponível, una-os com cf bind-service <app name in Step c> <service instance name in Step d>.
    6. Depois de a ligação ser feita, ele solicita que você realize o push do aplicativo novamente. Execute o comando na Etapa C novamente. Para mais informações, consulte Instalando a ferramenta cf.
  5. Teste o aplicativo de exemplo. Efetue login no Bluemix. Você deverá ver seu aplicativo de amostra implementado no painel. Clique no link no meio do ícone do aplicativo para acessar o aplicativo e verificar os logs de erros. Tente recuperar os dados da sessão usando o botão Retrieve Session Data .
  6. Verifique o status do serviço e o uso do espaço. Após recuperar os dados da sessão, volte para o painel do Bluemix. No painel de navegação, clique em Apps e selecione o aplicativo de amostra implementado. Na seção Services, clique no link no meio do serviço para abrir a página Service Status. Confira Space Used, Throughput e mais.
  7. Como opção: Remova o aplicativo de exemplo e o serviço. No Bluemix, clique em Dashboard na parte superior da página. Clique no ícone de configuração no canto superior direito da caixa de aplicativo e selecione Stop App. Clique no ícone de configuração no canto superior direito da sua caixa de aplicativo e selecione Delete App. Na janela, marque as caixas do seu aplicativo e serviço na guia SERVICES e na guia ROUTES. Clique em OK para excluir o aplicativo de exemplo e serviço.

Parte 2: Configure o ambiente e desenvolva o seu próprio aplicativo de amostra

 

Antes de iniciar

 

Para desenvolver o aplicativo neste artigo:

O código-fonte do aplicativo de amostra está disponível por meio do IBM DevOps Services. Para carregar o código de amostra e entender o que ele faz, siga as etapas a seguir.

Etapa 1. Configure o ambiente

 

Para desenvolver um aplicativo que usa o serviço SessionCache, é necessário configurar o ambiente adequado. Você deve instalar o cliente Cloud Foundry para implementar o aplicativo SessionCache no ambiente de nuvem IBM. Para o desenvolvimento, você precisará instalar o WebSphere® Application Server Liberty Profile e o WebSphere eXtreme Scale. Você já deve ter o IDE Eclipse instalado.

  1. Instalar o cliente do Cloud Foundry. Crie uma pasta em seu ambiente — , por exemplo, myWS. Faça o download do comando cf v6 na pasta que você criou. Execute o arquivo transferido por download e siga as instruções para instalar o cliente Cloud Foundry na mesma pasta.
  2. Instale o Liberty Profile. Faça o download do WebSphere Application Server Liberty Profile na pasta que você criou (por exemplo, myWS). Siga as instruções para instalar o Liberty Profile na mesma pasta. Se for solicitado um local de instalação, pressione Enter para aceitar o padrão.
  3. Instale o WebSphere Extreme Scale. Faça o download do WebSphere eXtreme Scale for Developers Liberty Profile na pasta que você criou. Siga as instruções para instalar o WebSphere eXtreme Scale na mesma pasta. Se for solicitado o local de instalação, pressione Enter para aceitar o padrão. Após a instalação, a estrutura da pasta fica assim: Screen capture shows the folder structure after installationObservação: O wxs está na pasta wlp.

Etapa 2. Desenvolver um aplicativo de amostra

 

Depois de concluir a configuração do ambiente, é possível iniciar a construção de um aplicativo SessionCache. Existem dois métodos para desenvolver aplicativos que são executados no Bluemix:

  • Um aplicativo que é implementado como um arquivo WAR independente
  • Um aplicativo que é implementado por meio de um padrão Liberty

Neste artigo, descrevemos a construção de um aplicativo SessionCache que é implementado como um arquivo WAR independente. Para obter mais informações sobre a construção de um aplicativo que é implementado por meio do padrão Liberty, consulte "Ligando uma instância de serviço do DataCache aos Aplicativos Liberty."

O código-fonte do aplicativo de amostra está disponível por meio do IBM DevOps Services.

Para desenvolver um aplicativo que é implementado como um arquivo WAR independente:

  1. Incluir bibliotecas. É necessário incluir uma classe de bibliotecas ao projeto: biblioteca Servlet 3.0. Para incluir a biblioteca Servlet 3.0, clique com o botão direito do mouse no projeto e selecione Properties para abrir a janela de propriedades. Selecione Java Build Path e vá para a guia Libraries. Clique em Add External JARs, navegue até o diretório myWS/wlp/dev/api/ spec e selecione o arquivo com.ibm.ws.javaee.servlet.3.0_1.0.1.jar . Adding Servlet 3.0 library
  2. O código a seguir fornece a opção de solicitar os dados da sessão:
    private String getSessionData(HttpSession session) {    	
        	
           String response = "<H2>Information on your session:</H2>\n" +
            		"<TABLE BORDER=1>\n" +
            		"<TR> <TH>Info Type</TH> <TH>Value</TH> </TR>\n" +
         			"<TR> <TD>ID</TD> <TD>" + session.getId() + "</TD> </TR>\n" +
            		"<TR> <TD>isNew</TD> <TD>" + session.isNew() +  "</TD> </TR>\n" +
         			"<TR> <TD>Creation time</TD> <TD>" + new
    Date(session.getCreationTime()) + "</TD> </TR>\n" +
            		"<TR>	<TD>Time of Last Access</TD> <TD>" + new 
    Date(session.getLastAccessedTime()) + "</TD> </TR>\n" +
            		"<TR>	<TD>Max Inactive Interval</TD> <TD>" + 
    session.getMaxInactiveInterval() + "</TD> </TR>\n" +
            		"<TR>	<TD>Number of Previous Accesses</TD><TD><B>" + 
    session.getAttribute(attr_accessCount) + "</B></TD> </TR>\n" +
            		"</TABLE>\n";
            
         return response;
           }

    Quando getId() e isNew() das APIs de sessão de HTTP forem chamadas, o servidor de aplicativos recuperará dados de sessão persistentes usando a tecnologia especificada — neste caso, o serviço SessionCache, com base nas configurações do servidor xml.
  3. O código a seguir fornece a opção para invalidar a sessão:
    	private String invalidateSession(HttpSession session) {
        	
        	  session.invalidate();
        	
            String response = "<h2>" + "Session invalidated. Please visit again!" + "</h2>\n";
            return response;
        	}

    Quando invalidate() das APIs de sessão de HTTP é chamada, o servidor de aplicativos remove dados de sessão persistentes usando a tecnologia especificada — neste caso, o serviço SessionCache, com base nas configurações do xml do servidor.
  4. A linha a seguir no método doGet() permite criar ou recuperar a sessão:
            HttpSession session = request.getSession(true);

    Em segundo plano, o servidor de aplicativos realizará a persistência de sessão para criar ou recuperar dados da sessão usando o serviço IBM SessionCache. Para mais informações sobre como configurar um servidor de aplicativos para usar o serviço SessionCache, consulte as instruções relacionadas ao xml do servidor mais adiante neste artigo.
  5. O código a seguir determina se esta é a primeira vez que a sessão está sendo acessada:
            String heading = ""; 
       IntWrapper accessCount = (IntWrapper) session.getAttribute(attr_accessCount);        
       if (accessCount == null) { 
                accessCount = new IntWrapper(0); 
                heading = "Welcome, Newcomer."; 
          } else { 
                heading = "Welcome back."; 
                accessCount.incrementValue(); 
          } 
          session.setAttribute(attr_accessCount, accessCount);

    Quando getAttribute() e setAttribute() das APIs de sessão de HTTP são chamadas, o servidor de aplicativos realiza a persistência de sessão usando a tecnologia especificada — neste caso, o serviço SessionCache, com base nas configurações do xml do servidor.
  6. Inclua a configuração do servidor. Após concluir a implementação do aplicativo SessionCache, é necessário configurar o aplicativo para usar o serviço SessionCache no Bluemix. A configuração está em um arquivo chamado server.xml, na pasta WebContent (.../ SessionCacheServiceSample/WebContent).

    Observação: Ele usa um serviço SessionCache chamado scsSampleSessionServiceDWDemo001, que é criado no momento da implementação. Use um nome de serviço exclusivo para o aplicativo. Além disso, recomendamos configurar o atributo idReuse para true na tag httpSession .

    <server description="Session Cache Service Sample">
    
        <featureManager>
            <feature>webProfile-6.0</feature>       
            <feature>eXtremeScale.webapp-1.1</feature>
            <feature>icap:appstate-1.0</feature>
        </featureManager>
    
        <xsWebApp id="mysession" 
            objectGridName="${cloud.services.scsSampleSessionServiceDWDemo001.
    connection.gridName}" 
            objectGridType="REMOTE" 
            catalogHostPort="${cloud.services.scsSampleSessionServiceDWDemo001.
    connection.catalogEndPoint}"
            securityEnabled="true"
    
    credentialGeneratorClass="com.ibm.websphere.objectgrid.security.plugins.builtins
    .UserPasswordCredentialGenerator" 
            credentialGeneratorProps="${cloud.services.scsSampleSessionServiceDWDemo001.
    connection.username}${cloud.services.scsSampleSessionServiceDWDemo001.connection.
    password}" />
    
        <httpSession idReuse="true" />
    				
        <application name="sessionCacheSample" context-root="/" location=
    "../../../../../" type="war"/>
    	
    </server>

Conclusão

 

Neste artigo, mostramos como desenvolver e implementar um aplicativo que usa o serviço SessionCache no Bluemix. Esperamos que você considere fácil usar o serviço SessionCache e que ele ajude-o a melhorar a escalabilidade e o desempenho — e quem não quer isso?


Temas relacionados:serviço SessionCacheWebSphere eXtreme Scale TrialEscalabilidade

Incluir um comentário

Observação: elementos HTML não são suportados nos comentários.


1000 caracteres restantes

developerWorks: Conecte-se

Los campos obligatorios están marcados con un asterisco (*).


Precisa de um ID IBM?
Esqueceu seu ID IBM?


Esqueceu sua senha?
Alterar sua senha

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


A primeira vez que você entrar no developerWorks, um perfil é criado para você. Informações no seu perfil (seu nome, país / região, e nome da empresa) é apresentado ao público e vai acompanhar qualquer conteúdo que você postar, a menos que você opte por esconder o nome da empresa. Você pode atualizar sua conta IBM a qualquer momento.

Todas as informações enviadas são seguras.

Elija su nombre para mostrar



Ao se conectar ao developerWorks pela primeira vez, é criado um perfil para você e é necessário selecionar um nome de exibição. O nome de exibição acompanhará o conteúdo que você postar no developerWorks.

Escolha um nome de exibição de 3 - 31 caracteres. Seu nome de exibição deve ser exclusivo na comunidade do developerWorks e não deve ser o seu endereço de email por motivo de privacidade.

Los campos obligatorios están marcados con un asterisco (*).

(Escolha um nome de exibição de 3 - 31 caracteres.)

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


Todas as informações enviadas são seguras.

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=80
Zone=Cloud computing, WebSphere
ArticleID=975644
ArticleTitle=Melhore a escalabilidade com o serviço SessionCache
publish-date=06062014