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

...
Quer ler esse conteúdo completo? Tenha acesso completo