Aplicativo Web escalonável

Rede de Distribuição de Conteúdo
Cognitive Search
Cosmos DB
DNS
Front Door
Funções
Search
Armazenamento
Banco de Dados SQL

Essa arquitetura de referência mostra práticas comprovadas para melhorar a escalabilidade e o desempenho em um aplicativo Web do Serviço de Aplicativo do Azure.

Logotipo do GitHub uma implementação de referência para essa arquitetura está disponível no GitHub.

Aplicativo Web no Azure com escalabilidade melhorada

Baixe um Arquivo Visio dessa arquitetura.

Arquitetura

Essa arquitetura baseia-se naquela mostrada em Aplicativo Web básico. Ela inclui os seguintes componentes:

  • Aplicativo Web. Um aplicativo moderno típico pode incluir um site e uma ou mais APIs Web RESTful. Uma API Web pode ser consumida pelos clientes de navegador por meio de AJAX, por aplicativos cliente nativos ou por aplicativos do lado do servidor. Para ver as considerações sobre o design de APIs Web, consulte Diretrizes de design de API.
  • Porta frontal. A porta frontal é um balanceador de carga de camada 7. Nessa arquitetura, ele roteia as solicitações HTTP para o front-end da web. A porta frontal também fornece um WAF ( Firewall do aplicativo Web ) que protege o aplicativo contra explorações e vulnerabilidades comuns.
  • Aplicativo de funções. Use Aplicativos de funções para executar tarefas em segundo plano. As funções são invocadas por um gatilho, como um evento de temporizador ou uma mensagem sendo colocada na fila. Para tarefas com estado de longa execução, use Funções Duráveis.
  • Fila. Na arquitetura mostrada aqui, o aplicativo coloca tarefas na fila em segundo plano, posicionando uma mensagem em uma fila do Armazenamento de Filas do Azure. A mensagem dispara um aplicativo de funções. Outra opção é usar filas do Barramento de Serviço. Para comparação, consulte Filas do Azure e filas do Barramento de Serviço – comparações e contrastes.
  • Cache. Armazene dados semiestáticos no cache do Azure para Redis.
  • CDN. Use a CDN (Rede de Distribuição de Conteúdo do Microsoft Azure) para armazenar em cache o conteúdo disponível publicamente para latência mais baixa e distribuição mais rápida do conteúdo.
  • Armazenamento de dados. Use o Banco de Dados SQL do Azure para dados relacionais. Para dados não relacionais, considere o Cosmos DB.
  • Pesquisa cognitiva do Azure. Use o Azure pesquisa cognitiva para adicionar funcionalidades de pesquisa, como sugestões de pesquisa, pesquisa difusa e pesquisa específica a um idioma. O Azure Search normalmente é usado junto com outro armazenamento de dados, especialmente se o armazenamento de dados primário exigir consistência estrita. Nessa abordagem, armazene dados autoritativos em outro armazenamento de dados e o índice de pesquisa no Azure Search. O Azure Search também pode ser usado para consolidar um único índice de pesquisa de vários armazenamentos de dados.
  • DNS do Azure. DNS do Azure é um serviço de hospedagem para domínios DNS, que fornece resolução de nomes usando a infraestrutura do Microsoft Azure. Ao hospedar seus domínios no Azure, você pode gerenciar seus registros DNS usando as mesmas credenciais, APIs, ferramentas e cobrança que seus outros serviços do Azure.

Recomendações

Seus requisitos podem ser diferentes dos requisitos da arquitetura descrita aqui. Use as recomendações nesta seção como um ponto inicial.

Aplicativos do Serviço de Aplicativo

É recomendável criar o aplicativo Web e a API web como aplicativos separados do Serviço de Aplicativo. Esse design permite que você o execute em planos de Serviço de Aplicativo separados, portanto eles podem ser dimensionados de forma independente. Se você não precisar desse nível de escalabilidade inicialmente, poderá implantar os aplicativos no mesmo plano e movê-los para planos separados posteriormente, se necessário.

