Estilo de arquitetura de N camadasN-tier architecture style

Uma arquitetura de N camadas divide uma aplicação em camadas lógicas e camadas físicas.An N-tier architecture divides an application into logical layers and physical tiers.

Diagrama lógico de um estilo de arquitetura de N camadas

As camadas são uma forma de separar as responsabilidades e gerir as dependências.Layers are a way to separate responsibilities and manage dependencies. Cada camada tem uma responsabilidade específica.Each layer has a specific responsibility. Uma camada superior pode utilizar serviços de uma camada inferior, mas não o contrário.A higher layer can use services in a lower layer, but not the other way around.

As camadas estão separadas fisicamente e são executadas em computadores separados.Tiers are physically separated, running on separate machines. Uma camada pode efetuar uma chamada diretamente para outra camada ou utilizar o serviço de mensagens assíncrono (fila de mensagens).A tier can call to another tier directly, or use asynchronous messaging (message queue). Apesar de ser possível alojar cada camada na sua própria camada, tal não é necessário.Although each layer might be hosted in its own tier, that's not required. É possível alojar várias camadas na mesma camada.Several layers might be hosted on the same tier. A separação física das camadas não só melhora a escalabilidade e a resiliência, como também adiciona latência resultante da comunicação de rede adicional.Physically separating the tiers improves scalability and resiliency, but also adds latency from the additional network communication.

Uma aplicação de três camadas tradicional é composta por uma camada de apresentação, uma camada média e uma camada de base de dados.A traditional three-tier application has a presentation tier, a middle tier, and a database tier. A camada média é opcional.The middle tier is optional. As aplicações mais complexas podem ter mais de três camadas.More complex applications can have more than three tiers. O diagrama acima mostra uma aplicação com duas camadas médias, cada uma com diferentes áreas de funcionalidade encapsuladas.The diagram above shows an application with two middle tiers, encapsulating different areas of functionality.

Uma aplicação de N camadas pode ter uma arquitetura de camadas fechada ou uma arquitetura de camadas aberta:An N-tier application can have a closed layer architecture or an open layer architecture:

  • Numa arquitetura de camadas fechada, uma camada só pode efetuar uma chamada para a camada seguinte imediatamente abaixo.In a closed layer architecture, a layer can only call the next layer immediately down.
  • Numa arquitetura de camadas aberta, uma camada pode efetuar uma chamada para qualquer uma das camadas abaixo dela.In an open layer architecture, a layer can call any of the layers below it.

Uma arquitetura de camadas fechada limita as dependências entre camadas.A closed layer architecture limits the dependencies between layers. No entanto, poderá criar tráfego de rede desnecessário, caso uma camada se limite a passar pedidos para a camada seguinte.However, it might create unnecessary network traffic, if one layer simply passes requests along to the next layer.

Quando utilizar esta arquiteturaWhen to use this architecture

Normalmente, as arquiteturas de N camadas são implementadas como aplicações de infraestrutura como um serviço (IaaS), em que cada camada é executada num conjunto de VMs separado.N-tier architectures are typically implemented as infrastructure-as-service (IaaS) applications, with each tier running on a separate set of VMs. No entanto, uma aplicação de N camadas não precisa de ser uma IaaS pura.However, an N-tier application doesn't need to be pure IaaS. Muitas vezes, é vantajoso utilizar serviços geridos para algumas partes da arquitetura, em especial para a colocação em cache, as mensagens e o armazenamento de dados.Often, it's advantageous to use managed services for some parts of the architecture, particularly caching, messaging, and data storage.

Considere utilizar uma arquitetura de N camadas para:Consider an N-tier architecture for:

  • Aplicações Web simples.Simple web applications.
  • Migrar uma aplicação no local para o Azure com refatorização mínima.Migrating an on-premises application to Azure with minimal refactoring.
  • Desenvolvimento unificado de aplicações na cloud e no local.Unified development of on-premises and cloud applications.

As arquiteturas de N camadas são muito comuns nas tradicionais aplicações no local, pelo que constituem uma opção natural para migrar cargas de trabalho existentes para o Azure.N-tier architectures are very common in traditional on-premises applications, so it's a natural fit for migrating existing workloads to Azure.

