Avançar para o conteúdo principal
BlogueRedeUse um VLAN ou VPC para proteger seu aplicativo com arquitetura em três camadas

Utilize um VLAN ou VPC para proteger a sua aplicação com uma arquitetura de três níveis

Arquitectura em três camadas utiliza uma camada de dados, aplicação e apresentação

O isolamento da sua rede num VPC tem grandes benefícios em termos de segurança, incluindo permitir a colaboração privada e o armazenamento adequado de informação sensível.

No lado do desenvolvimento da casa, o isolamento da rede também permite a implantação de aplicações web de vários níveis. O isolamento da sua aplicação permite segmentar camadas com e sem acesso público à Internet. Isto é frequentemente utilizado para isolar a camada da base de dados da Internet pública, ao mesmo tempo que permite que os patches e as actualizações de software sejam retirados de uma camada superior em vez de directamente da Internet pública. Para além de diminuir a superfície de ataque, isto pode permitir implementações multi-regiões.

Existem inúmeras formas de executar várias camadas, mas normalmente pode confiar em algumas formas básicas que maximizam a escalabilidade, segurança, e fiabilidade. Um dos desenhos mais comuns é uma arquitectura de três camadas que é especialmente popular em ambientes baseados em nuvens.

Uma aplicação em três níveis consiste em três camadas diferentes que residem em servidores diferentes e podem ser desenvolvidas e administradas com um elevado grau de independência. Estas partes são:

  1. Apresentação: A interface externa que gere a comunicação entre o utilizador e a aplicação, normalmente constituída por um servidor web com HTML e código de desenvolvimento web de acompanhamento.
  2. Aplicação: Uma aplicação personalizada que fornece a lógica empresarial necessária e cola a aplicação em conjunto.
  3. Dados: Um sistema de base de dados para armazenamento e recuperação de dados utilizados com a aplicação.

Estes três níveis servem como serviços separados que comunicam através de APIs baseados em rede. As preocupações de segurança e desempenho exigem frequentemente que os níveis de Aplicação e Dados residam na mesma rede local atrás de uma firewall comum, mas a separação de cada camada traz o potencial de implementar cada componente em hardware diferente ou mesmo em locais físicos diferentes. A flexibilidade aqui dependerá drasticamente dos requisitos da sua aplicação.

O diagrama abaixo mostra uma visão do mundo real de uma aplicação web básica de três níveis. O servidor web na camada de Apresentação fornece uma interface para um utilizador que trabalha numa janela de navegador. No extremo oposto, o nível de Dados toma a forma de uma base de dados, que pode ser um sistema único ou um cluster apresentado à rede como uma entidade única. As opções populares de código aberto para a camada de Base de Dados incluem MySQL, MariaDB, e PostgreSQL para SQL e MongoDB e Cassandra para NoSQL.

Figura 1: A arquitectura de três camadas divide uma aplicação web numa camada de Apresentação, uma camada de Aplicação, e uma camada de Dados.

Entre o servidor web e a base de dados encontra-se o nível de Aplicação, onde provavelmente passará a maior parte do seu tempo de codificação. O nível de Aplicação contém o código personalizado e a lógica empresarial de que necessita para que a aplicação cumpra os seus objectivos. No front-end, o servidor web envia consultas para o nível de Aplicação. A camada de Aplicação responderá ao servidor web e o servidor web formatará os dados e os apresentará ao utilizador. Na parte de trás, o nível de Aplicação consulta a base de dados, recebe os dados, e depois processa os dados para acrescentar inteligência e conhecimento para o utilizador.

Como exemplo muito simples, a base de dados pode armazenar registos de vendas para uma empresa. O utilizador introduz um pedido para receber a média das vendas diárias de um produto específico num determinado local, durante um determinado intervalo de tempo. O servidor web envia o pedido para o nível Application tier. O nível de Aplicação formula uma consulta à base de dados, recebe os dados em bruto, efectua os cálculos necessários e depois envia uma resposta de volta ao servidor web.

Figura 2: Um utilizador solicita um conjunto de informações para a camada de apresentação, que é traduzido para uma consulta de base de dados pela camada de aplicação.

Não existe uma solução de entrega conveniente para o nível de Aplicação equivalente a, digamos, um servidor web Apache para o nível de Apresentação ou uma base de dados MongoDB para o nível de Dados. Em vez disso, o código personalizado é tipicamente escrito em Python, PHP, ou Ruby para o nível de Aplicação. No entanto, existem algumas estruturas de programação que lhe darão um avanço na escrita do código de forma mais eficiente, incluindo Django (para Python), Rails (para Ruby), e Symfony (para PHP).

O nível de Aplicação poderia, em teoria, ser combinado com o nível de Apresentação, fornecendo ao servidor web o código necessário para consultas directas a uma base de dados, mas isto seria impraticável para a lógica empresarial mais complexa e anularia muitos dos benefícios da segmentação de aplicações.

Um dos mais importantes desses benefícios é o aumento da segurança com uma superfície de ataque menor. Conforme mostrado na Figura 1, uma solução em três camadas minimiza a parte da aplicação que deve residir na frente do firewall. O servidor Web comunica-se através de um API. O resto da atividade está por detrás da firewall e, de forma crítica, num espaço de endereço privado que não é acessível a partir da Internet. As injecções de SQL, em particular, são uma das vulnerabilidades mais comuns - e uma das mais destrutivas. Estas podem ser evitadas isolando e protegendo toda a comunicação direta com a base de dados.

Outro benefício da aplicação em três níveis é a fiabilidade. Uma interrupção numa camada é menos susceptível de afectar as outras camadas quando cada camada está a correr num servidor separado ou separada mais para hardware diferente ou outro centro de dados inteiramente. Isto também nos dá potencial para escalabilidade. Como os componentes funcionam independentemente, podem crescer independentemente. Por exemplo, se o acesso à base de dados for um estrangulamento de desempenho, é possível adicionar nós ao cluster da base de dados com o mínimo de perturbações no funcionamento global.

Uma abordagem a três níveis pode também optimizar o processo de desenvolvimento. Os APIs que ligam os níveis separam os componentes de uma forma que apoia a eficiência na divisão do trabalho. Os programadores e administradores da Web podem operar e manter o servidor Web, enquanto os programadores e administradores de bases de dados podem executar o sistema de bases de dados. Entretanto, os especialistas na estrutura que estão a utilizar para a camada de aplicação podem concentrar a sua atenção no código da aplicação. Num cenário DevOps, por exemplo, os programadores de aplicações podem construir e testar uma nova versão do código da aplicação offline, alterando-o facilmente com um efeito mínimo nas operações.

Se está a começar a construir uma aplicação web, considere uma arquitectura a três níveis. Nos actuais ambientes de contentores e nuvens, é fácil separar os componentes em diferentes sistemas, e será recompensado pelos seus esforços com uma aplicação mais fiável, mais segura, e mais escalável.

Comece hoje a trabalhar em Linode para construir as suas camadas de aplicação.

Recursos: Introdução às VLANs | Aplicações Cross-Data Center

Linode Solutions: VLANs | Bases de dados geridas

Comentários (1)

  1. Author Photo

    You can eliminate the “NAT” in Figure 1. It’s not needed in an IPv6 world. A proper firewall will suffice.

Deixe uma resposta

O seu endereço de correio electrónico não será publicado. Os campos obrigatórios estão marcados com *