Compartilhar via


Estilo de arquitetura de N camadas

Uma arquitetura de N camadas divide um aplicativo em camadas lógicas e camadas físicas.

Diagrama lógico que mostra um estilo de arquitetura de N camadas.

Camadas separam responsabilidades e gerenciam dependências. Cada camada tem uma responsabilidade específica. Uma camada mais alta pode usar serviços em uma camada inferior, mas uma camada inferior não pode usar serviços em uma camada mais alta.

As camadas são fisicamente separadas e executadas em computadores separados. Contratualmente, a camada pode ter modelos de comunicação estritos ou relaxados. No modelo estrito, uma solicitação deve passar por camadas adjacentes, uma por uma, e não pode ignorar nenhuma camada no meio. Por exemplo, uma solicitação viaja do WAF (firewall do aplicativo Web) para a camada da Web e, em seguida, para a camada intermediária 1 e continua. Por outro lado, a abordagem flexível permite que as solicitações ignorem algumas camadas, se necessário. A abordagem estrita tem maior latência e sobrecarga. A abordagem relaxada tem mais acoplamentos, o que dificulta as mudanças. Você também pode combinar ambas as abordagens no mesmo sistema.

Uma camada pode chamar para outra camada diretamente ou usar padrões de mensagens assíncronas por meio de uma fila de mensagens. Você pode hospedar cada camada em sua própria camada, mas essa abordagem não é necessária. Você pode hospedar várias camadas no mesmo nível. A separação física de camadas melhora a escalabilidade e a resiliência, mas também adiciona latência da comunicação de rede extra.

Um aplicativo tradicional de três camadas tem uma camada de apresentação, uma camada intermediária opcional e uma camada de banco de dados. Aplicativos mais complexos podem ter mais de três camadas. O diagrama anterior mostra um aplicativo com duas camadas intermediárias que encapsulam diferentes áreas de funcionalidade.

Um aplicativo de N camadas pode ter uma arquitetura de camada fechada ou uma arquitetura de camada aberta:

  • Em uma arquitetura de camada fechada, uma camada só pode chamar a próxima camada imediatamente para baixo.
  • Em uma arquitetura de camada aberta, uma camada pode chamar todas as camadas abaixo dela.

Uma arquitetura de camada fechada limita as dependências entre camadas. Mas essa arquitetura poderá criar tráfego de rede desnecessário se uma camada passar apenas solicitações para a próxima camada.

Quando usar essa arquitetura

Considere uma arquitetura de N camadas para os seguintes cenários:

  • Suporte aos requisitos de arquitetura que ainda estão em evolução.
  • Migre um aplicativo local para o Azure com alterações mínimas.
  • Desenvolva aplicativos que abrangem ambientes locais e de nuvem.

Arquiteturas de N camadas são comuns em sistemas locais tradicionais, o que os torna um ajuste natural para a transição de cargas de trabalho existentes para o Azure.

Implemente arquiteturas de N camadas efetivamente usando serviços gerenciados que fornecem escalabilidade, confiabilidade e redução da sobrecarga operacional ou VMs (máquinas virtuais). Essas cargas de trabalho geralmente se beneficiam também do uso de soluções gerenciadas para componentes-chave, como cache, mensagens e armazenamento de dados.

Benefícios

  • Portátil na nuvem e no local e entre plataformas de nuvem
  • Requer menos curva de aprendizado para a maioria dos desenvolvedores
  • Custa relativamente pouco por não reestruturar a solução existente.
  • Segue uma evolução natural do modelo de aplicativo tradicional
  • Dá suporte a ambientes mistos que incluem Windows e Linux

Desafios

  • Uma camada intermediária pode apenas realizar operações básicas de CRUD (criação, leitura, atualização, exclusão), o que adiciona latência e complexidade sem fornecer valor significativo.
  • O design monolítico impede a implantação independente de recursos.
  • Sistemas grandes podem dificultar o gerenciamento da segurança de rede.
  • Solicitações de usuário e dados que se movem por várias camadas dificultam o teste e o monitoramento.

