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