Arquitetura Monolítica em Camadas
Na arquitetura monolítica em camadas todo o código é dividido em camadas empilhadas. Cada camada presta serviços para a camada de cima. As aplicações para web são formadas por 3 ou 4 camadas.
Arquitetura em 3 camadas
Camada 1 : cliente ou de apresentação
Esta camada contém o código que é executado pelo programa cliente (o browser) e, portanto, fornece serviços (via página HTML) para o usuário.
Camada 2 : lógica ou de negócios
Esta camada contém o código que implementa as regras de negócio da aplicação. O algoritmo básico é o seguinte:
- Obter a solicitação (juntamente com os dados pertinentes) enviada pela camada 1. Tipicamente isso é feito analisando-se a requisição HTTP.
- Executar o que foi solicitado. Frequentemente isso implica também em solicitar para a camada 3 que dados sejam lidos e/ou gravados.
- Montar e enviar uma resposta para a camada 1. Tipicamente isso significa criar uma página HTML para ser incluída na resposta HTTP.
Camada 3 : dados ou persistência
Esta camada é responsável pelo armazenamento permanente dos dados. Tipicamente essa tarefa é realizada em cooperação com um banco de dados. Frequentemente o modelo de dados da camada 2 é diferente do modelo do banco de dados. O exemplo típico é a aplicação utilizar o modelo orientado a objetos e o banco utilizar o modelo relacional (como os bancos MySQL, Oracle, Postgres, etc). É precio então definir um Mapeamento Objeto-Relacional que permite a conversão dos dados de um modelo para outro.
Arquitetura em 4 camadas
Nesta arquitetura a camada 2 é separada em duas camadas. Aplicações Java EE são exemplo típico desta arquitetura.
Camada 1 : cliente ou de apresentação
Esta camada contém o código que é executado pelo programa cliente (o browser) e, portanto, fornece serviços (via página HTML) para o usuário.
Camada 2 : web
Esta camada é responsável por atender as solicitações enviadas pela camada 1 e gerar a resposta que será enviada de volta. Isso quer dizer que os algoritmos desta camada estão diretamente relacionados com a interface com o usuário.
É nesta camada que são definidas as páginas HTML da aplicação.
Camada 3 : lógica ou de negócios
Esta camada contém o código que implementa as regras de negócio da aplicação. O algoritmo básico é o seguinte:
- Executar o que foi solicitado pela camada 2. Frequentemente isso implica também em solicitar para a camada 4 que dados sejam lidos e/ou gravados.
- Enviar os dados gerados nesta camada para a camada 2.
A camada 3 não deve conter nenhum código que esteja relacionado com a interface com o usuário. Por exemplo, no código não deveria haver nenhuma referência explícita ou implícita aos protocolos HTTP e Websocket, ao conceito de página HTML ou aos formatos JSON ou XML.
Camada 3 : persistência
Esta camada é responsável pelo armazenamento permanente dos dados. Tipicamente essa tarefa é realizada em cooperação com um banco de dados. Frequentemente o modelo de dados da camada 2 é diferente do modelo do banco de dados. O exemplo típico é a aplicação utilizar o modelo orientado a objetos e o banco utilizar o modelo relacional (como os bancos MySQL, Oracle, Postgres, etc). É precio então definir um Mapeamento Objeto-Relacional que permite a conversão dos dados de um modelo para outro.
Diagrama de uma arquitetura em 4 camadas
A figura abaixo mostra um diagrama típico da arquitetura em 4 camadas.
Camadas, Computadores e Programas
Para que uma aplicação cuja arquitetura está organizada em quatro camadas possa ser executada, incluindo aí o banco de dados, é importante determinar quantos programas e quantos computadores estão envolvidos.
Não há única resposta pois há vários cenários possíveis. A seguir são descritos os cenários mais comuns.
Cenário A : 2 computadores e 3 programas
Neste cenário a aplicação está organizada assim:
- computador 1:
- contendo o programa navegador (browser) para executar o código da camada cliente.
computador 2:
- contendo o programa servidor para executar as camadas web, de negócios e de persistência;
- contendo o programa SGBD (Sistema Gerenciador de Bases de Dados).
É fácil perceber que neste cenário o lado servidor da aplicação, incluindo o banco de dados, está todo concentrado em um único computador. Isso pode ser ruim porque a máquina pode não dar conta da quantidade de processamento que precisa realizar e também porque se houver alguma falha de hardware toda a aplicação ficará indisponível.
Cenário B : 3 computadores e 3 programas
Neste cenário a aplicação está organizada assim:
- computador 1:
- contendo o programa navegador (browser) para executar o código da camada cliente.
- computador 2:
- contendo o programa servidor para executar as camadas web, de negócios e de persistência;
- computador 3:
- contendo o programa SGBD (Sistema Gerenciador de Bases de Dados).
O cenário B reconhece que em algumas aplicações o uso de banco de dados pode ser o fator predominante em termos de carga de processamento, especialmente se o volume de dados for muito grande e/ou as consultas forem bastante complexas.
Algumas aplicações tem a sua principal carga de processamento relacionada à manipulação dos dados enviados pela camada cliente. O processamento de uma imagem, por exemplo, pode demandar algoritmos sofisticados que monopolizam os recursos do computador.
Cenário C : 3 computadores e 4 programas
Neste cenário a aplicação está organizada assim:
- computador 1:
- contendo o programa navegador (browser) para executar o código da camada cliente.
- computador 2:
- contendo o programa servidor de requisições HTTP ou Websocket para executar a camada web
- contendo o programa servidor de aplicação para executar as camadas de negócios e de persistência;
- computador 3:
- contendo o programa SGBD (Sistema Gerenciador de Bases de Dados).
A separação da camada web em um programa próprio é a abordagem utilizada em aplicações JEE. A camada web é processada pelo programa chamado servlet container (por exemplo o Tomcat e o Jetty).
Cenário D : 4 computadores e 4 programas
Neste cenário a aplicação está organizada assim:
- computador 1:
- contendo o programa navegador (browser) para executar o código da camada cliente.
- computador 2:
- contendo o programa servidor de requisições HTTP ou Websocket para executar a camada web
- computador 3:
- contendo o programa servidor de aplicação para executar as camadas de negócios e de persistência;
- computador 4:
- contendo o programa SGBD (Sistema Gerenciador de Bases de Dados).
A utilização de dois computadores para executar a camada web e as camadas de negócios e de persistência também é indicada para as aplicações JEE.
O princípio fundamental deste cenário é que cada camada tem uma finalidade própria e seu funcionamento não deveria ser afetado pelos algoritmos que estão sendo executados ao mesmo tempo nas outras camadas. É preciso lembrar que em aplicações para web o mais comum é haver muitos usuários usando a aplicação ao mesmo tempo.
Latência e Taxa de Transferência
Para qualquer aplicação o conceito de velocidade é sempre importante. Quanto mais rápido melhor.
A velocidade pode ser medida pela taxa de transferência (throughput) em que os dados são transmitidos. Quanto maior a quantidade de dados enviadas por unidade de tempo maior será a taxa de transferência.
A velocidade também pode ser medida pela latência (latency) que é o tempo que demora entre o momento em que foi feita uma solicitação de dados e o momento que esses dados começam a chegar.
Ambos os critérios, taxa de transferência e latência, influenciam a percepção que o usuário tem sobre a usabilidade de uma aplicação.
A organização de uma aplicação em camadas traz benefícios tanto do ponto de vista da Engenharia de Software (qualidade do código advindo da modularidade) quanto da sua velocidade. Tanto a latência (por exemplo, tempo que um usuário tem que esperar para começar a receber a página solicitada) quando a taxa de transferência (quantidade de usuários atendidos por unidade de tempo) são melhoradas. Estes dois fatores justificam o aumento da complexidade que a arquitetura em cadamadas trás para o desenvolvedor.
Leitura Sugerida |
---|
Modelo em 3 camadas |
Post: Arquiteturas em 2-3-4-n camadas |