Melhorar a escalabilidade numa aplicação web do AzureImprove scalability in an Azure web application

Esta arquitetura de referência mostra práticas comprovadas para melhorar a escalabilidade e o desempenho numa aplicação Web do Serviço de Aplicações do Azure.This reference architecture shows proven practices for improving scalability and performance in an Azure App Service web application.

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

Aplicação Web no Azure com escalabilidade melhorada

Transferir um ficheiro do Visio desta arquitetura.Download a Visio file of this architecture.

ArquiteturaArchitecture

Esta arquitetura baseia-se na mostrada na Aplicação Web Básica.This architecture builds on the one shown in Basic web application. Inclui os seguintes componentes:It includes the following components:

  • Grupo de recursos.Resource group. Um grupo de recursos é um contentor lógico de recursos do Azure.A resource group is a logical container for Azure resources.
  • Aplicação Web.Web app. Uma aplicação moderna típica 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 por clientes de browsers através de AJAX, por aplicações clientes nativas ou por aplicações 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 obter as considerações sobre a conceção das APIs Web, veja Orientações de design da API.For considerations on designing web APIs, see API design guidance.
  • Aplicação de função.Function App. Uso [aplicações Function App] functions para executar tarefas em segundo plano.Use Function Apps to run background tasks. As funções são chamadas por um acionador, como um evento de temporizador ou uma mensagem a ser colocada na fila.Functions are invoked by a trigger, such as a timer event or a message being placed on queue. Para tarefas de monitorização de estado de execução longa, utilize funções duráveis.For long-running stateful tasks, use Durable Functions.
  • Fila.Queue. Na arquitetura mostrada aqui, a aplicação coloca as tarefas em segundo plano em fila ao colocar mensagens numa fila 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 aciona uma aplicação de funções.The message triggers a function app. Em alternativa, pode utilizar filas do Service Bus.Alternatively, you can use Service Bus queues. Para uma comparação, veja Filas do Azure e filas do Service Bus - comparação e contraste.For a comparison, see Azure Queues and Service Bus queues - compared and contrasted.
  • Cache.Cache. Armazene dados semiestáticos na Cache de Redis do Azure.Store semi-static data in Azure Redis Cache.
  • CDN.CDN. Utilize a Rede de Entrega de Conteúdos (CDN) do Azure para colocar em cache conteúdo publicamente disponível para uma menor latência e uma entrega de conteúdos mais rápida.Use Azure Content Delivery Network (CDN) to cache publicly available content for lower latency and faster delivery of content.
  • Armazenamento de dados.Data storage. Utilize a Base de Dados SQL do Azure para os dados relacionais.Use Azure SQL Database for relational data. Para dados não relacionais, considere Cosmos DB.For non-relational data, consider Cosmos DB.
  • Azure Search.Azure Search. Utilize o Azure Search para adicionar funcionalidades de pesquisa, tal como sugestões de pesquisa, pesquisas difusas e pesquisas específicas de idiomas.Use Azure Search to add search functionality such as search suggestions, fuzzy search, and language-specific search. O Azure Search é normalmente utilizado em conjunto com outro arquivo de dados, especialmente se o arquivo de dados primário exigir consistência rigorosa.Azure Search is typically used in conjunction with another data store, especially if the primary data store requires strict consistency. Nesta abordagem, armazene dados autoritativos no outro arquivo 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 serve para consolidar um único índice de pesquisa a partir de vários arquivos de dados.Azure Search can also be used to consolidate a single search index from multiple data stores.
  • DNS do Azure.Azure DNS. O DNS do Azure é um serviço de alojamento dos domínios DNS que fornece resolução de nomes através da infraestrutura do Microsoft Azure.Azure DNS is a hosting service for DNS domains, providing name resolution using Microsoft Azure infrastructure. Ao alojar os seus domínios no Azure, pode gerir os recursos DNS com as mesmas credenciais, APIs, ferramentas e faturação dos 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.
  • Gateway de aplicação.Application gateway. Gateway de aplicação é um balanceador de carga de camada 7.Application Gateway is a layer 7 load balancer. Nesta arquitetura, este encaminha os pedidos HTTP para o front-end da web.In this architecture, it routes HTTP requests to the web front end. Gateway de aplicação também fornece um firewall de aplicações web (WAF) que protege a aplicação de exploits e vulnerabilidades comuns.Application Gateway also provides a web application firewall (WAF) that protects the application from common exploits and vulnerabilities.