Observação

Para os planos Básico, Standard e Premium, você será cobrado pelas instâncias de VM no plano, não por aplicativo. Consulte Preço do Serviço de Aplicativo

Cache

Você pode melhorar o desempenho e a escalabilidade usando o cache do Azure para Redis para armazenar em cache alguns dados. Considere usar o cache do Azure para Redis para:

  • Dados da transação semi-estáticos.
  • Estado de sessão.
  • Saída HTML. Isso pode ser útil em aplicativos que renderizam saídas HTML complexas.

Para ver diretrizes mais detalhadas sobre como projetar uma estratégia de cache, consulte Diretrizes de armazenamento em cache.

CDN

Use a CDN do Azure para armazenar em cache o conteúdo estático. A principal vantagem de uma CDN é reduzir a latência para os usuários, porque o conteúdo é armazenado em cache em um servidor de borda geograficamente próximo do usuário. A CDN também pode reduzir a carga no aplicativo, porque esse tráfego não está sendo tratado pelo aplicativo.

Se seu aplicativo é composto principalmente por páginas estáticas, considere usar CDN para armazenar em cache o aplicativo inteiro. Caso contrário, coloque o conteúdo estático, como imagens, CSS e arquivos HTML, no Armazenamento do Azure e use a CDN para armazenar em cache esses arquivos.

Observação

A CDN do Azure não pode fornecer conteúdo que exige autenticação.

Para ver diretrizes mais detalhadas, consulte Diretriz de CDN (Rede de Distribuição de Conteúdo).

Armazenamento

Aplicativos modernos geralmente processam grandes volumes de dados. Para dimensionar para a nuvem, é importante escolher o tipo de armazenamento correto. Essas são algumas recomendações de linha de base.

O que você deseja armazenar Exemplo Armazenamento recomendado
Arquivos Imagens, documentos, PDFs Armazenamento do Blobs do Azure
Pares de chave/valor Dados de perfil do usuário pesquisado por ID de usuário Armazenamento da tabela do Azure
Mensagens curtas destinadas a disparar processamento adicional Solicitações de pedidos Armazenamento de Filas do Azure, fila do Barramento de Serviço ou tópico do Barramento de Serviço
Dados não relacionais com um esquema flexível que exigem consulta básica Catálogo de produtos Banco de dados de documentos, como o Azure Cosmos DB, MongoDB ou Apache CouchDB
Dados relacionais que exigem suporte mais avançado a consultas, esquema estrito ou consistência forte Estoque de produtos Banco de Dados SQL do Azure

Consulte Escolher o armazenamento de dados correto.

Considerações de custo

Use o Caching para reduzir a carga em servidores que fornecem conteúdo que não é alterado com frequência. Todo ciclo de processamento de uma página pode impactar o custo porque consome computação, memória e largura de banda. Esses custos podem ser reduzidos significativamente usando o Caching, especialmente para serviços de conteúdo estático, como aplicativos de página única JavaScript e conteúdo de streaming de mídia.

Se seu aplicativo tiver conteúdo estático, use a CDN para diminuir a carga nos servidores de front-end. Para dados que não são alterados com frequência, use o cache do Azure para Redis.

Aplicativos sem estado que são configurados para dimensionamento automático são mais econômicos do que aplicativos com estado. Para um aplicativo ASP.NET, armazene o estado de sessão na memória com o cache do Azure para Redis. Para obter mais informações, consulte provedor de estado de sessão ASP.net para o cache do Azure para Redis. Outra opção é usar Cosmos DB como um armazenamento de estado de back-end por meio de um provedor de estado de sessão. Consulte suporte Azure Cosmos DB e Azure Redis.

Para obter mais informações, consulte a seção de custo no Microsoft Azure Well-Architected Framework.

Considere colocar um aplicativo de funções em um plano de serviço de aplicativo dedicado para que as tarefas em segundo plano não sejam executadas nas mesmas instâncias que manipulam solicitações HTTP. Se as tarefas em segundo plano forem executadas de maneira intermitente, considere o uso de um plano de consumo, que é cobrado com base na quantidade de execuções e não por hora.

