Além disso, será feito o deploy de uma aplicação Java que faz uso de sessão nesse ambiente distribuído a fim de verificar o funcionamento da replicação de sessão em um ambiente clusterizado.
Com a popularização da computação em nuvem, que tem como base abordagens de computação distribuída, o conhecimento do funcionamento de um cluster é muito importante para desenvolver aplicações distribuídas de sucesso.
A computação distribuída assumiu um papel muito importante como paradigma computacional para sistemas distribuídos. O aumento da prestação de serviços digitais em rede, a necessidade por mais poder de processamento, menor tempo de resposta, mais confiabilidade e o aumento do número de usuários são características que induziram e popularizaram a adoção de sistemas distribuídos, até mesmo em casos onde seu uso não se faz necessário, tamanha a popularização dessa arquitetura computacional.
A computação distribuída consiste em executar aplicações que cooperam entre si em máquinas distintas interligadas por uma rede de computadores, objetivando a melhoria do desempenho por meio de complexas infraestruturas computacionais.
Atingir o objetivo principal da computação distribuída implica o projeto de uma arquitetura específica para este fim. Geralmente complexas e bem elaboradas, as arquiteturas distribuídas envolvem muitos aspectos de hardware e software.
Em relação ao hardware, há preocupações sobre todos os dispositivos utilizados na abordagem, inclusive, e mais importante, sobre as características da rede, geralmente configuradas como clusters ou grids computacionais.
Cluster é um agrupamento físico de computadores considerando-se um pequeno limite geográfico. Podem ser formados por simples PCs conectados em rede que passam a atender às solicitações de terceiros como recursos computacionais.
Em um cluster, cada máquina é chamada de nó e, geralmente, existe um nó mestre (master) que gerencia e divide as tarefas computacionais entre os demais nós, conhecidos como nós escravos (slaves).
Uma das características mais importantes de um cluster é a tolerância a falhas, pois o cluster mantém seu funcionamento mesmo com a paralisação de alguns nós.
Grid computacional, por outro lado, é um agrupamento de clusters considerando-se uma grande área geográfica e possui as mesmas características dos clusters, embora o principal atributo de um grid seja permitir o compartilhamento de recursos (memória, processamento ou banda de rede), como, por exemplo, a plataforma Amazon Web Services o faz.
Em relação ao software, a maior preocupação é com o gerenciamento das tarefas sendo executadas em diferentes nós que compõem o sistema distribuído. Questões como balanceamento de carga, controle de sessões e compartilhamento e acesso concorrente aos dados são resolvidas por meio de software.
A plataforma Java fornece muitos mecanismos e APIs que auxiliam na criação de sistemas distribuídos. A lista de tecnologias no ecossistema Java com o propósito de resolver questões em ambientes de aplicações distribuídas é extensa e incluem RMI, JAX-RPC (SOAP) e EJBs.
Do ponto de vista da aplicação, um dos principais desafios em ambientes de computação distribuída é como as sessões são gerenciadas, pois cada requisição em um ambiente distribuído é geralmente redirecionada pelo load balancer para um nó de processamento diferente.
As próximas sessões sintetizarão a teoria e a prática acerca dos principais aspectos da computação distribuída com a tecnologia Java.
Será mostrado como configurar um cluster com três Tomcats, o servidor HTTP NGinx como load balancer e uma aplicação web que faz uso de sessão para ilustrar o comportamento do compartilhamento de sessões em um ambiente distribuído. A Figura 1 mostra a arquitetura do cluster utilizada neste artigo.
Figura 1. Arquitetura do cluster. NGinx como load balancer e três instâncias Tomcat.
Java e clustering
Ao longo das últimas duas décadas Java foi a plataforma escolhida por muitas organizações para implementar aplicações críticas na web. Alta escalabilidade, performance e tolerância a falhas são requisitos imprescindíveis em uma aplicação crítica e esses requisitos são inerentes a arquiteturas distribuídas como cluster.
A plataforma Java possui
forte ligação com as técnicas de ...