Por que eu devo ler este artigo:Este artigo aborda diversos conceitos relacionados à computação distribuída, oferecendo uma introdução aos principais tópicos da disciplina como base para a aplicação prática de um cluster, que será implementado com o servidor HTTP NGinx como balanceador de carga para três instâncias do Tomcat.

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 ...

Quer ler esse conteúdo completo? Tenha acesso completo