Aplicativo Web escalonável

Rede de Distribuição de Conteúdo
Cognitive Search
Cosmos DB
DNS
Front Door
Funções
Pesquisar
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.This reference architecture shows proven practices for improving scalability and performance in an Azure App Service web application.

Logotipo do GitHub uma implementação de referência para essa arquitetura está disponível no GitHub.GitHub logo A reference implementation for this architecture is available on GitHub.

Aplicativo Web no Azure com escalabilidade melhorada

Baixe um Arquivo Visio dessa arquitetura.Download a Visio file of this architecture.

ArquiteturaArchitecture

Essa arquitetura baseia-se naquela mostrada em Aplicativo Web básico.This architecture builds on the one shown in Basic web application. Ela inclui os seguintes componentes:It includes the following components:

  • Aplicativo Web.Web app. Um aplicativo moderno típico pode incluir um site e uma ou mais APIs Web RESTful.A typical modern application might include both a website and one or more RESTful web APIs. 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.A web API might be consumed by browser clients through AJAX, by native client applications, or by server-side applications. Para ver as considerações sobre o design de APIs Web, consulte Diretrizes de design de API.For considerations on designing web APIs, see API design guidance.
  • Porta frontal.Front Door. A porta frontal é um balanceador de carga de camada 7.Front Door is a layer 7 load balancer. Nessa arquitetura, ele roteia as solicitações HTTP para o front-end da web.In this architecture, it routes HTTP requests to the web front end. A porta frontal também fornece um WAF ( Firewall do aplicativo Web ) que protege o aplicativo contra explorações e vulnerabilidades comuns.Front Door also provides a web application firewall (WAF) that protects the application from common exploits and vulnerabilities.
  • Aplicativo de funções.Function App. Use Aplicativos de funções para executar tarefas em segundo plano.Use Function Apps to run background tasks. As funções são invocadas por um gatilho, como um evento de temporizador ou uma mensagem sendo colocada na fila.Functions are invoked by a trigger, such as a timer event or a message being placed on queue. Para tarefas com estado de longa execução, use Funções Duráveis.For long-running stateful tasks, use Durable Functions.
  • Fila.Queue. 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.In the architecture shown here, the application queues background tasks by putting a message onto an Azure Queue storage queue. A mensagem dispara um aplicativo de funções.The message triggers a function app. Outra opção é usar filas do Barramento de Serviço.Alternatively, you can use Service Bus queues. Para comparação, consulte Filas do Azure e filas do Barramento de Serviço – comparações e contrastes.For a comparison, see Azure Queues and Service Bus queues - compared and contrasted.
  • Cache.Cache. Armazene dados semiestáticos no cache do Azure para Redis.Store semi-static data in Azure Cache for Redis.
  • CDN.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.Use Azure Content Delivery Network (CDN) to cache publicly available content for lower latency and faster delivery of content.
  • Armazenamento de dados.Data storage. Use o Banco de Dados SQL do Azure para dados relacionais.Use Azure SQL Database for relational data. Para dados não relacionais, considere o Cosmos DB.For non-relational data, consider Cosmos DB.
  • Pesquisa cognitiva do Azure.Azure Cognitive Search. Use o Azure pesquisa cognitiva para adicionar funcionalidades de pesquisa, como sugestões de pesquisa, pesquisa difusa e pesquisa específica a um idioma.Use Azure Cognitive Search to add search functionality such as search suggestions, fuzzy search, and language-specific search. O Azure Search normalmente é usado junto com outro armazenamento de dados, especialmente se o armazenamento de dados primário exigir consistência estrita.Azure Search is typically used in conjunction with another data store, especially if the primary data store requires strict consistency. Nessa abordagem, armazene dados autoritativos em outro armazenamento de dados e o índice de pesquisa no Azure Search.In this approach, store authoritative data in the other data store and the search index in Azure Search. O Azure Search também pode ser usado para consolidar um único índice de pesquisa de vários armazenamentos de dados.Azure Search can also be used to consolidate a single search index from multiple data stores.
  • DNS do Azure.Azure DNS. DNS do Azure é um serviço de hospedagem para domínios DNS, que fornece resolução de nomes usando a infraestrutura do Microsoft Azure.Azure DNS is a hosting service for DNS domains, providing name resolution using Microsoft Azure infrastructure. 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.By hosting your domains in Azure, you can manage your DNS records using the same credentials, APIs, tools, and billing as your other Azure services.