RecomendaçõesRecommendations

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

Aplicações do Serviço de AplicaçõesApp Service apps

Recomendamos que crie a aplicação Web e a API Web como aplicações separadas do Serviço de Aplicações.We recommend creating the web application and the web API as separate App Service apps. Esta estrutura permite-lhe executá-las em planos separados do Serviço de Aplicações, pelo que podem ser dimensionadas de forma independente.This design lets you run them in separate App Service plans so they can be scaled independently. Se não precisar desse nível de escalabilidade inicialmente, pode implementar as aplicações no mesmo plano e movê-las 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.

Nota

Para os planos Basic, Standard e Premium, o utilizador é cobrado pelas instâncias de VM no plano, não por aplicação.For the Basic, Standard, and Premium plans, you are billed for the VM instances in the plan, not per app. Veja Preços do Serviço de AplicaçõesSee App Service Pricing

CacheCache

Pode melhorar o desempenho e a escalabilidade com a Cache de Redis do Azure para colocar alguns dados em cache.You can improve performance and scalability by using Azure Redis Cache to cache some data. Considere utilizar a Cache de Redis para:Consider using Redis Cache for:

  • Dados de transação semiestáticos.Semi-static transaction data.
  • Estado da sessão.Session state.
  • Saída HTML.HTML output. Tal pode ser útil em aplicações que compõem uma saída HTML complexa.This can be useful in applications that render complex HTML output.

Para obter orientações mais detalhadas sobre a criação de uma estratégia de colocação em cache, veja Orientações sobre a colocação em cache.For more detailed guidance on designing a caching strategy, see Caching guidance.

CDNCDN

Utilize a CDN do Azure para colocar conteúdo estático em cache.Use Azure CDN to cache static content. O benefício principal de uma CDN é a redução de latência para os utilizadores, uma vez que o conteúdo é colocado em cache num servidor Microsoft Edge geograficamente próximo do utilizador.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 sobre a aplicação pois esse tráfego não está a ser processado pela aplicação.CDN can also reduce load on the application, because that traffic is not being handled by the application.

Se a sua aplicação for composta sobretudo por páginas estáticas, considere utilizar a CDN para colocar em cache a aplicação completa.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, tal como imagens, CSS e ficheiros HTML, no Armazenamento do Microsoft Azure e utilize a CDN para colocar esses ficheiros em cache.Otherwise, put static content such as images, CSS, and HTML files, into Azure Storage and use CDN to cache those files.

Nota

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

Para obter orientações mais detalhadas, veja Orientações da Rede de Entrega de Conteúdos (CDN).For more detailed guidance, see Content Delivery Network (CDN) guidance.

ArmazenamentoStorage

Frequentemente, as aplicações modernas processam grandes quantidades de dados.Modern applications often process large amounts of data. Para dimensionar para a cloud, é importante escolher o tipo de armazenamento correto.In order to scale for the cloud, it's important to choose the right storage type. Veja a seguir algumas recomendações de linha base.Here are some baseline recommendations.

O que pretende armazenarWhat you want to store ExemploExample Armazenamento recomendadoRecommended storage
FicheirosFiles Imagens, documentos, PDFsImages, documents, PDFs Armazenamento de Blobs do AzureAzure Blob Storage
Pares Chave/ValorKey/Value pairs Dados de perfil de utilizador pesquisados por ID de utilizadorUser profile data looked up by user ID Armazenamento de Tabelas do AzureAzure Table storage
Mensagens curtas destinadas a acionar o processamento adicionalShort messages intended to trigger further processing Pedidos de encomendaOrder requests Armazenamento de filas do Azure, fila do Service Bus ou tópico do Service BusAzure Queue storage, Service Bus queue, or Service Bus topic
Dados não relacionais com um esquema flexível que precisam de uma consulta básicaNon-relational data with a flexible schema requiring basic querying Catálogo de produtosProduct catalog Base de dados de documentos, tal como o Azure Cosmos DB, MongoDB ou Apache CouchDBDocument database, such as Azure Cosmos DB, MongoDB, or Apache CouchDB
Dados relacionais que precisam de um suporte de consulta mais rico, esquema restrito e/ou forte consistênciaRelational data requiring richer query support, strict schema, and/or strong consistency Inventário de produtosProduct inventory Base de Dados SQL do AzureAzure SQL Database

Veja Escolher o arquivo de dados correto.See Choose the right data store.

