Por que eu devo ler este artigo:Neste artigo, estudaremos uma plataforma para desenvolvimento de soluções altamente escaláveis e disponíveis conhecida como XAP (Extreme Application Platform). De natureza modular e trabalhando sob o conceito de Computação em memória, XAP tem sido cada dia mais utilizada no mundo corporativo, razão pela qual acreditamos merecer um espaço especial na Java Magazine.

Este tema será útil para o leitor, profissional de arquitetura e/ou desenvolvimento de software, que esteja buscando no mercado de tecnologia por alguma plataforma que o permita atacar com qualidade e eficiência gargalos bastante populares da arquitetura multicamadas, amplamente empregada no mercado, tais como escalabilidade e disponibilidade, dentre outros.

O desenvolvimento de soluções distribuídas tem sido baseado, por anos e anos, em uma arquitetura organizada em camadas lógicas à qual se emprega comumente o termo “tiered applications”. É um modelo de sucesso que, como todos os demais, apresenta inúmeros pontos positivos e alguns negativos. Plataformas tecnológicas como Java oferecem vários frameworks e toolkits que atendem com admirável qualidade os requisitos inerentes a esta filosofia, ilustrada na Figura 1.

Figura 1. Tiered applications e Java.

Um dos maiores desafios que este tipo de desenho nos traz está relacionado à sua escalabilidade que, de forma bem resumida, pode ser entendida como ‘a capacidade de uma aplicação continuar atendendo requisições de forma estável, ainda que a demanda apresente crescimento sensível’. A resposta para um problema como este nunca é simples: idealmente, implica no crescimento ordenado e sustentável da infraestrutura que viabiliza o sistema, evitando-se, no maior número possível de cenários, subutilizá-la ou sobrecarregá-la.

Escalando sistemas em camadas

Quando um sistema está dividido em camadas (conforme o diagrama da Figura 1), todo o conjunto de operações que atende uma solicitação do início ao fim (“end-to-end”) é categorizada e disponibilizada em contextos lógicos distintos entre si. Para ilustrar essa definição, vamos imaginar um usuário acessando um sistema a partir de suas credenciais. Neste caso, os elementos que fatalmente encontraríamos são:

· Uma interface gráfica para que o usuário interaja com o sistema;

· Execução da lógica de acesso a partir da validação das credenciais fornecidas;

· Uso de credenciais persistidas com aquelas fornecidas na tentativa de acesso, junto a um sistema de informações que armazena e controla o acesso a tais dados.

Desta lista, o leitor identificará três níveis bem distintos entre si, sendo:

1. Apresentação (cuja estrutura pode ser dividida entre cliente e servidor ou apenas cliente);

2. Negócio.

3. Persistência e gerenciamento de dados/informação.

Para cada um deles, existe uma infindável lista de tecnologias, bibliotecas, frameworks e toolkits. Os eleitos dependerão muito da natureza do sistema que estamos desenvolvendo (web/standalone/mobile, distribuído ou não) e requisitos funcionais e não funcionais levantados com stakeholders. O aspecto mais importante do ponto de vista do desenho da solução, entretanto, é que se preserve a independência entre essas camadas já identificadas, garantindo um grau de flexibilidade suficiente para, dentre outras coisas:

· Reduzir ou expandir a variedade de clientes consumindo as funcionalidades disponíveis;

· Refinar a execução da lógica de negócio;

· Repensar o conjunto de tecnologias utilizado no tratamento de dados e informações.

Um dos maiores desafios que sistemas em camadas apresentam está exatamente na busca por uma fórmula que as equalize/equilibre, evitando:

· Surgimento de gargalos em camadas incapazes de atender crescimentos sensíveis de requisições a determinadas funções;

· Ociosidade, quando alguma(s) camada(s) do sistema está(ão) disponível(is) mas, em contrapartida, os recursos e operações que oferece não são efetivamente necessários;

· Dificuldade técnica para monitorar, implantar e investigar problemas nos diversos níveis;

· Latência na comunicação entre as camadas.

Além dos pontos mencionados, a necessidade de se aumentar a capacidade de resposta da aplicação em relação a uma função específica, implantada em uma dessas camadas, é algo que fatalmente a afetará como um todo. Outro grande desafio é equilibrar a escalação de todas as camadas de forma ...

Fim do trecho gratuito • continue abaixo
CONTEÚDO EXCLUSIVO

Desbloqueie toda a DevMedia

  • +2000 artigos e vídeos
  • +40 trilhas sobre Front-end, Back-end, IA e muito mais
  • +5000 exercícios práticos
  • Mentorias ao vivo individuais
até 50% OFF
A partir de
R$ 69 /mês
Assinar agora