Estilo de arquitetura Web-Fila-TrabalhoWeb-Queue-Worker architecture style

Os componentes principais desta arquitetura são um front-end da Web que serve pedidos de clientes e uma função de trabalho que realiza tarefas com muitos recursos, fluxos de trabalho de execução longa ou tarefas de lote.The core components of this architecture are a web front end that serves client requests, and a worker that performs resource-intensive tasks, long-running workflows, or batch jobs. O front-end da Web comunica com a função de trabalho através de uma fila de mensagens.The web front end communicates with the worker through a message queue.

Diagrama lógico do estilo de arquitetura Web-Queue-Worker

Outros componentes que normalmente são incorporados nesta arquitetura:Other components that are commonly incorporated into this architecture include:

  • Uma ou mais bases de dados.One or more databases.
  • Uma cache para armazenar os valores da base de dados para leituras rápidas.A cache to store values from the database for quick reads.
  • CDN para servir conteúdo estático.CDN to serve static content
  • Serviços remotos, tais como o e-mail ou o serviço SMS.Remote services, such as email or SMS service. Muitas vezes, proporcionados por terceiros.Often these are provided by third parties.
  • Fornecedor de identidade para a autenticação.Identity provider for authentication.

A função Web e a função de trabalho não têm estado.The web and worker are both stateless. O estado da sessão pode ser armazenado numa cache distribuída.Session state can be stored in a distributed cache. Qualquer trabalho de execução longa é realizado de modo assíncrono pela função de trabalho.Any long-running work is done asynchronously by the worker. A função de trabalho pode ser acionada por mensagens na fila ou executada com base numa agenda para o processamento em lotes.The worker can be triggered by messages on the queue, or run on a schedule for batch processing. A função de trabalho é um componente opcional.The worker is an optional component. Se não existirem operações de execução longa, a função de trabalho pode ser omitida.If there are no long-running operations, the worker can be omitted.

O front-end pode ser uma API Web.The front end might consist of a web API. No lado do cliente, a API Web pode ser utilizada por uma aplicação de página única que faz chamadas AJAX ou por uma aplicação cliente nativa.On the client side, the web API can be consumed by a single-page application that makes AJAX calls, or by a native client application.

Quando utilizar esta arquiteturaWhen to use this architecture

Normalmente, a arquitetura Web-Fila-Trabalho é implementada com os serviços de computação geridos, ou seja, o Serviço de Aplicações do Azure ou os Serviços Cloud do Azure.The Web-Queue-Worker architecture is typically implemented using managed compute services, either Azure App Service or Azure Cloud Services.

Considere este estilo de arquitetura para:Consider this architecture style for:

  • Aplicações com um domínio relativamente simples.Applications with a relatively simple domain.
  • Aplicações com alguns fluxos de trabalho de execução longa ou operações em lote.Applications with some long-running workflows or batch operations.
  • Quando quiser utilizar serviços geridos, em vez da infraestrutura como um serviço (IaaS).When you want to use managed services, rather than infrastructure as a service (IaaS).

BenefíciosBenefits

  • Arquitetura relativamente simples e fácil de compreender.Relatively simple architecture that is easy to understand.
  • Facilidade de implementação e gestão.Easy to deploy and manage.
  • Clara separação das preocupações.Clear separation of concerns.
  • O front-end é dissociado da função de trabalho através de mensagens assíncronas.The front end is decoupled from the worker using asynchronous messaging.
  • O front-end e a função de trabalho podem ser dimensionados de forma independente.The front end and the worker can be scaled independently.

DesafiosChallenges

  • Sem uma conceção cuidadosa, o front-end e a função de trabalho podem tornar-se componentes grandes e monolíticos difíceis de manter e atualizar.Without careful design, the front end and the worker can become large, monolithic components that are difficult to maintain and update.
  • Poderão existir dependências ocultas se o front-end e a função de trabalho partilharem esquemas de dados ou módulos de código.There may be hidden dependencies, if the front end and worker share data schemas or code modules.

Melhores práticasBest practices

Web-Fila-Trabalho no Serviço de Aplicações do AzureWeb-Queue-Worker on Azure App Service

