Considerações para arquiteturas de N camadas

Concluído

Examinamos o que compõe uma arquitetura de N camadas e implantamos um exemplo de uma arquitetura de três camadas. Vamos explorar alguns dos benefícios e desafios desse estilo de arquitetura e melhores práticas para otimizá-lo quanto ao desempenho e à segurança.

Benefícios

Esse estilo de arquitetura é vantajoso em sua simplicidade. É um padrão de arquitetura bem definido e frequentemente usado, para implantações em nuvem e locais, e pode funcionar com uma ampla variedade de aplicativos.

Ela é uma arquitetura independente de plataforma e se adapta os aplicativos implantados no Windows ou no Linux. Como mostramos em nosso exemplo de ambiente, você pode usar serviços de PaaS ou de IaaS em qualquer camada.

Com o aplicativo separado em camadas, cada camada pode ser escalada, atualizada ou submetida a upgrade independentemente. Se as solicitações para nosso site aumentam, podemos adicionar mais servidores Web à carga sem afetar as outras camadas. Da mesma forma, se as solicitações em relação à nossa camada de dados aumentam, podemos escalar nosso banco de dados para ter mais capacidade de manipular as solicitações.

A separação de rede é um subproduto natural dessa arquitetura. Já que o aplicativo é separado em camadas, devemos isolar cada camada e permitir somente o acesso de rede necessário. A camada de apresentação pode ser exposta à Internet, o banco de dados pode ser totalmente protegido atrás de várias camadas de rede e nossas funções de aplicativo exatamente da mesma maneira. Ao proteger o acesso de rede entre as camadas, podemos reduzir a superfície de ataque do aplicativo e aumentar sua segurança.

Desafios e considerações

Conforme você separa seu aplicativo em várias camadas, evita camadas intermediárias que só executam operações de banco de dados. Cada camada deve adicionar o valor específico. As camadas extras aumentam a complexidade, o tempo de processamento e a latência e, em última análise, causam atrasos para o usuário.

Como as APIs de cada domínio de nível de aplicativo não são separadas em serviços individuais, elas precisam ser escaladas em conjunto. Se um único método de aplicativo exigir mais poder de processamento ou precisar lidar com mais solicitações do que outros, a camada de aplicativo deverá ser expandida como um todo para lidar com a carga, em vez de um serviço individual.

Em alguns casos, você pode desenvolver um aplicativo como uma arquitetura de N camadas, mas ainda fazer implantações como um monólito. Ao separar totalmente cada camada, você deve implantar cada uma delas de forma independente. A separação completa envolve a remoção de dependências compartilhadas e maior dependência das chamadas à API entre as camadas. Quando feito corretamente, isso garante que suas implantações de aplicativo sejam flexíveis.

Os aplicativos em uma arquitetura de N camadas geralmente são implantados em VMs. Essa é uma boa primeira etapa, mas desenvolver seu aplicativo para usar os serviços de PaaS fornece diversos benefícios em segurança, escalabilidade e administração. Muitas vezes, esse desenvolvimento é negligenciado e as arquiteturas de N camadas permanecem residentes em VMs.

A arquitetura de N camadas é um estilo de arquitetura clássico, mas em muitos cenários foi substituída por outros padrões de design modernos, como a arquitetura de microsserviços. Geralmente, vale a pena investir um pouco de tempo para avaliar outras arquiteturas para ver se elas são mais adequadas para seu aplicativo.

Melhores práticas para arquiteturas de N camadas

Há várias coisas que você deve fazer para garantir que sua arquitetura de N camadas seja executada com o melhor desempenho. O diagrama a seguir mostra visualmente como você pode fazer melhorias em uma arquitetura de N camadas.

Visualization of N-tier architecture.

Otimizar o desempenho

Vamos analisar maneiras de otimizar uma arquitetura de N camadas para desempenho e segurança.

Dimensionamento automático

Com o aplicativo separado em camadas, podemos usar recursos de nuvem como o dimensionamento automático para adaptar à carga do sistema. Conforme os usuários ou as solicitações aumentam, use o dimensionamento automático em várias camadas para adicionar mais recursos para lidar com solicitações. Conforme as solicitações diminuem, o dimensionamento automático reduz os recursos de computação, além de também reduzir sua fatura. O dimensionamento automático torna fácil garantir que os usuários tenham a melhor experiência e que os custos permaneçam baixos. Os Conjuntos de Dimensionamento de Máquinas Virtuais do Azure podem ser usados para cargas de trabalho baseadas em VM e muitos serviços de PaaS, como o Serviço de Aplicativo do Azure têm recursos de dimensionamento automático internos.