BenefíciosBenefits

  • Portabilidade entre as vertentes cloud e no local e entre plataformas na cloud.Portability between cloud and on-premises, and between cloud platforms.
  • Curva de aprendizagem menos acentuada para a maior parte dos programadores.Less learning curve for most developers.
  • Evolução natural face ao modelo de aplicação tradicional.Natural evolution from the traditional application model.
  • Recetividade a um ambiente heterogéneo (Windows/Linux)Open to heterogeneous environment (Windows/Linux)

DesafiosChallenges

  • É fácil acabar por ficar com uma camada média que apenas executa operações CRUD na base de dados, adicionando latência extra sem que isso se traduza em trabalho útil.It's easy to end up with a middle tier that just does CRUD operations on the database, adding extra latency without doing any useful work.
  • A estrutura monolítica impede a implementação independente de funcionalidades.Monolithic design prevents independent deployment of features.
  • A gestão de uma aplicação de IaaS envolve mais trabalho do que gerir uma aplicação que utiliza apenas serviços geridos.Managing an IaaS application is more work than an application that uses only managed services.
  • Pode ser difícil gerir a segurança de rede num sistema de grandes dimensões.It can be difficult to manage network security in a large system.

Melhores práticasBest practices

  • Utilize o dimensionamento automático para processar alterações na carga.Use autoscaling to handle changes in load. Veja Melhores práticas de dimensionamento automático.See Autoscaling best practices.
  • Utilize o sistema de mensagens assíncrono para desassociar as camadas.Use asynchronous messaging to decouple tiers.
  • Semistatic os dados em cache.Cache semistatic data. Veja Melhores práticas de colocação em cache.See Caching best practices.
  • Configurar a camada de base de dados para elevada disponibilidade, através de uma solução como grupos de disponibilidade SQL Server Always On.Configure the database tier for high availability, using a solution such as SQL Server Always On availability groups.
  • Coloque uma firewall de aplicações Web (WAF) entre o front-end e a Internet.Place a web application firewall (WAF) between the front end and the Internet.
  • Coloque cada uma das camadas na sua própria sub-rede e utilize sub-redes como um limite de segurança.Place each tier in its own subnet, and use subnets as a security boundary.
  • Limite o acesso à camada de dados, ao permitir pedidos apenas a partir das camadas médias.Restrict access to the data tier, by allowing requests only from the middle tier(s).

Arquitetura de N camadas em máquinas virtuaisN-tier architecture on virtual machines

Esta secção descreve uma arquitetura de N camadas recomendada em execução nas VMs.This section describes a recommended N-tier architecture running on VMs.

Diagrama físico de uma arquitetura de N camadas

Cada camada é constituída por dois ou mais VMs, colocadas num conjunto de disponibilidade ou conjunto de dimensionamento de máquina virtual.Each tier consists of two or more VMs, placed in an availability set or virtual machine scale set. A existência de várias VMs oferece resiliência em caso de falha de uma VMs.Multiple VMs provide resiliency in case one VM fails. Os balanceadores de carga são utilizados para distribuir os pedidos entre as VMs de uma camada.Load balancers are used to distribute requests across the VMs in a tier. Uma camada pode ser aumentada horizontalmente adicionando mais VMs ao conjunto.A tier can be scaled horizontally by adding more VMs to the pool.

Cada camada também é colocada dentro da sua própria sub-rede, o que significa que os respetivos endereços IP internos ficam abrangidos pelo mesmo intervalo de endereços.Each tier is also placed inside its own subnet, meaning their internal IP addresses fall within the same address range. Torna mais fácil aplicar regras de grupo de segurança de rede e encaminhar as tabelas para camadas individuais.That makes it easy to apply network security group rules and route tables to individual tiers.

As camadas Web e de negócio não têm um estado específico.The web and business tiers are stateless. Qualquer VM pode processar qualquer pedido para essa camada.Any VM can handle any request for that tier. A camada de dados deve ser constituída por uma base de dados replicada.The data tier should consist of a replicated database. Para Windows, recomendamos o SQL Server, usando grupos de disponibilidade Always On para elevada disponibilidade.For Windows, we recommend SQL Server, using Always On availability groups for high availability. Para o Linux, escolha uma base de dados que suporte a replicação, como o Apache Cassandra.For Linux, choose a database that supports replication, such as Apache Cassandra.