Esta secção descreve uma arquitetura Web-Fila-Trabalho recomendada que utiliza o Serviço de Aplicações do Azure.This section describes a recommended Web-Queue-Worker architecture that uses Azure App Service.

Diagrama físico de estilo de arquitetura Web-Queue-Worker

O front-end é implementado como uma aplicação Web do Serviço de Aplicações do Azure e a função de trabalho é implementada como um WebJob.The front end is implemented as an Azure App Service web app, and the worker is implemented as a WebJob. A aplicação Web e o WebJob estão associados a um plano do Serviço de Aplicações que proporciona as instâncias de VM.The web app and the WebJob are both associated with an App Service plan that provides the VM instances.

Pode utilizar o Azure Service Bus ou as filas do Armazenamento do Azure para a fila de mensagens.You can use either Azure Service Bus or Azure Storage queues for the message queue. (O diagrama mostra uma fila do Armazenamento do Azure.)(The diagram shows an Azure Storage queue.)

A Cache de Redis do Azure armazena o estado da sessão e outros dados que precisam de um acesso de baixa latência.Azure Redis Cache stores session state and other data that needs low latency access.

O CDN do Azure serve para colocar em cache o conteúdo estático, como imagens, CSS ou HTML.Azure CDN is used to cache static content such as images, CSS, or HTML.

Para o armazenamento, escolha as tecnologias de armazenamento que melhor se adequam às necessidades da aplicação.For storage, choose the storage technologies that best fit the needs of the application. Poderá utilizar várias tecnologias de armazenamento (persistência poliglota).You might use multiple storage technologies (polyglot persistence). Para ilustrar esta ideia, o diagrama mostra a Base de Dados SQL do Azure e o Azure Cosmos DB.To illustrate this idea, the diagram shows Azure SQL Database and Azure Cosmos DB.

Para obter mais detalhes, veja App Service web application reference architecture (Arquitetura de referência da aplicação do Serviço de Aplicações).For more details, see App Service web application reference architecture.

Considerações adicionaisAdditional considerations

  • Nem todas as transações têm de passar pela fila e pela função de trabalho para o armazenamento.Not every transaction has to go through the queue and worker to storage. O front-end da Web pode executar operações de leitura/escrita simples diretamente.The web front end can perform simple read/write operations directly. As funções de trabalho foram concebidas para tarefas com muitos recursos ou fluxos de trabalho de execução longa.Workers are designed for resource-intensive tasks or long-running workflows. Em alguns casos, pode nem precisar de uma função de trabalho.In some cases, you might not need a worker at all.

  • Utilize a funcionalidade de dimensionamento automático incorporado do Serviço de Aplicações para aumentar horizontalmente o número de instâncias de VM.Use the built-in autoscale feature of App Service to scale out the number of VM instances. Se a carga na aplicação seguir os padrões previsíveis, utilize o dimensionamento automático baseado numa agenda.If the load on the application follows predictable patterns, use schedule-based autoscale. Se a carga for imprevisível, utilize regras de dimensionamento automático baseado em métricas.If the load is unpredictable, use metrics-based autoscaling rules.

  • Considere colocar a aplicação Web e o WebJob em planos do Serviço de Aplicações separadas.Consider putting the web app and the WebJob into separate App Service plans. Dessa forma, estes são alojados em instâncias de VM separadas e podem ser dimensionados de forma independente.That way, they are hosted on separate VM instances and can be scaled independently.

  • Utilize planos do Serviço de Aplicações separados para a produção e o teste.Use separate App Service plans for production and testing. Caso contrário, se utilizar o mesmo plano para a produção e o teste, significa que os seus testes estão em execução nas VMs de produção.Otherwise, if you use the same plan for production and testing, it means your tests are running on your production VMs.

  • Utilize blocos de implementação para gerir implementações.Use deployment slots to manage deployments. Deste modo, permite-lhe implementar uma versão atualizada para um bloco de teste e, em seguida, trocar para a nova versão.This lets you to deploy an updated version to a staging slot, then swap over to the new version. Também permite voltar para a versão anterior, caso tenha havido um problema com a atualização.It also lets you swap back to the previous version, if there was a problem with the update.