Uma arquitetura de N camadas divide um aplicativo em camadas lógicas e camadas físicas.
Camadas são uma maneira de separar responsabilidades e gerenciar dependências. Cada camada tem uma responsabilidade específica. Uma camada superior pode usar os serviços em uma camada inferior, mas não o oposto.
As camadas são separadas fisicamente, sendo executadas em computadores separados. Contratualmente, a camada pode ter seus modelos de comunicação rígidos ou relaxados. No modelo estrito, uma solicitação deve passar por camadas adjacentes, uma a uma, e não pode pular nenhuma camada entre elas. Por exemplo, do firewall do aplicativo Web para a camada da Web, depois para a camada intermediária 1 e assim por diante. Por outro lado, na abordagem relaxada, a solicitação pode pular algumas camadas, se necessário. A abordagem estrita tem mais latência e sobrecarga, e a abordagem relaxada tem mais acoplamentos e, posteriormente, é mais difícil de mudar. Um sistema pode usar uma abordagem híbrida: ter níveis relaxados e rígidos quando necessário.
Uma camada pode chamar diretamente a outra camada ou usar padrões de mensagens assíncronas por meio de uma fila de mensagens. Embora cada camada possa ser hospedada em sua própria camada, isso não é necessário. Várias camadas podem ser hospedadas na mesma camada. Separar fisicamente as camadas melhora a escalabilidade e a resiliência, mas também aumenta a latência da comunicação de rede adicional.
Um aplicativo tradicional de três camadas tem uma camada de apresentação, uma camada intermediária e uma camada de banco de dados. A camada intermediária é opcional. Aplicativos mais complexos podem ter mais de três camadas. O diagrama acima mostra um aplicativo com duas camadas intermediárias, encapsulando áreas diferentes de funcionalidade.
Um aplicativo de N camadas pode ter uma arquitetura de camada fechada ou um arquitetura da camada aberta:
- Em uma arquitetura de camada fechada, uma camada somente pode chamar a próxima camada imediatamente abaixo.
- Em uma arquitetura de camada aberta, uma camada pode chamar qualquer uma das camadas abaixo dela.
Uma arquitetura de camada fechada limita as dependências entre camadas. No entanto, ele poderá criar o tráfego de rede desnecessário se uma camada simplesmente passar as solicitações para a próxima camada.
Quando usar essa arquitetura
Arquiteturas de N camadas normalmente são implementadas como aplicativos IaaS (infraestrutura como serviço), com cada camada em execução em um conjunto separado de VMs. No entanto, um aplicativo de N camadas não precisa ser IaaS pura. Muitas vezes é vantajoso usar serviços gerenciados para algumas partes da arquitetura, particularmente cache, mensagens e armazenamento de dados.
Considere uma arquitetura de N camadas para:
- Aplicativos Web simples.
- Um bom ponto de partida quando os requisitos arquitetônicos ainda não estão claros.
- Migrar um aplicativo local para o Azure com o mínimo de refatoração.
- Desenvolvimento unificado de aplicativos em nuvem e locais.
Arquiteturas de N camadas são muito comuns em aplicativos locais tradicionais, portanto, é uma opção natural para migrar cargas de trabalho existentes para o Azure.
Benefícios
- Portabilidade entre nuvem e local e entre plataformas de nuvem.
- Curva de aprendizado menor para a maioria dos desenvolvedores.
- Custo relativamente baixo por não rearquitetar a solução
- Evolução natural do modelo tradicional de aplicativos.
- Abertura para ambiente heterogêneos (Windows/Linux)
Desafios
- É fácil terminar com uma camada intermediária que faz exatamente apenas CRUD no banco de dados, acrescentando latência extra sem fazer qualquer trabalho útil.
- O design monolítico impede a implantação independente de recursos.
- O gerenciamento de um aplicativo IaaS requer mais trabalho que o de um aplicativo que usa apenas serviços gerenciados.
- Pode ser difícil gerenciar a segurança de rede em um sistema grande.
- Os fluxos de usuários e dados geralmente abrangem várias camadas, adicionando complexidade a preocupações como teste e observabilidade.
Práticas recomendadas
- Use o dimensionamento automático para controlar as alterações na carga. Confira Práticas recomendadas de dimensionamento automático.
- Use mensagens assíncronas para desacoplar camadas.
- Armazenar dados semiestáticos em cache. Confira Práticas recomendadas de cache.
- Configure a camada de banco de dados para alta disponibilidade usando uma solução como Grupos de disponibilidade Always On do SQL Server.
- Coloque um WAF (firewall do aplicativo Web) entre o front-end e a Internet.
- Coloque cada camada na própria sub-rede e use sub-redes como um limite de segurança.
- Restrinja o acesso a camada de dados, permitindo solicitações somente das camadas intermediárias.
Arquitetura de N camadas em máquinas virtuais
Esta seção descreve uma arquitetura de N camadas recomendada em execução em VMs.
Cada camada consiste em duas ou mais VMs, colocadas em um conjunto de disponibilidade ou em um conjunto de dimensionamento de máquinas virtuais. Várias VMs oferecem resiliência no caso de falha da VM. Balanceadores de carga são usados para distribuir solicitações entre as VMs em uma camada. Uma camada pode ser dimensionada horizontalmente adicionando mais VMs ao pool.
Cada camada também é colocada dentro da própria sub-rede, o que significa que seus endereços IP internos ficam dentro do mesmo intervalo de endereços. Isso facilita a aplicação de regras do grupo de segurança de rede e o roteamento de tabelas para camadas individuais.
As camadas Web e comercial não têm estado. Qualquer VM pode lidar com qualquer solicitação para essa camada. A camada de dados deve consistir em um banco de dados replicado. Para Windows, é recomendável o SQL Server, usando Grupos de Disponibilidade Always On para alta disponibilidade. Para o Linux, escolha um banco de dados com suporte para replicação, como Apache Cassandra.
Os grupos de segurança de rede restringem o acesso a cada camada. Por exemplo, a camada de banco de dados só permite o acesso da camada comercial.
Observação
A camada rotulada "Camada de Negócios" em nosso diagrama de referência é um moniker para a camada lógica de negócios. Da mesma forma, também chamamos a camada de apresentação de "Camada da Web". Em nosso exemplo, esse é um aplicativo Web, embora arquiteturas de várias camadas também possam ser usadas para outras topologias (como aplicativos da área de trabalho). Nomeie as camadas como a sua equipe preferir para comunicar a intenção dessa camada lógica e/ou física em seu aplicativo. Você pode até mesmo expressar essa nomenclatura em recursos que você escolhe para representar essa camada (por exemplo, vmss-appName-business-layer).
Considerações adicionais
Arquiteturas de N camadas não estão restritas a três camadas. Para aplicativos mais complexos, é comum ter mais camadas. Nesse caso, considere usar roteamento de camada 7 para rotear solicitações para uma camada em particular.
As camadas são os limites de escalabilidade, confiabilidade e segurança. Considere ter camadas separadas para serviços com requisitos diferentes nessas áreas.
Use os conjuntos de dimensionamento de máquinas virtuais para dimensionamento automático.
Procure locais na arquitetura em que você possa usar um serviço gerenciado sem refatoração significativa. Em particular, examine cache, mensagens, armazenamento e bancos de dados.
Para maior segurança, coloque uma rede DMZ na frente do aplicativo. O DMZ inclui NVAs (soluções de virtualização de rede) que implementam a funcionalidade de segurança, como firewalls e inspeção de pacotes. Para obter mais informações, consulte Arquitetura de referência de DMZ da rede.
Para alta disponibilidade, coloque duas ou mais NVAs em um conjunto de disponibilidade, com um balanceador externo de carga para distribuir solicitações de Internet entre as instâncias. Para obter mais informações, consulte Implantar soluções de virtualização de rede altamente disponíveis.
Não permita o acesso direto a RDP ou SSH para VMs que estejam executando o código do aplicativo. Em vez disso, os operadores devem fazer logon em um jumpbox, também chamado de um host bastião. Esta é uma VM na rede que os administradores usam para se conectar às outras VMs. O jumpbox tem um grupo de segurança de rede que permite o RDP ou o SSH somente de endereços IP públicos aprovados.
Você pode estender a rede virtual do Azure para a sua rede local usando uma VPN (rede privada virtual) site a site ou o Azure ExpressRoute. Para obter mais informações, consulte Arquitetura de referência de rede híbrida.
Se a sua organização usar o Active Directory para gerenciar a identidade, você talvez queira estender seu ambiente do Active Directory para a VNet do Azure. Para obter mais informações, consulte Arquitetura de referência de gerenciamento de identidade.
Se você precisar de disponibilidade mais alta do que a fornecida pelo SLA do Azure para VMs, replique o aplicativo em duas regiões e use o Gerenciador de Tráfego do Azure para failover. Para obter mais informações, consulte Executar VMs do Windows em várias regiões ou Executar VMs do Linux em várias regiões.
Recursos relacionados
- Aplicativo de N camadas com Apache Cassandra
- Aplicativo de N camadas do Windows no Azure com SQL Server] [n-tier-windows-SQL]
- Módulo do Microsoft Learn: Tour pelo estilo de arquitetura de N camadas
- Azure Bastion
- Mais informações sobre como enviar mensagens em um estilo de arquitetura de N camadas no Azure