Use a calculadora de preços para estimar os custos.

Considerações sobre escalabilidade

Um grande benefício do Serviço de Aplicativo do Azure é a capacidade de dimensionar o aplicativo com base na carga. Aqui estão algumas considerações para ter em mente ao planejar dimensionar seu aplicativo.

Aplicativo de Serviço de Aplicativo

Se sua solução inclui vários aplicativos do Serviço de Aplicativo, considere implantá-los em planos de Serviço de Aplicativo separados. Essa abordagem permite redimensioná-los independentemente por serem executados em instâncias separadas.

Banco de Dados SQL

Aumente a escalabilidade de um banco de dados SQL fragmentando o banco de dados. Fragmentação refere-se ao particionamento horizontal do banco de dados. A fragmentação permite aumentar o banco de dados usando as ferramentas de Banco de Dados Elástico. As possíveis vantagens da fragmentação são:

  • Melhor taxa de transferência de transações.
  • Consultas podem ser executadas mais rapidamente em um subconjunto dos dados.

Porta da frente do Azure

A porta frontal pode executar o descarregamento de SSL e também reduz o número total de conexões TCP com o aplicativo Web de back-end. Isso melhora a escalabilidade, pois o aplicativo Web gerencia um volume menor de Handshakes SSL e conexões TCP. Esses ganhos de desempenho se aplicam mesmo se você encaminhar as solicitações para o aplicativo Web como HTTPS, devido ao alto nível de reutilização de conexão.

O Azure Search remove a sobrecarga de execução de pesquisas de dados complexas de armazenamento de dados primário, podendo ser dimensionado para lidar com a carga. Consulte Dimensionar os níveis de recursos para cargas de trabalho de consulta e indexação no Azure Search.

Considerações sobre segurança

Esta seção lista as considerações sobre segurança específicas dos serviços do Azure descritos neste artigo. Não é uma lista completa de práticas recomendadas de segurança para aplicativos Web. Para obter considerações de segurança adicionais, consulte proteger um aplicativo no serviço de Azure app.

Restringir o tráfego de entrada

Configure o aplicativo para aceitar o tráfego somente da porta frontal. Isso garante que todo o tráfego passará pelo WAF antes de alcançar o aplicativo. Para obter mais informações, consulte como fazer bloquear o acesso ao meu back-end somente para a porta frontal do Azure?

CORS (Compartilhamento de Recursos entre Origens)

Se você criar um site e a API Web como aplicativos separados, o site não poderá fazer chamadas AJAX no lado do cliente para a API, a menos que você habilite o CORS.

Observação

A segurança do navegador impede que uma página da Web envie solicitações do AJAX para outro domínio. Essa restrição se chama política da mesma origem e impede que um site mal-intencional leia dados confidenciais de outro site. O CORS é um padrão W3C que possibilita a um servidor relaxar a política de mesma origem e permitir algumas solicitações entre origens enquanto rejeita outras.

Os Serviços de Aplicativos têm suporte interno para o CORS, sem precisar escrever nenhum código de aplicativo. Consulte Consumir um aplicativo de API do JavaScript usando CORS. Adicione o site à lista de origens permitidas para API.

Criptografia do Banco de Dados SQL

Use Transparent Data Encryption se você precisa criptografar dados em repouso no banco de dados. Esse recurso executa criptografia em tempo real e descriptografia de um banco de dados inteiro (incluindo backups e arquivos de log de transações) e não requer alterações no aplicativo. A criptografia causa certa latência, portanto, é uma prática recomendada separar os dados que devem ser protegidos em seu próprio banco de dados e habilitar a criptografia apenas para ele.

Considerações de DevOps

Implantação de front-end

Essa arquitetura se baseia em uma mostrada no aplicativo Web básico, consulte a seção considerações de DevOps.

Próximas etapas