Considerações de escalabilidadeScalability considerations

Uma vantagem principal do Serviço de Aplicações do Azure é a capacidade de dimensionar a aplicação com base na carga.A major benefit of Azure App Service is the ability to scale your application based on load. Seguem-se algumas considerações a lembrar quando planear dimensionar a aplicação.Here are some considerations to keep in mind when planning to scale your application.

Aplicação do Serviço de AplicaçõesApp Service app

Se a sua solução incluir várias aplicações do Serviço de Aplicações, considere implementá-las em planos separados do Serviço de Aplicações.If your solution includes several App Service apps, consider deploying them to separate App Service plans. Esta abordagem permite-lhe dimensioná-las de forma independente, uma vez que são executadas em instâncias separadas.This approach enables you to scale them independently because they run on separate instances.

Da mesma forma, considere colocar uma aplicação de funções no seu próprio plano para que as tarefas em segundo plano não são executados nas mesmas instâncias que processam pedidos de HTTP.Similarly, consider putting a function app into its own plan so that background tasks don't run on the same instances that handle HTTP requests. Se executam o intermitentemente tarefas em segundo plano, considere utilizar um plano de consumo, que é faturado com base no número de execuções, em vez de hora a hora.If background tasks run intermittently, consider using a consumption plan, which is billed based on the number of executions, rather than hourly.

SQL DatabaseSQL Database

Aumente a escalabilidade de uma base de dados SQL através fragmentação da base de dados.Increase scalability of a SQL database by sharding the database. A fragmentação refere-se à criação de partições da base de dados horizontalmente.Sharding refers to partitioning the database horizontally. A fragmentação permite-lhe aumentar horizontalmente a base de dados com as ferramentas da Base de Dados Elástica.Sharding allows you to scale out the database horizontally using Elastic Database tools. Potenciais benefícios da fragmentação:Potential benefits of sharding include:

  • Melhor débito de transação.Better transaction throughput.
  • As consultas podem ser executados mais rapidamente num subconjunto dos dados.Queries can run faster over a subset of the data.

O Azure Search remove a sobrecarga da realização de pesquisas de dados complexas do arquivo de dados primário e pode ser dimensionado para processar carga.Azure Search removes the overhead of performing complex data searches from the primary data store, and it can scale to handle load. Veja Dimensionar níveis de recursos para consulta e indexação de cargas de trabalho no Azure Search.See Scale resource levels for query and indexing workloads in Azure Search.

Considerações de segurançaSecurity considerations

Esta secção lista as considerações de segurança específicas aos 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 das melhores práticas de segurança.It's not a complete list of security best practices. Para algumas considerações de segurança adicionais, veja Proteger uma aplicação Web Java no Serviço de Aplicações do Azure.For some additional security considerations, see Secure an app in Azure App Service.

Partilha de Recursos Transversais à Origem (CORS)Cross-Origin Resource Sharing (CORS)

Se criar um site e uma API Web como aplicações separadas, o site não poderá realizar chamadas de AJAX do lado do cliente para a API, a menos que ative 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.

Nota

A segurança do browser impede que uma página Web realize pedidos de AJAX para outro domínio.Browser security prevents a web page from making AJAX requests to another domain. Esta restrição denomina-se a política de mesma origem e impede que um site malicioso 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 é uma norma W3C que permite a um servidor reduzir a política da mesma origem e permite alguns pedidos de várias origens, ao mesmo tempo que rejeita outros.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 Aplicações possuem um suporte incorporado para CORS, sem que seja preciso escrever qualquer código de aplicação.App Services has built-in support for CORS, without needing to write any application code. Veja Consumir uma aplicação API de JavaScript com CORS.See Consume an API app from JavaScript using CORS. Adicione o site à lista de origens permitidas para a API.Add the website to the list of allowed origins for the API.

Encriptação da Base de Dados SQLSQL Database encryption

Utilize a Encriptação de Dados Transparente se precisar de encriptar dados inativos na base de dados.Use Transparent Data Encryption if you need to encrypt data at rest in the database. Esta funcionalidade realiza a encriptação e desencriptação em tempo real de uma base de dados completa (incluindo cópias de segurança e ficheiros de registo de transações) e não carece de qualquer alteração à aplicação.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 encriptação adiciona alguma latência, pelo que é uma boa prática separar os dados que têm de estar protegidos na sua própria base de dados e ativar a encriptação apenas para essa base de dados.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.