Recomendações para o desenvolvimento de tarefas de fundo
Aplica-se a esta Power Platform recomendação de lista de verificação de fiabilidade bem arquitetada:
RE:05 | Fortaleça a resiliência da sua carga de trabalho implementando o processamento de erros e o processamento de falhas transitórias. Crie capacidades na solução para processar falhas de componentes e erros transitórios. |
---|
Este guia descreve as recomendações para o desenvolvimento de tarefas de fundo. As tarefas de fundo são executadas automaticamente sem a necessidade de interação do utilizador. Muitas aplicações requerem tarefas de fundo que são executadas independentemente da interface de utilizador (IU).
Alguns exemplos de tarefas de fundo incluem tarefas de lote, tarefas de processamento intensivas e processos de execução prolongada, como fluxos de trabalho. A aplicação inicia a tarefa e processa os pedidos interativos dos utilizadores.
Por exemplo, uma aplicação pode precisar de gerar um resumo e extrair sentimentos e pontos-chave de documentos que os utilizadores carregam. Pode ser executada uma tarefa de fundo para executar as ações de IA e guardar o resumo e os pontos-chave na base de dados. O utilizador não tem de aguardar pela conclusão do processo. Como outro exemplo, um utilizador pode submeter um pedido de reembolso por despesas, que inicia um fluxo de trabalho de fundo que processa o pedido de reembolso por despesas e submete-o para aprovação. O utilizador pode continuar a apresentar outro pedido de reembolso por despesas ou sair da aplicação enquanto a tarefa de fundo é executada. Depois de concluída a tarefa de fundo, envia um e-mail ao utilizador para confirmar que o pedido de reembolso por despesas foi submetido para aprovação.
As tarefas de fundo ajudam a minimizar a carga na IU da aplicação, o que melhora a disponibilidade e reduz o tempo de resposta interativo.
Principais estratégias de design
Para escolher a tarefa a designar como tarefa de fundo, considere se a tarefa é executada sem interação do utilizador e se a IU necessita de aguardar pela conclusão da tarefa. As tarefas que exigem que o utilizador ou a IU aguarde enquanto são executadas normalmente não são tarefas de fundo apropriadas.
Tipos de tarefas de fundo
Alguns exemplos de tarefas de fundo são:
Tarefas intensivas de recursos que demoram muito tempo a concluir, como a execução de uma série de transações.
Tarefas de lote, como atualizações de dados noturnas ou processamentos agendados.
Fluxos de trabalho de execução prolongada, como serviços e sistemas de aprovisionamento ou cumprimento de encomendas.
Fluxos de trabalho que necessitam de uma colaboração assíncrona, tais como aprovações.
Processamento de dados confidenciais que transferem a tarefa para uma localização mais segura para processamento. Por exemplo, talvez não queira processar dados confidenciais numa aplicação Web. Em vez disso, poderá utilizar um padrão, como o padrão Gatekeeper, para transferir os dados para um processo de fundo isolado que tenha acesso ao armazenamento protegido.
Acionadores
Inicie tarefas de fundo com:
Gatilhos controlados por eventos: um evento, seja uma ação do utente no aplicativo ou um evento que ocorre contra um origem de dados, dispara a tarefa.
Gatilhos controlados por agenda: um agendamento baseado em um temporizador invoca a tarefa. A tarefa pode ser agendada numa base recorrente ou para uma única execução.
Acionadores condicionados por eventos
Uma ação aciona uma invocação condicionada por eventos que inicia a tarefa de fundo. Exemplos de acionadores condicionados por eventos incluem:
A IU ou uma tarefa diferente aciona a tarefa de fundo e passa os dados da ação executada para a tarefa de fundo. Por exemplo, um utilizador submete um pedido de reembolso por despesas através de um formulário e os detalhes do formulário são transmitidos para a tarefa de fundo para processamento.
A IU ou outra tarefa guarda ou atualiza um valor que está armazenado. A tarefa de fundo monitoriza o armazenamento e deteta alterações, tais como novos valores a adicionar ou valores existentes a modificar, e aciona a tarefa de fundo com base nessa alteração.
A IU ou uma tarefa diferente efetua um pedido a um ponto final, como um URI HTTPS ou uma API exposta como um serviço Web. Como parte do pedido, a IU ou a tarefa transfere os dados que a tarefa de fundo requer. O ponto final ou o serviço Web invoca a tarefa de fundo, que utiliza os dados como a respetiva entrada.
Outros exemplos de gatilhos controlados por eventos incluem um formulário sendo enviado em um aplicativo, uma nova linha sendo adicionada ao arquivo de dados, uma frase de gatilho no copiloto iniciando um tópico que chama um fluxo, o valor de um campo mudando no arquivo de dados, um e-mail com um assunto específico ou de um remetente específico que chega à caixa de entrada e um arquivo sendo carregado para um local de armazenamento de arquivos.
Utilize as condições do acionador para simplificar os fluxos de trabalho e reduzir o número de execuções desnecessárias. As condições do acionador configuram várias condições que têm de ser cumpridas antes de um fluxo de trabalho ser acionado.
Nota
Certifique-se de que utiliza as condições do acionador para impedir ciclos intermináveis se, como parte do fluxo de trabalho, alterar o origem de dados que inicia o fluxo de trabalho. Por exemplo, a aplicação poderá alterar campos numa linha de tabela do Microsoft Dataverse e o fluxo de trabalho poderá executar consultas adicionais com base nesses campos alterados, modificando ainda mais a mesma linha. Utilize as condições do acionador para iniciar o fluxo de trabalho apenas quando os campos que são alterados pela aplicação são atualizados, mas não quaisquer outros campos.
Acionadores condicionados por agendamentos
Um temporizador aciona uma invocação condicionada por agendamento que inicia a tarefa de fundo. Exemplos de acionadores condicionados por agendamento incluem:
Uma tarefa de fundo é executada diária ou semanalmente e executa um conjunto de ações.
Um processo ou aplicação separado inicia um temporizador que invoca a tarefa de fundo após um atraso de tempo ou numa hora específica.
Outros exemplos de tarefas adequadas à invocação condicionada por agendamento incluem rotinas de processamento em lote (como atualizar listas de produtos relacionados para clientes com base no comportamento recente dos mesmos), tarefas de processamento de dados de rotina (como 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.
Devolver resultados
As tarefas de fundo são executadas de forma assíncrona num processo separado da IU ou do processo que invocou a tarefa de fundo. Idealmente, as tarefas de fundo são operações de disparar e esquecer. O progresso do runtime não influencia a IU nem o processo de chamada, o que significa que o processo de chamada não espera pela conclusão das tarefas. A IU e o processo de chamada não conseguem detetar quando a tarefa termina.
Se necessitar de uma tarefa de fundo para comunicar com a tarefa de chamada para indicar o progresso ou a conclusão, tem de implementar um mecanismo como:
Escreva um valor de indicador de estado no armazenamento acessível à IU ou à tarefa do chamador, que pode monitorizar ou verificar este valor. Outros dados que a tarefa de fundo devolve ao chamador podem ser colocados no mesmo armazenamento.
Exponha uma API ou um ponto final da tarefa de fundo ao qual a IU ou o chamador pode aceder para obter informações de estado. A resposta pode incluir os dados que a tarefa de fundo devolve ao chamador.
Configure a tarefa de fundo para responder com o estado ou os dados processados de volta para a IU.
Coordenação
As tarefas de fundo podem ser complexas e requerem a execução de várias tarefas. Nestes cenários, é comum dividir a tarefa em pequenos passos ou subtarefas discretas que vários consumidores podem executar. As tarefas com vários passos são mais eficientes e flexíveis porque os passos individuais são muitas vezes reutilizáveis em várias tarefas. Também é fácil adicionar, remover ou modificar a ordem dos passos.
Pode ser um desafio coordenar várias tarefas e passos, mas existem três padrões comuns para orientar a solução:
Decomponha uma tarefa em várias etapas reutilizáveis. Pode ser necessário que uma aplicação execute várias tarefas de complexidade diferente nas informações que processa. Uma abordagem simples, mas inflexível, para implementar tal aplicação consiste em executar este processamento como um módulo monolítico. Mas é provável que essa abordagem reduza as oportunidades de refatorização do código, de otimização ou de reutilização se a aplicação exigir partes do mesmo processamento em outro lugar.
Gerencie a orquestração das etapas de uma tarefa. Uma aplicação pode executar tarefas que compreendem muitos passos, alguns dos quais podem invocar serviços remotos ou aceder a recursos remotos. Por vezes, os passos individuais são independentes, mas são orquestrados pela lógica da aplicação que implementa a tarefa.
Gerencie a recuperação para etapas de tarefas que falham. Se um ou mais dos passos falharem, uma aplicação pode precisar de desfazer o trabalho que uma série de passos executa, que em conjunto definem uma operação eventualmente consistente.
Considerações sobre resiliência
Crie tarefas de fundo resilientes para fornecer serviços fiáveis para a aplicação. Ao planear e estruturar tarefas de fundo, considere os seguintes pontos:
As tarefas de fundo precisam de lidar normalmente com reinícios sem corromper dados ou introduzir inconsistências na aplicação. No caso das tarefas de execução prolongada ou com vários passos, considere utilizar pontos de verificação. Utilize pontos de verificação para guardar o estado das tarefas no armazenamento persistente ou como mensagens numa fila e configure a lógica de repetição em caso de falhas inesperadas de uma ação.
Quando utiliza filas para comunicar com tarefas de fundo, as filas podem funcionar como uma memória intermédia para armazenar os pedidos que são enviados para as tarefas enquanto a aplicação está sob uma carga superior à normal. As tarefas podem alcançar a IU durante períodos menos movimentados e os reinícios não bloqueiam a IU.
Considerações sobre o dimensionamento e o desempenho
As tarefas de fundo têm de oferecer um desempenho suficiente para garantir que não bloqueiam a aplicação nem atrasam o funcionamento quando o sistema está em carga. Normalmente, o desempenho melhora quando dimensiona as instâncias de computação que alojam as tarefas de fundo. Ao planear e estruturar tarefas de fundo, considere os seguintes pontos relacionados com a escalabilidade e o desempenho:
As tarefas de fundo podem afetar a experiência do utilizador se os resultados das tarefas de fundo forem apresentados ao utilizador. Por exemplo, as tarefas de fundo podem exigir que o utilizador aguarde uma notificação, atualize a página ou verifique manualmente o estado da tarefa. Estes comportamentos podem aumentar a complexidade da interação do utilizador e afetar negativamente a experiência do utilizador. Considere alternativas para devolver os dados à IU, como enviar uma notificação por e-mail ou por Microsoft Teams ou incluir a capacidade de verificar se há atualizações de estado na sua IU. No nosso exemplo de submissão de formulários de despesas, em vez de devolver o estado à IU, poderia ter uma página na aplicação que lista todos os formulários de despesas submetidos com o respetivo estado e a capacidade de acionar uma atualização.
As tarefas de fundo podem criar desafios para a sincronização de dados e a coordenação de processos, especialmente se as tarefas de fundo dependerem umas das outras ou de outras origens de dados. Por exemplo, as tarefas de fundo podem lidar com problemas de consistência de dados, condições race, impasses ou tempos limite.
Para evitar a perda de desempenho sob carga, pode implementar a lógica para que um único ponto da cadeia de processamento não cause um estrangulamento. Considere outras limitações, como o débito máximo das ações do fluxo de trabalho, o armazenamento e outros serviços dos quais a aplicação e as tarefas de fundo dependem.
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, as tarefas de fundo poderão requerer um serviço de monitorização separado e um mecanismo de novas tentativas.
Facilitação do Power Platform
As secções a seguir descrevem os serviços que pode utilizar para alojar, executar, configurar e gerir tarefas de fundo.
Power Automate
Power Automate Os fluxos de nuvem são fluxos de trabalho executados na nuvem. Podem ser fluxos automatizados que são acionados por um evento, como a chegada de um e-mail de uma pessoa específica. Podem ser fluxos instantâneos que começa com um clique de um botão, como um lembrete para a sua equipa que envia a partir do seu dispositivo móvel. Podem ser fluxos agendados que são executados a determinada hora, tal como um carregamento de dados diário para o SharePoint ou uma base de dados. Também pode automatizar tarefas repetitivas no seu dispositivo móvel ou de secretária.
Familiarize-se com os limites dos fluxos automatizados, agendados e instantâneos no que diz respeito ao débito, ao pedido, à simultaneidade, ao ciclo e à anulação de lotes. Certifique-se de que tem estes limites em consideração ao criar o fluxo de trabalho.
Reduza o risco planeando para o processamento de erros.
Aqui estão alguns exemplos de onde você pode usar Power Automate fluxos para executar trabalhos em segundo plano:
Microsoft Dataverse
Microsoft Dataverse Colunas calculadas e rollups:
As colunas de fórmula são colunas que exibem um valor calculado em uma Microsoft Dataverse tabela.
As colunas calculadas automatizam cálculos manuais utilizados no processo de negócio. Por exemplo, um vendedor pode querer ter a receita ponderada, para uma oportunidade baseada na receita estimada de uma oportunidade multiplicada pela probabilidade. Alternativamente, automaticamente pretende aplicar um desconto, se uma encomenda é superior a um determinado valor. Uma coluna calculada pode conter valores resultantes de operações matemáticas comuns ou operações condicionais, como maior ou igual a ou if-else.
As colunas de rollup ajudam os utilizadores a obter conhecimentos aprofundados a partir dos dados através da monitorização de métricas chave de negócio. Uma coluna de rollup contém um valor agregado calculado sobre as linhas relacionadas com uma linha específica. Isto inclui tabelas normais e tabelas de atividade, tais como e-mails e compromissos. Nos cenários mais complexos, pode agregar dados na hierarquia de linhas. Enquanto administrador ou personalizador, pode definir colunas de rollup utilizando as ferramentas de personalização no Power Apps, sem precisar de escrever código.
As operações em segundo plano podem enviar solicitações que Dataverse são processadas de forma assíncrona. As operações de fundo são úteis quando não pretende manter uma ligação enquanto um pedido é executado.
Os plug-ins são manipuladores de eventos personalizados que são executados em resposta a um evento específico gerado durante o processamento de uma Microsoft Dataverse operação de dados.
O Microsoft Dataverse também oferece uma solução poderosa para alcançar uma arquitetura de dados mais eficiente e reduzir a carga de trabalho do lado do cliente por meio de plug-ins de low-code. Estes plug-ins são fluxos de trabalho reutilizáveis em tempo real que executam um conjunto específico de comandos no Dataverse, executados no lado do servidor e acionados por processadores de eventos personalizados.
Lista de verificação de fiabilidade
Consulte o conjunto completo de recomendações.