Partilhar via


estilo de arquitetura Web-Queue-Worker

Os componentes centrais desta arquitetura são uma interface web que gere pedidos de clientes e um trabalhador que realiza tarefas intensivas em recursos, fluxos de trabalho de longa duração ou trabalhos em lote. A interface web comunica com o trabalhador através de uma fila de mensagens.

Um diagrama lógico que mostra a arquitetura WebQueue-Worker.

Os seguintes componentes são normalmente incorporados nesta arquitetura:

  • Uma ou mais bases de dados

  • Uma cache para armazenar valores da base de dados para leituras rápidas

  • Uma rede de distribuição de conteúdos para servir conteúdo estático

  • Serviços remotos, como email ou Short Message Service (SMS), que normalmente fornecem fornecedores de serviços não Microsoft

  • Um fornecedor de identidade para autenticação

A web e o worker são ambos sem estado, e o estado da sessão pode ser armazenado numa cache distribuída. O trabalhador gere trabalhos de longa duração de forma assíncrona. Mensagens na fila podem iniciar o trabalhador, ou um horário pode executá-lo para processamento em lote. O worker é opcional se a aplicação não tiver operações de longa duração.

A interface pode incluir uma API web. Uma aplicação de página única pode consumir a API web através de chamadas AJAX, ou uma aplicação cliente nativa pode consumi-la diretamente.

Quando usar esta arquitetura

A arquitetura Web-Queue-Worker é tipicamente implementada utilizando serviços de computação gerida como Azure App Service ou Azure Kubernetes Service.

Considere esta arquitetura para os seguintes casos de uso:

  • Aplicações que têm um domínio relativamente simples

  • Aplicações que têm fluxos de trabalho de longa duração ou operações em lote

  • Cenários em que prefere serviços geridos em vez de infraestrutura como serviço (IaaS)

Benefícios

  • Uma arquitetura simples e fácil de seguir

  • Implementação e gestão com esforço mínimo

  • Separação clara de responsabilidades

  • Desacoplamento do front-end e do worker através de mensagens assíncronas

  • Escalonamento independente da frente e do operador

Desafios

  • Sem um design cuidadoso, a interface e o worker podem tornar-se componentes monolíticos grandes que são difíceis de manter e atualizar.

  • Se a interface e o trabalhador partilharem esquemas de dados ou módulos de código, podem existir dependências ocultas.

  • A interface web pode falhar depois de persistir na base de dados mas antes de enviar mensagens para a fila, o que causa problemas de consistência porque o trabalhador não cumpre a sua parte da lógica. Para mitigar este problema, pode usar técnicas como o padrão Transactional Outbox, que exige que as mensagens de saída passem primeiro por uma fila separada. A biblioteca NServiceBus Transactional Session suporta esta técnica.

Melhores práticas

Web-Queue-Worker no Serviço de Aplicações

Esta secção descreve uma arquitetura recomendada de Web-Queue-Worker que utiliza o App Service.

Diagrama que mostra a arquitetura WebQueue-Worker.

Descarregue um ficheiro Visio desta arquitetura.

Workflow

  • A interface frontal é implementada como uma aplicação web Serviço de Aplicações, e o worker é implementado como uma aplicação Azure Functions. A aplicação web e a aplicação Functions estão ambas associadas a um plano de Serviços de Aplicações que fornece as instâncias da máquina virtual (VM).

  • Pode usar filas do Azure Service Bus ou filas do Azure Storage para a fila de mensagens. O diagrama anterior utiliza uma fila de armazenamento.

  • O Azure Managed Redis armazena o estado da sessão e outros dados que requerem acesso de baixa latência.

  • A Azure Content Delivery Network é usada para armazenar em cache conteúdos estáticos como imagens, CSS ou HTML.

  • Para armazenamento, escolha tecnologias que melhor se adaptem às necessidades da sua aplicação. Esta abordagem, conhecida como persistência poliglota, utiliza múltiplas tecnologias de armazenamento no mesmo sistema para satisfazer diferentes requisitos. Para ilustrar esta ideia, o diagrama mostra tanto Azure SQL Database como Azure Cosmos DB.

Para mais informações, consulte Baseline aplicação web altamente disponível por redundância de zona e Construir aplicações empresariais orientadas por mensagens com NServiceBus e Service Bus.

Outras considerações

  • Nem todas as transações precisam passar pela fila e pelo processo de trabalho até o armazenamento. A interface web pode fazer operações simples de leitura e escrita diretamente. Os trabalhadores são concebidos para tarefas intensivas em recursos ou fluxos de trabalho de longa duração. Em alguns casos, pode nem precisar de um trabalhador.

  • Use a funcionalidade de autoescala incorporada da sua plataforma de computação para escalar o número de instâncias. Se a carga na aplicação seguir padrões previsíveis, use o autoescalonamento baseado em agendamento. Se a carga for imprevisível, use dimensionamento automático baseado em métricas.

  • Considere colocar a aplicação web e a aplicação Functions em planos de App Service separados para que possam escalar de forma independente.

  • Use planos de App Service separados para produção e testes.

  • Utilize os slots de implementação para gerir as implementações. Este método permite-te implementar uma versão atualizada num slot de staging e depois trocar para a nova versão. Também permite voltar à versão anterior se houver algum problema durante a atualização.