O mercado de informática no Brasil se habituou a utilizar soluções de baixo custo, feitas geralmente por profissionais com experiência tecnológica, mas pouca base teórica. No ambiente corporativo, no entanto, esse tipo de solução não atende às necessidades; para este mercado a análise e o projeto de sistemas não são um luxo; uma arquitetura de software bem construída quase sempre representa a diferença entre um sistema que dá lucro e um sistema que só gera mais custos.

Ao longo dos últimos anos, cada vez mais empresas foram profissionalizando o desenvolvimento de seus sistemas. Parte disso se deu devido à maior disponibilidade da informação, mas um outro fator importante foi o amadurecimento do mercado, que aprendeu que somente dando competitividade ao seu cliente é possível sobreviver em tempos de crise. Esses avanços trouxeram para a realidade corporativa brasileira o conhecimento de uma série de práticas desejáveis no desenvolvimento de software; dessas uma das mais importantes é o projeto profissional, que viabiliza o chamado estudo de arquitetura de software.

Por arquitetura, dizemos a estrutura em que os componentes de um software se organizam - tanto física quanto logicamente - determinando peculiaridades de seu funcionamento. Existem inúmeras classificações que podem ser usadas para definir arquiteturas com características peculiares, mas, nos últimos tempos, a chamada arquitetura em múltiplas camadas (ou multi-tiered architecture) torna-se sinônimo de alta disponibilidade e escalabilidade nos produtos. Ela, porém, não é adequada para todos os casos.

Como muitas novas técnicas que tentam se impor num mercado resistente a mudanças, as novas tecnologias de desenvolvimento prometem mundos e fundos, e tendem a esconder seus drawbacks; O desenvolvimento de aplicativos usando múltiplas camadas não é a solução milagrosa para todos os problemas - se por um lado existe o ganho real de performance, estabilidade e escalabilidade ao se utilizar esse tipo de arquitetura, por outro lado os custos de desenvolvimento aumentam. No entanto, existem benefícios inegáveis que podem tornar essa abordagem - quando adequada a um cliente - vital para o sucesso ou o fracasso de seu empreendimento.

A arquitetura tradicional Cliente/Servidor

A antiga estrutura centralizadora do processamento baseada em Mainframes foi sucedida por uma arquitetura que se organizava em duas 'camadas', chamada de arquitetura Cliente/Servidor. Basicamente essa estrutura consiste em separar o processamento em duas partes - uma parte é realizado na máquina do usuário (cliente) e a outra numa máquina poderosa que concentra as informações (servidor).

Apesar de funcionar muito bem em ambientes de rede, pois acumulava e processava informações de forma organizada e central, o surgimento das redes de grande amplitude (WANs), como a internet, trouxe novos problemas que essa abordagem tinha dificuldades de suprir: a segurança e a escalabilidade.

Nos aplicativos Cliente/Servidor o computador servidor é diretamente conectado e responsável por cada computador cliente que está operando com suas informações. Desse modo, se existem 1000 usuários no mundo acessando um dado aplicativo, seu servidor terá que usar seus recursos para gerenciar todas as solicitações de cada um deles. A inviabilidade desse tipo de responsabilidade numa época em que alguns dos softwares mais populares da web são acessados por milhões de usuários diariamente criou a necessidade de uma nova arquitetura de software - uma arquitetura que fosse capaz de dar conectividade e produtividade a grandes quantidades de usuários simultâneos; surgiu a arquitetura em multicamadas.

O modelo em Multicamadas

Um software que trabalha em múltiplas camadas ainda é responsável por todas as conexões ligadas a ele, mas não o faz diretamente. Há uma separação clara entre as diversas responsabilidades envolvidas no desempenho de cada função, de modo que o programa não é mais dividido entre um servidor e um cliente, mas em três ou mais camadas que se comunicam entre si quando têm necessidade.

No entanto, o que torna essa abordagem diferente é o fato de que cada uma de suas camadas funciona de forma separada e inteligente, levando em consideração a estrutura e a semântica de cada função a ser exercida. Isso é um imenso salto de qualidade, mas exige que o projeto e a implementação sejam, ambos, planejados e construídos de forma especial; assim é possível atingir o resultado desejado.