RecomendaçõesRecommendations

Seus requisitos podem ser diferentes dos requisitos da arquitetura descrita aqui.Your requirements might differ from the architecture described here. Use as recomendações nesta seção como um ponto inicial.Use the recommendations in this section as a starting point.

Aplicativos do Serviço de AplicativoApp Service apps

É recomendável criar o aplicativo Web e a API web como aplicativos separados do Serviço de Aplicativo.We recommend creating the web application and the web API as separate App Service apps. Esse design permite que você o execute em planos de Serviço de Aplicativo separados, portanto eles podem ser dimensionados de forma independente.This design lets you run them in separate App Service plans so they can be scaled independently. 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.If you don't need that level of scalability initially, you can deploy the apps into the same plan and move them into separate plans later if necessary.

Observação

Para os planos Básico, Standard e Premium, você será cobrado pelas instâncias de VM no plano, não por aplicativo.For the Basic, Standard, and Premium plans, you are billed for the VM instances in the plan, not per app. Consulte Preço do Serviço de AplicativoSee App Service Pricing

CacheCache

Você pode melhorar o desempenho e a escalabilidade usando o cache do Azure para Redis para armazenar em cache alguns dados.You can improve performance and scalability by using Azure Cache for Redis to cache some data. Considere usar o cache do Azure para Redis para:Consider using Azure Cache for Redis for:

  • Dados da transação semi-estáticos.Semi-static transaction data.
  • Estado de sessão.Session state.
  • Saída HTML.HTML output. Isso pode ser útil em aplicativos que renderizam saídas HTML complexas.This can be useful in applications that render complex HTML output.

Para ver diretrizes mais detalhadas sobre como projetar uma estratégia de cache, consulte Diretrizes de armazenamento em cache.For more detailed guidance on designing a caching strategy, see Caching guidance.

CDNCDN

Use a CDN do Azure para armazenar em cache o conteúdo estático.Use Azure CDN to cache static content. 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.The main benefit of a CDN is to reduce latency for users, because content is cached at an edge server that is geographically close to the user. A CDN também pode reduzir a carga no aplicativo, porque esse tráfego não está sendo tratado pelo aplicativo.CDN can also reduce load on the application, because that traffic is not being handled by the application.

Se seu aplicativo é composto principalmente por páginas estáticas, considere usar CDN para armazenar em cache o aplicativo inteiro.If your app consists mostly of static pages, consider using CDN to cache the entire app. 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.Otherwise, put static content such as images, CSS, and HTML files, into Azure Storage and use CDN to cache those files.

Observação

A CDN do Azure não pode fornecer conteúdo que exige autenticação.Azure CDN cannot serve content that requires authentication.

Para ver diretrizes mais detalhadas, consulte Diretriz de CDN (Rede de Distribuição de Conteúdo).For more detailed guidance, see Content Delivery Network (CDN) guidance.

ArmazenamentoStorage

Aplicativos modernos geralmente processam grandes volumes de dados.Modern applications often process large amounts of data. Para dimensionar para a nuvem, é importante escolher o tipo de armazenamento correto.In order to scale for the cloud, it's important to choose the right storage type. Essas são algumas recomendações de linha de base.Here are some baseline recommendations.