Balanceamento de carga

Ao dimensionar seu aplicativo com o dimensionamento automático, o uso do balanceamento de carga se torna uma parte necessária da sua arquitetura. Com o balanceamento de carga, conforme você adiciona mais recursos de computação à sua camada, eles são adicionados à distribuição do balanceador de carga para aproveitar a potência de processamento adicional. Por outro lado, quando um sistema falha, ele é removido da carga para minimizar o impacto ao usuário por meio de um desempenho ruim ou solicitações com erros. Isso garante que as solicitações do usuário vão para sistemas em um estado de integridade. O Azure Load Balancer é um recurso interno das funcionalidades de rede e o Gateway de Aplicativo fornece uma solução de balanceamento de carga HTTP com mais recursos.

Mensagens

O uso de um serviço de mensagens entre as camadas tem um efeito positivo no desempenho, especialmente nas solicitações que são assíncronas por natureza. O serviço coloca uma mensagem em uma fila, em que ela permanece até que seja processada, deslocando o impacto da carga downstream. Se ocorrer uma interrupção do sistema, um serviço de mensagens garantirá que sua mensagem ainda seja tratada. A mensagem permanece na fila e é processada depois que o sistema volta a ficar online. O Azure tem várias soluções de mensagens à sua escolha, dependendo dos seus requisitos. O Barramento de Serviço do Azure, as filas do Armazenamento do Azure e os Hubs de Eventos do Azure são algumas opções a serem consideradas quando procurar um serviço de mensagens.

Cache de dados

Use um cache para os dados que são acessados com frequência e têm uma baixa taxa de alteração ou para dados que não exigem persistência em longo prazo, como o estado de sessão. Os sistemas de cache ficam entre as camadas e reduzem os tempos de recuperação de dados para esses tipos de dados. O Cache do Azure para Redis é um serviço de PaaS que é adequado para esse cenário.

Otimizar a segurança

A otimização do seu aplicativo visando a segurança costuma ser um trabalho que nunca tem fim. Muito embora o aplicativo esteja separado em camadas, ainda precisa haver práticas de segurança bem planejadas entrelaçadas na arquitetura. Quanto mais camadas são adicionadas, mais você precisa protegê-las e maior é a complexidade introduzida no sistema. Há várias coisas que você deve fazer para garantir que sua arquitetura fornece um ambiente seguro para executar seu aplicativo.

Isolamento da rede

Durante a execução de uma arquitetura de N camadas em VMs, garanta que cada camada esteja em uma sub-rede própria. Essa sub-rede funciona como um limite de segurança, permitindo que você isole a conectividade por meio de listas de controle de acesso de rede. A sub-rede também facilita o gerenciamento, garantindo que novos sistemas na sub-rede recebam as mesmas regras. No Azure, isso é feito nativamente com NSGs (grupos de segurança de rede). Considerações semelhantes devem ser feitas para os serviços de PaaS, mas os recursos de integração de rede variam entre os serviços e devem ser avaliados por conta própria. É uma melhor prática garantir que cada camada só possa se comunicar com a próxima camada abaixo dela. A camada de apresentação deve ser capaz de se comunicar apenas com a camada de aplicativo e a camada de aplicativo deve ser capaz de se comunicar apenas com a camada de dados. Minimizar essa conectividade fornece uma abordagem em camadas para a segurança de rede e melhora a postura geral de segurança de uma arquitetura.

Firewall do aplicativo Web

Com o isolamento de segurança entre as sub-redes em vigor, você deseja garantir que seu front-end publicamente exposto esteja seguro e permita acesso apenas ao que é necessário. Você só deve expor a camada de apresentação ao tráfego de entrada da Internet. Uma tecnologia de WAF (firewall do aplicativo Web) na frente da camada de apresentação aprimora a segurança nessa camada. As WAFs inspecionam o tráfego quanto a atividade mal-intencionada, garantem que as comunicações são criptografadas e alertam você caso algo esteja fora do comum. No Azure, o Gateway de Aplicativo é um balanceador de carga HTTP que tem um WAF interno que você pode habilitar.

Verificar seu conhecimento

1.

Qual das opções a seguir pode ser uma maneira de melhorar o desempenho de um aplicativo em uma arquitetura de N camadas, enquanto os custos são mantidos otimizados?

2.

Qual das seguintes ações aumentaria a segurança de um aplicativo?