Práticas recomendadas

  • Use o dimensionamento automático para lidar com as alterações na carga. Para obter mais informações, consulte as práticas recomendadas de dimensionamento automático.
  • Use de mensagens assíncronas para desacoplar camadas.
  • Dados de cache que não são alterados com frequência. Para obter mais informações, consulte as 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 entre o front-end e a Internet.
  • Coloque cada camada em sua própria sub-rede e use sub-redes como um limite de segurança.
  • Restrinja o acesso à camada de dados permitindo solicitações somente de uma camada intermediária.

Arquitetura de N camadas em VMs

Esta seção descreve uma arquitetura de N camadas que é executada em VMs.

Observação

Use VMs para hospedar uma arquitetura N-teir se você planeja migrar um aplicativo existente para o Azure com refatoração mínima. Caso contrário, considere o uso de serviços gerenciados para implementar a arquitetura, como o Serviço de Aplicativo do Azure ou os Aplicativos de Contêiner do Azure.

Diagrama que mostra uma arquitetura de N camadas.

Cada camada consiste em um conjunto escalável de máquinas virtuais com duas ou mais VMs. Várias VMs fornecem resiliência se uma VM falhar. Balanceadores de carga distribuem solicitações entre as VMs em uma camada. Você pode dimensionar uma camada horizontalmente adicionando mais VMs ao pool.

Cada camada também é colocada dentro de sua própria sub-rede, o que significa que seus endereços IP internos estão dentro do mesmo intervalo de endereços. Essa abordagem facilita a aplicação de regras de grupo de segurança de rede e tabelas de roteamento nas camadas individuais.

As camadas web e de negócios são sem estado. Qualquer VM pode lidar com qualquer solicitação para essa camada. A camada de dados deve consistir em um banco de dados replicado. Sempre que possível, use um banco de dados gerenciado, mas você também pode hospedar bancos de dados em bancos de dados hospedados em VMs. Para o Windows, recomendamos o SQL Server com grupos de disponibilidade Always On para alta disponibilidade. Para Linux, escolha um banco de dados que dê suporte à replicação, como o 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 de negócios.

Observação

A camada rotulada como camada de negócios no diagrama de referência refere-se à camada lógica de negócios. A camada de apresentação é rotulada como Camada da Web. O exemplo mostra um aplicativo Web, mas você também pode usar arquiteturas de várias camadas para outras topologias, como aplicativos da área de trabalho. Use nomes claros e descritivos para cada camada que sua equipe entenda. Você também pode usar esses nomes em seus recursos do Azure, por exemplo, vmss-appname-business-tier.

Outras considerações

  • As arquiteturas de N camadas não são restritas a três camadas. Aplicativos mais complexos geralmente têm mais camadas. Nesse caso, considere usar o roteamento de camada 7 para rotear solicitações para uma camada específica.

  • As camadas criam limites para escalabilidade, confiabilidade e segurança. Considere ter camadas separadas para serviços com requisitos diferentes nessas áreas.

  • Use conjuntos de dimensionamento de máquinas virtuais para de dimensionamento automático.

  • Encontre locais na arquitetura em que você pode usar um serviço gerenciado sem refatoração significativa. Em particular, considere o cache, as mensagens, o armazenamento e os bancos de dados.

  • Coloque uma rede de perímetro (também conhecida como DMZ, zona desmilitarizada e sub-rede em tela) na frente do aplicativo para maior segurança. A rede de perímetro inclui NVAs (dispositivos virtuais de rede) que implementam funcionalidades de segurança, como firewalls e inspeção de pacotes. Para obter mais informações, consulte Implementar uma rede híbrida segura.

  • Use dois ou mais Aparelhos Virtuais de Rede (NVAs) em um conjunto de dimensionamento de máquinas virtuais, com um balanceador de carga externo para distribuir requisições da internet entre as instâncias para alta disponibilidade. Para obter mais informações, consulte Implantar NVAs altamente disponíveis.

  • Bloqueie o acesso direto do RDP (Protocolo de Área de Trabalho Remota) ou do Secure Shell (SSH) às VMs que executam o código do aplicativo. Em vez disso, use o Azure Bastion para se conectar com segurança às VMs por meio de endereços IP privados, que fornecem conectividade RDP e SSH. Para obter mais informações, consulte a visão geral do Azure Bastion.

  • Estenda a rede virtual do Azure para sua rede local usando uma VPN (rede virtual privada) site a site ou o Azure ExpressRoute. Para obter mais informações, consulte a arquitetura de referência de rede híbrida.

Próxima etapa