O que você deseja armazenarWhat you want to store ExemploExample Armazenamento recomendadoRecommended storage
ArquivosFiles Imagens, documentos, PDFsImages, documents, PDFs Armazenamento do Blobs do AzureAzure Blob Storage
Pares de chave/valorKey/Value pairs Dados de perfil do usuário pesquisado por ID de usuárioUser profile data looked up by user ID Armazenamento da tabela do AzureAzure Table storage
Mensagens curtas destinadas a disparar processamento adicionalShort messages intended to trigger further processing Solicitações de pedidosOrder requests Armazenamento de Filas do Azure, fila do Barramento de Serviço ou tópico do Barramento de ServiçoAzure Queue storage, Service Bus queue, or Service Bus topic
Dados não relacionais com um esquema flexível que exigem consulta básicaNon-relational data with a flexible schema requiring basic querying Catálogo de produtosProduct catalog Banco de dados de documentos, como o Azure Cosmos DB, MongoDB ou Apache CouchDBDocument database, such as Azure Cosmos DB, MongoDB, or Apache CouchDB
Dados relacionais que exigem suporte mais avançado a consultas, esquema estrito ou consistência forteRelational data requiring richer query support, strict schema, and/or strong consistency Estoque de produtosProduct inventory Banco de Dados SQL do AzureAzure SQL Database

Consulte Escolher o armazenamento de dados correto.See Choose the right data store.

Considerações de custoCost considerations

Use o Caching para reduzir a carga em servidores que fornecem conteúdo que não é alterado com frequência.Use caching to reduce the load on servers that serve content that doesn't change frequently. Todo ciclo de processamento de uma página pode impactar o custo porque consome computação, memória e largura de banda.Every render cycle of a page can impact cost because it consumes compute, memory, and bandwidth. 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.Those costs can be reduced significantly by using caching, especially for static content services, such as JavaScript single-page apps and media streaming content.

Se seu aplicativo tiver conteúdo estático, use a CDN para diminuir a carga nos servidores de front-end.If your app has static content, use CDN to decrease the load on the front end servers. Para dados que não são alterados com frequência, use o cache do Azure para Redis.For data that doesn't change frequently, use Azure Cache for Redis.

Aplicativos sem estado que são configurados para dimensionamento automático são mais econômicos do que aplicativos com estado.Stateless apps that are configured for autoscaling are more cost effective than stateful apps. Para um aplicativo ASP.NET, armazene o estado de sessão na memória com o cache do Azure para Redis.For an ASP.NET application, store your session state in-memory with Azure Cache for Redis. Para obter mais informações, consulte provedor de estado de sessão ASP.net para o cache do Azure para Redis.For more information, see ASP.NET Session State Provider for Azure Cache for 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.Another option is to use Cosmos DB as a backend state store through a session state provider. Consulte suporte Azure Cosmos DB e Azure Redis.See Support Azure Cosmos DB and Azure Redis.

Para obter mais informações, consulte a seção de custo no Microsoft Azure Well-Architected Framework.For more information, see the cost section in the 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.Consider placing a function app into a dedicated App Service plan so that background tasks don't run on the same instances that handle HTTP requests. 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.If background tasks run intermittently, consider using a consumption plan, which is billed based on the number of executions, rather than hourly.

Use a calculadora de preços para estimar os custos.Use the pricing calculator to estimate costs.

Considerações sobre escalabilidadeScalability considerations

Um grande benefício do Serviço de Aplicativo do Azure é a capacidade de dimensionar o aplicativo com base na carga.A major benefit of Azure App Service is the ability to scale your application based on load. Aqui estão algumas considerações para ter em mente ao planejar dimensionar seu aplicativo.Here are some considerations to keep in mind when planning to scale your application.

Aplicativo de Serviço de AplicativoApp Service app

Se sua solução inclui vários aplicativos do Serviço de Aplicativo, considere implantá-los em planos de Serviço de Aplicativo separados.If your solution includes several App Service apps, consider deploying them to separate App Service plans. Essa abordagem permite redimensioná-los independentemente por serem executados em instâncias separadas.This approach enables you to scale them independently because they run on separate instances.

Banco de Dados SQLSQL Database