É desejável que o projeto de um aplicativo multicamadas seja Orientado a Objetos; entretanto, implementar esse tipo de projeto é tarefa para uma equipe experiente, e a disponibilidade de profissionais capacitados nessas técnicas ainda é pequena. Mesmos assim, é possível tirar proveito dos benefícios da arquitetura em camadas utilizando-se de algumas técnicas de OO em um projeto tradicional; feito com qualidade, o resultado final compensa o trabalho extra.

Uma arquitetura de multicamadas tem inúmeras vantagens em relação ao modelo cliente/servidor tradicional. Entre elas podemos citar:

:: Melhor balanceamento do aplicativo, à medida que cada camada divide responsabilidades na interação com os usuários, economizando os recursos das camadas mais profundas, como memória e processamento;

:: Melhor documentação e organização de projeto; com uma arquitetura em camadas, o aplicativo pode fazer uso de técnicas de projeto orientado a objeto, o que significa manutenção e evolução mais barata;

:: Maior segurança, já que os módulos desenvolvidos na camada de apresentação não têm acesso direto aos dados no servidor de banco de dados.

:: Potencial de Tolerância a falhas, quando suportada pelo servidor de aplicativos, eleva a segurança de dados e de transações, protegendo não só as informações, mas também os procedimentos de forma eficiente contra falhas de energia, hardware ou software;

:: Melhor gerenciamento de recursos, com a presença de uma camada de lógica de negócios, o acesso aos recursos é gerenciado, em vez de ter cada usuário conectado consumindo os recursos de seu servidor, um projeto bem feito pode economizar uma fortuna em equipamento;

Cada um desses benefícios, isolados, já representa um avanço considerável em relação à maioria dos sistemas desenvolvidos com técnicas de projeto menos sofisticadas; combinados, eles elevam a solução a um nível de qualidade que se traduz facilmente em vantagens para o empreendimento.

Implementando sistemas em multicamadas

É necessário que o projeto tenha sido idealizado de modo a produzir e comportar uma arquitetura em multicamadas, para que seja possível implementar um aplicativo que apresente os benefícios esperados.

Uma arquitetura em três camadas pode ser implementada em três máquinas separadas, ou mesmo em módulos separados no mesmo computador; a grande diferença de implementação entre esta e a tradicional arquitetura cliente-servidor é a presença de um programa chamado de Servidor de Aplicativos. Ele irá gerenciar o reaproveitamento de recursos e a conectividade - tanto com o banco de dados como com a camada de aplicação. Sua presença, entretanto, cria dois importantes fatores a considerar: aumento de custo e de complexidade do desenvolvimento.

Um modelo em 3 camadas para a web seria tipicamente organizado da seguinte maneira:

Camada de Apresentação - representada pelo navegador e pelo servidor web, organiza e exibe as informações para o usuário; recebe comandos e organiza a forma de entrada e saída. Geralmente é programada numa linguagem de script, e é de desenvolvimento mais barato.
Camada de Lógica de Aplicação - representada por um conjunto de objetos que contém a lógica de negócios do aplicativo; esses objetos ficam hosperdados num Servidor de Aplicativos. Pode ser reusada por várias formas de apresentação diferentes, e se comunica com a camada de serviços de dados para prover informações e acionar operações.
Camada de Serviços de Dados - representada pelo servidor de dados e pela abstração de dados, acesso a programas legados e sistema de arquivos. Somente pode ser acessada pela camada de lógica de aplicação, o que aumenta a segurança do sistema.
O aumento de complexidade em relação à estrutura tradicional é considerável, e pode-se ter uma idéia clara desse fator apenas vendo as especificações dos servidores de aplicativos: na maior parte deles, para que possamos nos beneficiar de suas vantagens, as camadas centrais dos aplicativos devem ser escritas em linguagem Java, e num código compatível com as especificações do servidor escolhido.

É necessária uma boa dose de experiência e visão para aconselhar a utilização de uma arquitetura em multicamadas. Uma vez determinadas as vantagens e levantado o esforço extra que será exigido por esse tipo de projeto, cabe ao cliente a decisão de qual abordagem tomar para implementar o sistema. Para cada necessidade específica existem diversas opções que podem ser viáveis, dependendo da graduação das prioridades e do enfoque do projeto em qualidade, prazo, escalabilidade, vida útil e segurança; o peso a ser determinado em cada um desses fatores vai determinar a escolha tecnológica, mas em todos os casos é a visão e o aconselhamento de profissionais experientes que farão a diferença.

Luís Eduardo Jason Santos
Diretor de Projeto e Desenvolvimento