Recomendações para o desenvolvimento de trabalhos em segundo plano
Aplica-se a esta recomendação da lista de verificação de confiabilidade do Azure Well-Architected Framework:
RE:07 | Fortaleça a resiliência e a capacidade de recuperação de sua carga de trabalho implementando medidas de autopreservação e autorrecuperação. Crie recursos na solução usando padrões de confiabilidade baseados em infraestrutura e padrões de design baseados em software para lidar com falhas de componentes e erros transitórios. Crie recursos no sistema para detectar falhas de componentes da solução e iniciar automaticamente a ação corretiva enquanto a carga de trabalho continua a operar com funcionalidade total ou reduzida. |
---|
Guias relacionados: Falhas | transitórias Autopreservação
Este guia descreve as recomendações para o desenvolvimento de trabalhos em segundo plano. Trabalhos em segundo plano são executados automaticamente sem a necessidade de interação do usuário. Muitos aplicativos exigem trabalhos em segundo plano que são executados independentemente da interface do usuário.
Alguns exemplos de trabalhos em segundo plano incluem trabalhos em lotes, tarefas de processamento intensivo e processos de longa execução, como fluxos de trabalho. O aplicativo inicia o trabalho e processa solicitações interativas dos usuários. Por exemplo, se um aplicativo precisar gerar miniaturas de imagens que os usuários carregam, um trabalho em segundo plano poderá ser executado para gerar a miniatura e salvá-la no armazenamento. O usuário não precisa esperar que o processo seja concluído. Como outro exemplo, um cliente faz um pedido, que inicia um fluxo de trabalho em segundo plano que processa o pedido. O cliente continua a navegar no aplicativo Web enquanto o trabalho em segundo plano é executado. Após a conclusão do trabalho em segundo plano, ele atualiza os dados do pedido armazenados e envia um e-mail ao cliente para confirmar o pedido.
Trabalhos em segundo plano ajudam a minimizar a carga na interface do usuário do aplicativo, o que melhora a disponibilidade e reduz o tempo de resposta interativo.
Principais estratégias de design
Para escolher qual tarefa designar como um trabalho em segundo plano, considere se a tarefa é executada sem interação do usuário e se a interface do usuário precisa aguardar a conclusão da tarefa. As tarefas que exigem que o usuário ou a interface do usuário aguarde enquanto são executadas normalmente não são trabalhos em segundo plano apropriados.
Avalie a necessidade de trabalhos em segundo plano
Alguns exemplos de trabalhos em segundo plano são:
Trabalhos com uso intensivo de CPU, como cálculos matemáticos ou análises de modelo estrutural.
Trabalhos com uso intensivo de E/S, como executar uma série de transações de armazenamento ou indexar arquivos.
Trabalhos em lote, como atualizações de dados que são feitas todas as noites ou processamentos agendados.
Fluxos de trabalho de longa duração, como atendimento de pedidos ou provisionamento de serviços e sistemas.
Processamento de dados confidenciais que transfere a tarefa para um local mais seguro para processamento. Por exemplo, não convém processar dados confidenciais em um aplicativo Web. Em vez disso, você pode usar um padrão como o padrão Gatekeeper para transferir os dados para um processo em segundo plano isolado que tenha acesso a armazenamento protegido.
Escolha os gatilhos certos
Inicie trabalhos em segundo plano com:
Gatilhos orientados a eventos: um evento, normalmente uma ação do usuário ou uma etapa em um fluxo de trabalho, aciona a tarefa.
Gatilhos controlados por agendamento: um agendamento baseado em um temporizador invoca a tarefa. O trabalho pode ser agendado de forma recorrente ou para uma única execução.
Gatilhos acionados por eventos
Uma ação dispara uma invocação orientada a eventos que inicia a tarefa em segundo plano. Exemplos de gatilhos orientados a eventos incluem:
A interface do usuário ou um trabalho diferente coloca uma mensagem em uma fila, conforme descrito no estilo de arquitetura Web-Queue-Worker. A mensagem contém dados sobre uma ação executada anteriormente, como um cliente que fez um pedido. O trabalho em segundo plano monitora essa fila e detecta a chegada de uma nova mensagem. Ele lê a mensagem e usa os dados da mensagem como entrada para o trabalho em segundo plano. Esse padrão é chamado de comunicação assíncrona baseada em mensagens.
A interface do usuário ou um trabalho diferente salva ou atualiza um valor que está no armazenamento. O trabalho em segundo plano monitora o armazenamento e detecta alterações. Ele lê os dados e os usa como entrada para o trabalho em segundo plano.
A interface do usuário ou um trabalho diferente faz uma solicitação para um ponto de extremidade, como um URI HTTPS ou uma API exposta como um serviço Web. Como parte da solicitação, a interface do usuário ou o trabalho transfere os dados exigidos pela tarefa em segundo plano. O ponto de extremidade ou serviço Web invoca a tarefa em segundo plano, que usa os dados como entrada.
Outros exemplos de tarefas adequadas à invocação controlada por eventos incluem processamento de imagens, fluxos de trabalho, envio de informações para serviços remotos, envio de mensagens de email e provisionamento de novos usuários em aplicativos multilocatários.
Gatilhos acionados por agendamentos
Um temporizador dispara uma invocação orientada por agendamento que inicia a tarefa em segundo plano. Exemplos de gatilhos orientados por agendamento incluem:
Um temporizador que é executado localmente dentro do aplicativo ou como parte do sistema operacional do aplicativo invoca regularmente uma tarefa em segundo plano.
Um temporizador executado em um aplicativo diferente, como os Aplicativos Lógicos do Azure, envia regularmente uma solicitação para uma API ou serviço Web. O serviço Web ou API chama a tarefa em segundo plano.
Um processo ou aplicativo separado inicia um temporizador que invoca a tarefa em segundo plano após um atraso de tempo ou em um horário específico.
Outros exemplos de tarefas adequadas à invocação controlada por agendamento incluem rotinas de processamento em lote (como atualizar listas de produtos relacionados para clientes com base em seu comportamento recente), tarefas rotineiras de processamento de dados (como atualizar índices ou gerar resultados acumulados), análise de dados para relatórios diários, limpeza de retenção de dados e verificações de consistência de dados.
Se você usar uma tarefa orientada por agendamento que deve ser executada como uma única instância, revise as seguintes considerações:
Se a instância de computação que executa o agendador, como uma VM (máquina virtual) que usa tarefas agendadas do Windows, for dimensionada, você estará executando várias instâncias do agendador. Várias instâncias do agendador podem iniciar várias instâncias da tarefa. Para obter mais informações, consulte O que significa idempotente em sistemas de software?
Se as tarefas forem executadas por mais tempo do que o período entre os eventos do agendador, o agendador poderá iniciar outra instância da tarefa enquanto a tarefa anterior é executada.
Retornar dados para a carga de trabalho
Os trabalhos em segundo plano são executados de forma assíncrona em um processo separado, ou mesmo em um local separado, da interface do usuário ou do processo que invocou o trabalho em segundo plano. Idealmente, os trabalhos em segundo plano são operações de disparo e esquecimento . O progresso do tempo de execução não afeta a interface do usuário ou o processo de chamada, o que significa que o processo de chamada não aguarda a conclusão das tarefas. A interface do usuário e o processo de chamada não podem detectar quando a tarefa termina.
Se você precisar que uma tarefa em segundo plano se comunique com a tarefa de chamada para indicar o progresso ou a conclusão, deverá implementar um mecanismo. Alguns exemplos são:
Escreva um valor de indicador de status no armazenamento acessível à interface do usuário ou à tarefa do chamador, que pode monitorar ou verificar esse valor. Outros dados que a tarefa em segundo plano retorna ao chamador podem ser colocados no mesmo armazenamento.
Estabeleça uma fila de resposta que a interface do usuário ou o chamador monitora. A tarefa em segundo plano pode enviar mensagens para a fila que indicam o status. Os dados que a tarefa em segundo plano retorna ao chamador podem ser colocados nas mensagens. Para o Barramento de Serviço do Azure, use as
ReplyTo
propriedades andCorrelationId
para implementar essa funcionalidade.Expor uma API ou um ponto de extremidade da tarefa em segundo plano que a interface do usuário ou o chamador pode acessar para obter informações de status. A resposta pode incluir os dados que a tarefa em segundo plano retorna ao chamador.
Configure a tarefa em segundo plano para chamar de volta para a interface do usuário ou chamador por meio de uma API para indicar o status em pontos predefinidos ou na conclusão. Você pode usar eventos gerados localmente ou um mecanismo de publicação e assinatura. A solicitação ou a carga do evento pode incluir os dados que a tarefa em segundo plano retorna ao chamador.
Trabalhos em segundo plano de partição
Se você incluir trabalhos em segundo plano em uma instância de computação existente, considere como essas alterações afetam os atributos de qualidade da instância de computação e do trabalho em segundo plano. Considere estes fatores para decidir se as tarefas devem ser colocadas com a instância de computação existente ou separá-las em uma instância de computação diferente:
Disponibilidade: as tarefas em segundo plano podem não precisar do mesmo nível de disponibilidade que outras partes do aplicativo, em particular a interface do usuário e as partes que envolvem diretamente a interação do usuário. As tarefas em segundo plano podem ter uma tolerância maior para latência, falhas de conexão repetidas e outros fatores que afetam a disponibilidade porque as operações podem ser enfileiradas. No entanto, deve haver capacidade suficiente para evitar solicitações de backup que podem bloquear filas e afetar todo o aplicativo.
Escalabilidade: as tarefas em segundo plano provavelmente têm requisitos de escalabilidade diferentes em comparação com a interface do usuário e as partes interativas do aplicativo. Talvez seja necessário dimensionar a interface do usuário para atender aos picos de demanda. Tarefas em segundo plano pendentes podem ser executadas durante horários menos ocupados e com menos instâncias de computação.
Resiliência: se uma instância de computação que hospeda apenas tarefas em segundo plano falhar, isso poderá não afetar fatalmente todo o aplicativo. As solicitações para essas tarefas podem ser enfileiradas ou adiadas até que a tarefa esteja disponível. Se a instância de computação ou as tarefas puderem ser reiniciadas dentro de um intervalo apropriado, isso poderá não afetar os usuários do aplicativo.
Segurança: as tarefas em segundo plano podem ter requisitos ou restrições de segurança diferentes em comparação com a interface do usuário ou outras partes do aplicativo. Use uma instância de computação separada para especificar um ambiente de segurança diferente para as tarefas. Para maximizar a segurança e a separação, você também pode usar padrões como o Gatekeeper para isolar as instâncias de computação em segundo plano da interface do usuário.
Desempenho: escolha o tipo de instância de computação para tarefas em segundo plano que corresponda especificamente aos requisitos de desempenho da tarefa. Você pode usar uma opção de computação mais barata se as tarefas não exigirem os mesmos recursos de processamento que a interface do usuário. Ou você pode usar uma instância maior se as tarefas exigirem mais capacidade e recursos.
Capacidade de gerenciamento: as tarefas em segundo plano podem ter um ritmo de desenvolvimento e implantação diferente em comparação com o código do aplicativo principal ou a interface do usuário. Para simplificar as atualizações e o controle de versão, implante tarefas em segundo plano em uma instância de computação separada.
Custo: se você adicionar instâncias de computação para executar tarefas em segundo plano, os custos de hospedagem aumentarão. Considere cuidadosamente a compensação entre mais capacidade e custos extras.
Para obter mais informações, consulte Padrão de eleição de líder e Padrão de consumidores concorrentes.
Evite conflitos de recursos
Se você tiver várias instâncias de um trabalho em segundo plano, elas poderão competir pelo acesso a recursos e serviços, como bancos de dados e armazenamento. Esse acesso simultâneo pode resultar em contenção de recursos, o que pode causar conflitos de disponibilidade de serviço e prejudicar a integridade dos dados que estão no armazenamento. Resolva a contenção de recursos usando uma abordagem de bloqueio pessimista. Essa abordagem impede que instâncias concorrentes de uma tarefa acessem simultaneamente um serviço ou corrompam dados.
Outra abordagem para resolver conflitos é definir tarefas em segundo plano como um singleton, para que apenas uma instância seja executada. No entanto, essa abordagem elimina os benefícios de confiabilidade e desempenho que uma configuração de várias instâncias oferece. Essa desvantagem é especialmente verdadeira se a interface do usuário fornecer trabalho suficiente para manter mais de uma tarefa em segundo plano ocupada.
Verifique se a tarefa em segundo plano pode ser reiniciada automaticamente e se tem capacidade suficiente para lidar com picos de demanda. Aloque uma instância de computação com recursos suficientes, implemente um mecanismo de enfileiramento que armazene solicitações a serem executadas quando a demanda diminuir ou use uma combinação dessas técnicas.
Orquestre várias tarefas
Tarefas em segundo plano podem ser complexas e exigir várias tarefas a serem executadas. Nesses cenários, é comum dividir a tarefa em etapas ou subtarefas discretas menores que vários consumidores podem executar. Os trabalhos de várias etapas são mais eficientes e flexíveis porque as etapas individuais geralmente são reutilizáveis em vários trabalhos. Também é fácil adicionar, remover ou modificar a ordem das etapas.
Pode ser um desafio coordenar várias tarefas e etapas, mas há três padrões comuns para orientar sua solução:
Decomponha uma tarefa em várias etapas reutilizáveis. Um aplicativo pode ser necessário para executar várias tarefas de complexidade diferente nas informações que processa. Uma abordagem direta, mas inflexível, para implementar esse aplicativo é executar esse processamento como um módulo monolítico. Mas essa abordagem provavelmente reduzirá as oportunidades de refatorar o código, otimizá-lo ou reutilizá-lo se o aplicativo exigir partes do mesmo processamento em outro lugar. Para saber mais, confira Padrão de tubos e filtros.
Gerencie a orquestração das etapas de uma tarefa. Um aplicativo pode executar tarefas que compreendem muitas etapas, algumas das quais podem invocar serviços remotos ou acessar recursos remotos. Às vezes, as etapas individuais são independentes umas das outras, mas são orquestradas pela lógica do aplicativo que implementa a tarefa. Para saber mais, confira Padrão do Supervisor do Agente do Agendador.
Gerencie a recuperação para etapas de tarefa que falham. Se uma ou mais das etapas falharem, um aplicativo poderá precisar desfazer o trabalho que uma série de etapas executa, o que juntos define uma operação eventualmente consistente. Para obter mais informações, consulte Padrão de transação de compensação.
Torne os empregos resilientes
Crie tarefas em segundo plano resilientes para fornecer serviços confiáveis para o aplicativo. Ao planejar e projetar tarefas em segundo plano, considere os seguintes pontos:
As tarefas em segundo plano precisam lidar com reinicializações normalmente, sem corromper dados ou introduzir inconsistência no aplicativo. Para tarefas de execução longa ou de várias etapas, considere o uso de pontos de verificação. Use pontos de verificação para salvar o estado dos trabalhos no armazenamento persistente ou como mensagens em uma fila. Por exemplo, você pode armazenar informações de estado em uma mensagem que está em uma fila e atualizar incrementalmente essas informações de estado com o progresso da tarefa. A tarefa pode ser processada a partir do último ponto de verificação conhecido em vez de reiniciar desde o início.
Para filas do Barramento de Serviço, use sessões de mensagem para essa finalidade. Com sessões de mensagem, salve e recupere o estado de processamento do aplicativo usando os métodos SetState e GetState . Para obter mais informações sobre como criar processos e fluxos de trabalho confiáveis de várias etapas, consulte Padrão do Supervisor do Agente do Agendador.
Ao usar filas para se comunicar com as tarefas em segundo plano, as filas podem agir como um buffer para armazenar solicitações enviadas para as tarefas, enquanto o aplicativo estiver com carga maior que o normal. As tarefas podem acompanhar a interface do usuário durante períodos menos ocupados e as reinicializações não bloqueiam a interface do usuário. Para obter mais informações, consulte Padrão de Nivelamento de carga baseado em fila. Se algumas tarefas forem mais importantes do que outras, considere implementar o padrão Fila de Prioridade para garantir que essas tarefas sejam executadas primeiro.
Mensagens
Configure tarefas em segundo plano iniciadas por mensagens ou que processam mensagens para lidar com inconsistências, como mensagens que chegam fora de ordem, mensagens que causam repetidamente um erro (mensagens suspeitas) e mensagens que são entregues mais de uma vez. Considere as seguintes recomendações:
Às vezes, você precisa que as mensagens sejam processadas em uma ordem específica, como mensagens que alteram dados com base no valor de dados existente, por exemplo, adicionando um valor a um valor existente. As mensagens nem sempre chegam na ordem em que foram enviadas. Além disso, instâncias diferentes de uma tarefa em segundo plano podem processar mensagens em uma ordem diferente devido a cargas variáveis em cada instância.
Para mensagens que devem ser processadas em uma ordem específica, inclua um número de sequência, chave ou outro indicador que as tarefas em segundo plano possam usar para processar mensagens na ordem correta. Para o Barramento de Serviço, use sessões de mensagem para garantir a ordem correta de entrega. É mais eficiente projetar o processo para que a ordem das mensagens não seja importante. Para obter mais informações, consulte sequenciamento de mensagens e carimbos de data/hora.
Normalmente, uma tarefa em segundo plano espia as mensagens na fila, o que as oculta temporariamente de outros consumidores de mensagens. Depois que a tarefa processa a mensagem com êxito, ela exclui a mensagem. Se uma tarefa em segundo plano falhar ao processar uma mensagem, essa mensagem reaparecerá na fila depois que o tempo limite de espiada expirar. Uma instância diferente da tarefa processa a mensagem ou o próximo ciclo de processamento da instância original processa a mensagem.
Se a mensagem causar consistentemente um erro no consumidor, ela bloqueará a tarefa, a fila e, eventualmente, o próprio aplicativo quando a fila ficar cheia. É vital detectar e remover mensagens suspeitas da fila. Se você usar o Barramento de Serviço, mova automática ou manualmente as mensagens suspeitas para uma fila de mensagens mortas associada.
As filas são mecanismos de entrega pelo menos uma vez , mas podem entregar a mesma mensagem mais de uma vez. Se uma tarefa em segundo plano falhar depois de processar uma mensagem, mas antes de excluí-la da fila, a mensagem estará disponível para processamento novamente.
As tarefas em segundo plano devem ser idempotentes, o que significa que, quando a tarefa processa a mesma mensagem mais de uma vez, ela não causa um erro ou inconsistência nos dados do aplicativo. Algumas operações são naturalmente idempotentes, por exemplo, se um valor armazenado for definido como um novo valor específico. No entanto, algumas operações causam inconsistências, por exemplo, se um valor for adicionado a um valor armazenado existente sem verificar se o valor armazenado ainda é o mesmo de quando a mensagem foi enviada originalmente. Configure filas do Barramento de Serviço para remover automaticamente mensagens duplicadas. Para obter mais informações, consulte Processamento de mensagens Idempotent.
Alguns sistemas de mensagens, como filas de Armazenamento do Azure e filas do Barramento de Serviço, dão suporte a uma propriedade de contagem de remoção da fila que indica quantas vezes uma mensagem da fila é lida. Esses dados são úteis para lidar com mensagens repetidas e mensagens suspeitas. Para obter mais informações, consulte Primer de mensagens assíncronas e Padrões de idempotência.
Torne os trabalhos escaláveis
As tarefas em segundo plano devem oferecer desempenho suficiente para garantir que elas não bloqueiem o aplicativo ou atrasem a operação quando o sistema estiver suportando uma carga. Normalmente, o desempenho melhora quando você dimensiona as instâncias de computação que hospedam as tarefas em segundo plano. Ao planejar e projetar tarefas em segundo plano, considere os seguintes pontos relacionados à escalabilidade e ao desempenho:
As Máquinas Virtuais do Azure e o recurso Aplicativos Web do Serviço de Aplicativo do Azure podem hospedar implantações. Eles suportam dimensionamento automático, tanto escalonamento horizontal quanto horizontal. O dimensionamento automático é determinado pela demanda e carga ou por uma programação predefinida. Use o dimensionamento automático para ajudar a garantir que o aplicativo tenha recursos de desempenho suficientes, minimizando os custos de tempo de execução.
Algumas tarefas em segundo plano têm uma capacidade de desempenho diferente em comparação com outras partes de um aplicativo, por exemplo, a interface do usuário ou componentes, como a camada de acesso a dados. Nesse cenário, hospede as tarefas em segundo plano juntas em um serviço de computação separado para que a interface do usuário e as tarefas em segundo plano possam ser dimensionadas de forma independente para gerenciar a carga. Se várias tarefas em segundo plano tiverem recursos de desempenho significativamente diferentes, divida-as e dimensione cada tipo de forma independente. Essa técnica pode aumentar os custos de tempo de execução.
Para evitar a perda de desempenho sob carga, talvez você também precise dimensionar filas de armazenamento e outros recursos para que um único ponto da cadeia de processamento não cause um gargalo. Considere outras limitações, como a taxa de transferência máxima de armazenamento e outros serviços dos quais o aplicativo e as tarefas em segundo plano dependem.
Crie tarefas em segundo plano para dimensionamento. Por exemplo, as tarefas em segundo plano devem detectar dinamicamente o número de filas de armazenamento utilizadas para monitorar mensagens ou enviar mensagens para a fila apropriada.
Por padrão, um WebJob é dimensionado com sua instância de Aplicativos Web associada. No entanto, se você quiser que um WebJob seja executado como apenas uma única instância, poderá criar um arquivo Settings.job que contenha os dados
{ "is_singleton": true }
JSON. Esse método força o Azure a executar apenas uma instância do WebJob, mesmo que haja várias instâncias do aplicativo Web associado. Essa técnica é útil para trabalhos agendados que devem ser executados como apenas uma única instância.Os trabalhos em segundo plano podem criar desafios para a sincronização de dados e a coordenação de processos, especialmente se as tarefas em segundo plano dependerem umas das outras ou de outras fontes de dados. Por exemplo, trabalhos em segundo plano podem lidar com problemas de consistência de dados, condições de corrida, deadlocks ou tempos limite.
Os trabalhos em segundo plano podem afetar a experiência do usuário se os resultados das tarefas em segundo plano forem apresentados ao usuário. Por exemplo, trabalhos em segundo plano podem exigir que o usuário aguarde uma notificação, atualize a página ou verifique manualmente o status da tarefa. Esses comportamentos podem aumentar a complexidade da interação do usuário e afetar negativamente a experiência do usuário.
Compensação: os trabalhos em segundo plano introduzem mais componentes e dependências no sistema, o que pode aumentar a complexidade e os custos de manutenção da solução. Por exemplo, trabalhos em segundo plano podem exigir um serviço de fila, serviço de trabalho, serviço de monitoramento e mecanismo de repetição separados.
Facilitação do Azure
As seções a seguir descrevem os serviços do Azure que você pode usar para hospedar, executar, configurar e gerenciar trabalhos em segundo plano.
Ambientes de host
Há vários serviços da plataforma Azure que podem hospedar tarefas em segundo plano:
Aplicativos Web e WebJobs: use o recurso WebJobs do Serviço de Aplicativo para executar trabalhos personalizados baseados em diferentes scripts ou programas que você pode executar em um aplicativo Web.
Azure Functions: use aplicativos de funções para trabalhos em segundo plano que não são executados por muito tempo. Você também pode usar aplicativos de funções se hospedar sua carga de trabalho em um plano do Serviço de Aplicativo subutilizado.
Máquinas virtuais: se você tiver um serviço do Windows ou quiser usar o Agendador de Tarefas do Windows, hospede suas tarefas em segundo plano em uma VM dedicada.
Lote do Azure: o Lote é um serviço de plataforma que você pode usar para agendar o trabalho com uso intensivo de computação para ser executado em uma coleção gerenciada de VMs. Ele pode dimensionar automaticamente os recursos de computação.
AKS (Serviço de Kubernetes do Azure): o AKS fornece um ambiente de hospedagem gerenciado para Kubernetes no Azure.
Aplicativos de Contêiner do Azure: com os Aplicativos de Contêiner, você pode criar microsserviços sem servidor baseados em contêineres.
As seções a seguir fornecem considerações para cada uma dessas opções para ajudá-lo a escolher a melhor opção para você.
Aplicativos Web e WebJobs
Você pode usar o recurso WebJobs para executar trabalhos personalizados como trabalhos em segundo plano em um aplicativo Web. Um WebJob é executado como um processo contínuo no contexto do seu aplicativo Web. Um WebJob também pode ser executado em resposta a um evento de gatilho de Aplicativos Lógicos ou fatores externos, como alterações em blobs de armazenamento ou filas de mensagens. Os WebJobs podem ser iniciados e interrompidos sob demanda e encerrados normalmente. Se um WebJob em execução contínua falhar, ele será reiniciado automaticamente. Você pode configurar ações de repetição e erro.
Quando você configura um WebJob:
Se você quiser que o trabalho responda a um gatilho controlado por eventos, configure-o como Executar continuamente. O script ou programa é armazenado na pasta chamada site/wwwroot/app_data/jobs/continuous.
Se você quiser que o trabalho responda a um gatilho controlado por agendamento, configure-o como Executar em um agendamento. O script ou o programa é armazenado na pasta chamada site/wwwroot/app_data/jobs/triggered.
Se você escolher a opção Executar sob demanda ao configurar um trabalho, ele executará o mesmo código que a opção Executar em um agendamento quando você iniciar o trabalho.
Um WebJob é executado na área restrita do aplicativo Web. Ele tem acesso a variáveis de ambiente e pode compartilhar informações, como cadeias de conexão, com o aplicativo Web. O WebJob tem acesso ao identificador exclusivo da máquina que executa o WebJob. A cadeia de conexão nomeada AzureWebJobsStorage
fornece acesso a filas de armazenamento, blobs e tabelas para dados do aplicativo. Ele também fornece acesso ao Barramento de Serviço para mensagens e comunicação. A cadeia de conexão nomeada AzureWebJobsDashboard
fornece acesso aos arquivos de log de ação do WebJob.
Os WebJobs têm as seguintes características:
Segurança: as credenciais de implantação do aplicativo Web fornecem proteção para WebJobs.
Tipos de arquivo com suporte: defina WebJobs usando scripts de comando (.cmd), arquivos em lotes (.bat), scripts do PowerShell (.ps1), scripts de shell Bash (.sh), scripts PHP (.php), scripts Python (.py), código JavaScript (.js) e programas executáveis (.exe e .jar).
Implantação: você pode implantar scripts e executáveis usando o portal do Azure, o Visual Studio ou o SDK do WebJobs ou copiá-los diretamente para os seguintes locais:
Para implantação acionada: site/wwwroot/app_data/jobs/triggered/<job name>
Para implantação contínua: site/wwwroot/app_data/jobs/continuous/<job name>
Arquivos de log:
Console.Out
é tratado ou marcado comoINFO
.Console.Error
é tratado comoERROR
. Use o portal para acessar informações de monitoramento e diagnóstico. Baixe arquivos de log diretamente do site. Os arquivos de log são salvos nos seguintes locais:Para implantação acionada: Vfs/data/jobs/triggered/<job name>
Para implantação contínua: Vfs/data/jobs/continuous/<job name>
Configuração: configure WebJobs usando o portal, a API REST e o PowerShell. Use um arquivo de configuração chamado settings.job, que está no mesmo diretório raiz que o script WebJob, para fornecer informações de configuração para um WebJob. Por exemplo:
{ "stopping_wait_time": 60 }
{ "is_singleton": true }
Considerações sobre aplicativos Web e WebJobs
Por padrão, os WebJobs são dimensionados com o aplicativo Web. Para configurar WebJobs para serem executados em uma única instância, defina a
is_singleton
propriedade de configuração comotrue
. Os WebJobs de instância única são úteis para tarefas que você não deseja dimensionar ou executar como várias instâncias simultâneas, como reindexação ou análise de dados.Para minimizar o efeito de WebJobs no desempenho do aplicativo Web, crie uma instância de aplicativo Web vazia em um novo plano do Serviço de Aplicativo para hospedar WebJobs de execução longa ou com uso intensivo de recursos.
Azure Functions
O Azure Functions é semelhante ao WebJobs. O Azure Functions é sem servidor e é mais adequado para gatilhos controlados por eventos que são executados por um curto período. Você também pode usar o Azure Functions para executar trabalhos agendados por meio de gatilhos de temporizador se configurar uma função para ser executada em horários especificados.
O Azure Functions não é recomendado para tarefas grandes e de longa execução porque uma função pode causar tempos limite inesperados. No entanto, dependendo do seu plano de hospedagem, considere o uso de funções para gatilhos orientados por agendamento.
Considerações sobre o Azure Functions
Se você espera que a tarefa em segundo plano seja executada por um curto período em resposta a um evento, considere executar a tarefa no plano de consumo. Você pode configurar o tempo de execução para um tempo máximo. Uma função executada por mais tempo custa mais. Trabalhos com uso intensivo de CPU que consomem mais memória podem ser mais caros. Se você usar gatilhos adicionais para serviços como parte de sua tarefa, eles serão cobrados separadamente.
O plano premium é adequado se você tiver várias tarefas curtas, mas executadas continuamente. Esse plano é mais caro porque precisa de mais memória e CPU. Como benefício, você pode usar outros recursos, como integração de rede virtual.
O plano dedicado é adequado para trabalhos em segundo plano se sua carga de trabalho já estiver em execução no plano dedicado. Se você tiver VMs subutilizadas, poderá executar o plano dedicado na mesma VM e compartilhar os custos de computação.
Para saber mais, veja:
Máquinas Virtuais
Você pode implementar tarefas em segundo plano para que elas não sejam implantadas em Aplicativos Web. Por exemplo, você pode implementar tarefas usando serviços do Windows, utilitários de terceiros ou programas executáveis. Você também pode usar programas escritos para um ambiente de tempo de execução diferente do ambiente que hospeda o aplicativo. Por exemplo, você pode usar um programa Unix ou Linux que deseja executar em um aplicativo Windows ou .NET. Escolha entre vários sistemas operacionais para uma VM do Azure e execute seu serviço ou executável nessa VM.
Para saber mais, veja:
- Escolha um serviço de computação do Azure
- Tamanhos para VMs no Azure
- Marketplace de Máquinas Virtuais
Para iniciar a tarefa em segundo plano em uma VM separada, você pode:
Envie uma solicitação para um ponto de extremidade que a tarefa expõe para executar a tarefa sob demanda diretamente do seu aplicativo. A solicitação transfere os dados que a tarefa exige. O ponto de extremidade invoca a tarefa.
Use um agendador ou cronômetro do sistema operacional escolhido para configurar a tarefa para ser executada em um agendamento. Por exemplo, no Windows, você pode usar o Agendador de Tarefas do Windows para executar scripts e tarefas. Se você tiver o SQL Server instalado na VM, use o SQL Server Agent para executar scripts e tarefas.
Use os Aplicativos Lógicos para iniciar a tarefa adicionando uma mensagem a uma fila que a tarefa monitora ou enviando uma solicitação a uma API que a tarefa expõe.
Para obter mais informações sobre como você pode iniciar tarefas em segundo plano, consulte a seção Gatilhos anterior.
Considerações sobre Máquinas Virtuais
Considere os seguintes pontos ao implantar tarefas em segundo plano em uma VM do Azure:
Hospede tarefas em segundo plano em uma VM separada do Azure para fornecer flexibilidade e controle preciso sobre a iniciação, implantação, agendamento e alocação de recursos. No entanto, os custos de tempo de execução aumentam se você implantar uma VM apenas para tarefas em segundo plano.
Não há nenhum recurso para monitorar as tarefas no portal e nenhum recurso de reinicialização automatizada para tarefas com falha. Mas você pode usar os cmdlets do Azure Resource Manager para monitorar o status da VM e gerenciá-la. Não há recursos para controlar processos e threads em nós de computação. Normalmente, se você usar uma VM, precisará implementar um mecanismo que colete dados da instrumentação na tarefa e também do sistema operacional na VM. Você pode usar o Pacote de Gerenciamento do System Center para Azure para essa finalidade.
Considere a criação de investigações de monitoramento expostas por meio de pontos de extremidade HTTP. Você pode configurar o código para essas investigações para executar verificações de integridade e coletar informações e estatísticas operacionais. Você também pode usar as investigações para agrupar informações de erro e retorná-las a um aplicativo de gerenciamento.
Para saber mais, veja:
- Padrão de monitoramento de ponto de extremidade de integridade
- Máquinas virtuais
- Perguntas frequentes sobre máquinas virtuais
Batch
Considere o Lote se você precisar executar cargas de trabalho de HPC (computação de alto desempenho) grandes e paralelas em dezenas, centenas ou milhares de VMs.
Use o Lote para preparar as VMs, atribuir tarefas às VMs, executar as tarefas, monitorar o progresso e escalar horizontalmente automaticamente as VMs em resposta à carga de trabalho. O Lote também fornece agendamento de trabalho e dá suporte a VMs Linux e Windows.
Considerações sobre lotes
O Lote é adequado para cargas de trabalho intrinsecamente paralelas. Você pode usar o Lote para executar cálculos paralelos com uma etapa de redução no final ou executar aplicativos MPI (Interface de Passagem de Mensagens) para tarefas paralelas que exigem passagem de mensagens entre nós.
Um trabalho em lotes é executado em um pool de nós ou VMs. Você pode alocar um pool somente quando necessário e excluí-lo após a conclusão do trabalho. Essa abordagem maximiza a utilização porque os nós não estão ociosos, mas o trabalho deve aguardar a alocação de nós. Como alternativa, você pode criar um pool com antecedência. Essa abordagem minimiza o tempo necessário para um trabalho ser iniciado, mas pode resultar em nós que ficam ociosos.
Para saber mais, veja:
- Nós e pools no Lote
- O que é Batch?
- Trabalhos e tarefas no Lote
- HPC no Azure
- Fluxo de trabalho e recursos do serviço do Lote
Serviço de Kubernetes do Azure
Use o AKS para gerenciar seu ambiente Kubernetes hospedado para que você possa implantar e gerenciar facilmente aplicativos em contêineres.
Os contêineres são úteis para executar trabalhos em segundo plano. Alguns dos benefícios são:
Os contêineres dão suporte à hospedagem de alta densidade. Você pode isolar uma tarefa em segundo plano em um contêiner ao colocar vários contêineres em cada VM.
Use o orquestrador de contêineres para executar o balanceamento de carga interno, configurar a rede interna e executar outras tarefas de configuração.
Você pode iniciar e parar contêineres conforme necessário.
Com o Registro de Contêiner do Azure, você pode registrar seus contêineres dentro dos limites do Azure para fornecer benefícios de segurança, privacidade e proximidade.
Considerações do AKS
O AKS requer uma compreensão de como usar um orquestrador de contêineres.
Para saber mais, veja:
Aplicativos de Contêiner
Com os Aplicativos de Contêiner, você pode criar microsserviços sem servidor baseados em contêineres. Aplicativos de contêiner:
É otimizado para executar contêineres de uso geral, especialmente aplicativos que abrangem muitos microsserviços implantados em contêineres.
É alimentado por Kubernetes e tecnologias de software livre, como Dapr, Kubernetes Event-driven Autoscaling (KEDA) e Envoy.
Suporte a aplicativos no estilo Kubernetes e microsserviços com recursos como descoberta de serviço e divisão de tráfego.
Habilita arquiteturas de aplicativos orientadas a eventos, dando suporte ao dimensionamento baseado no tráfego e extraindo de fontes de eventos, como filas, incluindo dimensionamento para zero.
Suporta processos de longa duração e pode executar tarefas em segundo plano.
Considerações sobre Aplicativos de Contêiner
Os Aplicativos de Contêiner não fornecem acesso direto às APIs subjacentes do Kubernetes. Se você precisar de acesso às APIs do Kubernetes e ao painel de controle, use o AKS. Se você quiser criar aplicativos no estilo Kubernetes e não precisar de acesso direto às APIs nativas do Kubernetes e ao gerenciamento de cluster, use os Aplicativos de Contêiner para uma experiência totalmente gerenciada. Os Aplicativos de Contêiner são mais adequados para criar microsserviços de contêiner.
Para saber mais, veja:
- Visão geral dos Aplicativos de Contêiner
- Início Rápido: Implantar seu primeiro aplicativo de contêiner
Links relacionados
- Padrão de transação de compensação
- Padrão de Consumidores Concorrentes
- Padrão de eleição de líder
- Padrão de pipes e filtros
- Padrão de fila de prioridade
- Padrão de nivelamento de carga baseado em fila
- Padrão de supervisor de agente do Agendador
Lista de verificação de confiabilidade
Consulte o conjunto completo de recomendações.