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 otimizada, envolvendo somente os recursos necessários e, ao mesmo tempo, atingindo um bom desempenho final. Normalmente, o resultado dos esforços é impreciso, distante do ótimo, e os recursos estarão frequentemente em uma situação de subutilização ou sobrecarga; raramente haverá uma situação em que todas as camadas do sistema estarão operando sob as condições de ambiente suficientes, mas sim, quase sempre em um quadro de excesso ou escassez.
O desafio da escalabilidade linear
Agora que vimos um cenário sob a perspectiva de camadas, o leitor pode estar se questionando: e se, de alguma forma, fôssemos capazes de organizar nossos sistemas de forma que o seu crescimento seja linear? Será possível, de alguma maneira, obtermos essa linearidade?
Este seria, sem dúvidas, o melhor dos mundos. Mas, para que possa se tornar factível, palpável, é necessária uma mudança radical no desenho da arquitetura. A estrutura ora constituída por camadas inteiras oferecendo um conjunto de funcionalidades daria lugar a outra em que:
· Pequenas unidades autossuficientes atendam a um conjunto específico de operações;
· Tais unidades se comuniquem por meio de espaços compartilhados de memória, onde:
o Os dados são armazenados e recuperados de forma segura e íntegra;
o Os espaços de dados oferecem mecanismos de notificação por meio dos quais unidades de processamento são informadas sobre quaisquer mudanças associadas aos dados e informações em processamento/manipulação.
As características mencionadas são apenas uma pequena parte dos recursos ofertados por uma plataforma conhecida como XAP, cujas características centrais passaremos a analisar a partir de agora. Para que a experiência do leitor seja a mais agradável possível, decidimos abordar todos os conceitos a seguir na forma de uma demonstração prática.
Introduzindo a plataforma XAP
XAP é um acrônimo para eXtreme Application Platform. Em linhas gerais, é uma plataforma que viabiliza o desenvolvimento de soluções escaláveis dinâmica e linearmente, organizadas em conjuntos de módulos de processamento e Computação em Memória que, de forma rápida e resumida, pode ser compreendida como acelerar o acesso a dados mantendo-os em memória. Isto, como o leitor certamente deve imaginar, requer uma configuração de hardware poderosa dos servidores que hospedarão os sistemas, o que não representa, entretanto, grande barreira nesses dias em que a capacidade de processamento e memória são abundantes. Lembre-se que estamos na era do Big Data.
Essa configuração dependerá muito do contexto da aplicação, sendo sempre necessário um planejamento minucioso orientado por características como previsões de carga, índice de disponibilidade, dentre outras. Por se tratar de algo bastante influenciado pela natureza das aplicações, não daremos qualquer parecer a este respeito ao longo do artigo.
Ao optarmos pelo emprego da XAP no desenvolvimento e oferta de soluções, estaremos:
· Posicionando sistemas de back-end nos bastidores;
· Levando os dados para a memória, diminuindo o tempo de acesso aos mesmos;
· Expondo serviços a partir de módulos autossuficientes de processamento;
· Modelando a comunicação entre módulos a partir de espaços compartilhados de memória, conhecidos no universo XAP como spaces;
· Confiando à plataforma o gerenciamento de back-ups tanto para os módulos de processamento como para as unidades de memória, a partir de arquivos descritores;
· Confiando à plataforma a escalação de mais instâncias dos módulos de processamento (bem como a desalocação em condições ociosas), também via arquivos descritores.
Antes de partirmos efetivamente para o estudo de um projeto real construído sobre a XAP, analisaremos agora como é a sua organização interna para, desta forma, lançar informações relevantes a respeito de alguns conceitos fundamentais da plataforma, que precisam ser bem contextualizados para tornar qualquer exercício de codificação e experimentação prática mais confortável e produtivo. Sugerimos ao leitor que desvie, neste instante, sua atenção para a Tabela 1, cujo conteúdo descreve sucintamente cada um dos pilares lógicos da plataforma.
Agora que o leitor já se familiarizou com os conceitos fundamentais da plataforma, é importante também citarmos que todo esse conjunto de elementos é disponibilizado e acomodado na plataforma de modo que:
· Os mesmos dados sejam acessados através de um conjunto diversificado de APIs, dentre elas: memcached, SQL e JPA e, também, uma API nativa;
· XAP é uma plataforma de virtualização, sobretudo, e em uma mesma infraestrutura torna-se possível implantar uma solução completa, end-to-end, evitando uma série de custos relacionados ao modelo multicamada, no qual geralmente são necessários vários ambientes, várias licenças, para o emprego de todas as tecnologias requisitadas para o provimento de soluções.
Conceito |
Descrição |
LUS |
Serviço de registro e procura, responsável pela identificação e recuperação dos agentes ativos no ambiente. É através do LUS que um cliente pode ‘descobrir’ um serviço do qual precise para executar uma determinada operação. |
GSA |
... |
Confira outros conteúdos:
Introdução ao JDBC
Novidades do Java
Teste unitário com JUnit
Black November
Desconto exclusivo para as primeiras 200 matrículas!
Pagamento anual
12x no cartão
De: R$ 69,00
Por: R$ 54,90
Total: R$ 658,80
Garanta o desconto
- Formação FullStack Completa
- Carreira Front-end I e II, Algoritmo e Javascript, Back-end e Mobile
- +10.000 exercícios gamificados
- +50 projetos reais
- Comunidade com + 200 mil alunos
- Estude pelo Aplicativo (Android e iOS)
- Suporte online
- 12 meses de acesso
Pagamento recorrente
Cobrado mensalmente no cartão
De: R$ 79,00
Por: R$ 54,90 /mês
Total: R$ 658,80
Garanta o desconto
- Formação FullStack Completa
- Carreira Front-end I e II, Algoritmo e Javascript, Back-end e Mobile
- +10.000 exercícios gamificados
- +50 projetos reais
- Comunidade com + 200 mil alunos
- Estude pelo Aplicativo (Android e iOS)
- Suporte online
- Fidelidade de 12 meses
- Não compromete o limite do seu cartão
<Perguntas frequentes>
Nossos casos de sucesso
Eu sabia pouquíssimas coisas de programação antes de começar a estudar com vocês, fui me especializando em várias áreas e ferramentas que tinham na plataforma, e com essa bagagem consegui um estágio logo no início do meu primeiro período na faculdade.
Estudo aqui na Dev desde o meio do ano passado!
Nesse período a Dev me ajudou a crescer muito aqui no trampo.
Fui o primeiro desenvolvedor contratado pela minha
empresa. Hoje eu lidero um time de desenvolvimento!
Minha meta é continuar estudando e praticando para ser um
Full-Stack Dev!
Economizei 3 meses para assinar a plataforma e sendo sincero valeu muito a pena, pois a plataforma é bem intuitiva e muuuuito didática a metodologia de ensino. Sinto que estou EVOLUINDO a cada dia. Muito obrigado!
Nossa! Plataforma maravilhosa. To amando o curso de desenvolvimento front-end, tinha coisas que eu ainda não tinha visto. A didática é do jeito que qualquer pessoa consegue aprender. Sério, to apaixonado, adorando demais.
Adquiri o curso de vocês e logo percebi que são os melhores do Brasil. É um passo a passo incrível. Só não aprende quem não quer. Foi o melhor investimento da minha vida!
Foi um dos melhores investimentos que já fiz na vida e tenho aprendido bastante com a plataforma. Vocês estão fazendo parte da minha jornada nesse mundo da programação, irei assinar meu contrato como programador graças a plataforma.
Wanderson Oliveira
Comprei a assinatura tem uma semana, aprendi mais do que 4 meses estudando outros cursos. Exercícios práticos que não tem como não aprender, estão de parabéns!
Obrigado DevMedia, nunca presenciei uma plataforma de ensino tão presente na vida acadêmica de seus alunos, parabéns!
Eduardo Dorneles
Aprendi React na plataforma da DevMedia há cerca de 1 ano e meio... Hoje estou há 1 ano empregado trabalhando 100% com React!
Adauto Junior
Já fiz alguns cursos na área e nenhum é tão bom quanto o de vocês. Estou aprendendo muito, muito obrigado por existirem. Estão de parabéns... Espero um dia conseguir um emprego na área.
Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.