Aumente a escalabilidade de um banco de dados SQL fragmentando o banco de dados.Increase scalability of a SQL database by sharding the database. Fragmentação refere-se ao particionamento horizontal do banco de dados.Sharding refers to partitioning the database horizontally. A fragmentação permite aumentar o banco de dados usando as ferramentas de Banco de Dados Elástico.Sharding allows you to scale out the database horizontally using Elastic Database tools. As possíveis vantagens da fragmentação são:Potential benefits of sharding include:

  • Melhor taxa de transferência de transações.Better transaction throughput.
  • Consultas podem ser executadas mais rapidamente em um subconjunto dos dados.Queries can run faster over a subset of the data.

Porta da frente do AzureAzure Front Door

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.Front Door can perform SSL offload and also reduces the total number of TCP connections with the backend web app. Isso melhora a escalabilidade, pois o aplicativo Web gerencia um volume menor de Handshakes SSL e conexões TCP.This improves scalability because the web app manages a smaller volume of SSL handshakes and TCP connections. 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.These performance gains apply even if you forward the requests to the web app as HTTPS, due to the high level of connection reuse.

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.Azure Search removes the overhead of performing complex data searches from the primary data store, and it can scale to handle load. Consulte Dimensionar os níveis de recursos para cargas de trabalho de consulta e indexação no Azure Search.See Scale resource levels for query and indexing workloads in Azure Search.

Considerações sobre segurançaSecurity considerations

Esta seção lista as considerações sobre segurança específicas dos serviços do Azure descritos neste artigo.This section lists security considerations that are specific to the Azure services described in this article. Não é uma lista completa de práticas recomendadas de segurança para aplicativos Web.It's not a complete list of security best practices for web applications. Para obter considerações de segurança adicionais, consulte proteger um aplicativo no serviço de Azure app.For additional security considerations, see Secure an app in Azure App Service.

Restringir o tráfego de entradaRestrict incoming traffic

Configure o aplicativo para aceitar o tráfego somente da porta frontal.Configure the application to accept traffic only from Front Door. Isso garante que todo o tráfego passará pelo WAF antes de alcançar o aplicativo.This ensures that all traffic goes through the WAF before reaching the app. Para obter mais informações, consulte como fazer bloquear o acesso ao meu back-end somente para a porta frontal do Azure?For more information, see How do I lock down the access to my backend to only Azure Front Door?

CORS (Compartilhamento de Recursos entre Origens)Cross-Origin Resource Sharing (CORS)

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.If you create a website and web API as separate apps, the website cannot make client-side AJAX calls to the API unless you enable CORS.

Observação

A segurança do navegador impede que uma página da Web envie solicitações do AJAX para outro domínio.Browser security prevents a web page from making AJAX requests to another domain. Essa restrição se chama política da mesma origem e impede que um site mal-intencional leia dados confidenciais de outro site.This restriction is called the same-origin policy, and prevents a malicious site from reading sensitive data from another 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.CORS is a W3C standard that allows a server to relax the same-origin policy and allow some cross-origin requests while rejecting others.

Os Serviços de Aplicativos têm suporte interno para o CORS, sem precisar escrever nenhum código de aplicativo.App Services has built-in support for CORS, without needing to write any application code. Consulte Consumir um aplicativo de API do JavaScript usando CORS.See Consume an API app from JavaScript using CORS. Adicione o site à lista de origens permitidas para API.Add the website to the list of allowed origins for the API.

Criptografia do Banco de Dados SQLSQL Database encryption

Use Transparent Data Encryption se você precisa criptografar dados em repouso no banco de dados.Use Transparent Data Encryption if you need to encrypt data at rest in the database. 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.This feature performs real-time encryption and decryption of an entire database (including backups and transaction log files) and requires no changes to the application. 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.Encryption does add some latency, so it's a good practice to separate the data that must be secure into its own database and enable encryption only for that database.

Considerações de DevOpsDevOps considerations

Implantação de front-endFront-end deployment

Essa arquitetura se baseia em uma mostrada no aplicativo Web básico, consulte a seção considerações de DevOps.This architecture builds on the one shown in Basic web application, see the DevOps considerations section.

Próximas etapasNext steps