Grupos de segurança de rede restringem o acesso a cada camada.Network security groups restrict access to each tier. Por exemplo, a camada de base de dados só permite o acesso a partir da camada de negócio.For example, the database tier only allows access from the business tier.

Para obter mais informações sobre como executar aplicações de N camadas no Azure:For more information about running N-tier applications on Azure:

Considerações adicionaisAdditional considerations

  • As arquiteturas de N camadas não estão limitadas a três camadas.N-tier architectures are not restricted to three tiers. Nas aplicações mais complexas, é comum existirem mais camadas.For more complex applications, it is common to have more tiers. Nesse caso, considere utilizar um encaminhamento de 7 camadas para encaminhar pedidos para uma camada específica.In that case, consider using layer-7 routing to route requests to a particular tier.

  • As camadas demarcam o limite ao nível da escalabilidade, fiabilidade e segurança.Tiers are the boundary of scalability, reliability, and security. Considere ter camadas separadas para serviços com requisitos diferentes nessas áreas.Consider having separate tiers for services with different requirements in those areas.

  • Conjuntos de dimensionamento de máquina virtual de utilização para o dimensionamento automático.Use virtual machine scale sets for autoscaling.

  • Procure pontos na arquitetura onde possa utilizar um serviço gerido sem incorrer numa refatorização significativa.Look for places in the architecture where you can use a managed service without significant refactoring. Em concreto, analise a colocação em cache, o sistema de mensagens, o armazenamento e as bases de dados.In particular, look at caching, messaging, storage, and databases.

  • Para uma maior segurança, coloque uma rede de perímetro à frente da aplicação.For higher security, place a network DMZ in front of the application. A rede de perímetro inclui aplicações virtuais de rede (NVAs) que implementam funcionalidades de segurança, como firewalls e a inspeção de pacotes.The DMZ includes network virtual appliances (NVAs) that implement security functionality such as firewalls and packet inspection. Para obter mais informações, veja Arquitetura de referência de rede de perímetro.For more information, see Network DMZ reference architecture.

  • Para obter elevada disponibilidade, coloque duas ou mais NVAs num conjunto de disponibilidade, com um balanceador de carga externo para distribuir os pedidos de Internet pelas instâncias.For high availability, place two or more NVAs in an availability set, with an external load balancer to distribute Internet requests across the instances. Para obter mais informações, veja Implementar aplicações virtuais de rede de elevada disponibilidade.For more information, see Deploy highly available network virtual appliances.

  • Não permita o acesso direto de RDP ou SSH às VMs que estejam a executar o código da aplicação.Do not allow direct RDP or SSH access to VMs that are running application code. Em vez disso, os operadores devem iniciar sessão numa jumpbox, também denominada anfitrião de bastião.Instead, operators should log into a jumpbox, also called a bastion host. Trata-se de uma VM na rede que os administradores utilizam para ligar as outras VMS.This is a VM on the network that administrators use to connect to the other VMs. A jumpbox tem um grupo de segurança de rede que permite RDP ou SSH apenas a partir de endereços IP públicos aprovados.The jumpbox has a network security group that allows RDP or SSH only from approved public IP addresses.

  • Pode alargar a rede virtual do Azure à sua rede no local através de uma rede de VPNs ou do Azure ExpressRoute.You can extend the Azure virtual network to your on-premises network using a site-to-site virtual private network (VPN) or Azure ExpressRoute. Para obter mais informações, veja Arquitetura de referência de rede híbrida.For more information, see Hybrid network reference architecture.

  • Se a sua organização utiliza o Active Directory para gerir a identidade, será conveniente alargar o ambiente do Active Directory à VNet do Azure.If your organization uses Active Directory to manage identity, you may want to extend your Active Directory environment to the Azure VNet. Para obter mais informações, veja Arquitetura de referência de gestão de identidades.For more information, see Identity management reference architecture.

  • Se precisar de uma disponibilidade mais elevada do que a fornecida pelo SLA do Azure para VMs, replique a aplicação em duas regiões e utilize o Gestor de Tráfego do Azure para a ativação pós-falha.If you need higher availability than the Azure SLA for VMs provides, replicate the application across two regions and use Azure Traffic Manager for failover. Para obter mais informações, veja Executar VMs do Windows em várias regiões ou Executar VMs do Linux em várias regiões.For more information, see Run Windows VMs in multiple regions or Run Linux VMs in multiple regions.