Padrão do Supervisor de Agente do SchedulerScheduler Agent Supervisor pattern

Coordene um conjunto de ações distribuídas como uma única operação.Coordinate a set of distributed actions as a single operation. Se alguma das ações falhar, tente processar as falhas de forma transparente ou anule o trabalho que foi realizado para que toda a operação seja bem-sucedida ou falhe como um todo.If any of the actions fail, try to handle the failures transparently, or else undo the work that was performed, so the entire operation succeeds or fails as a whole. Este procedimento pode adicionar resiliência a um sistema distribuído ao permitir que recupere e repita as ações que falharam devido a exceções transitórias, falhas de longa duração e falhas de processamento.This can add resiliency to a distributed system, by enabling it to recover and retry actions that fail due to transient exceptions, long-lasting faults, and process failures.

Contexto e problemaContext and problem

Uma aplicação realiza tarefas que incluem uma série de passos, alguns dos quais podem invocar serviços remotos ou aceder a recursos remotos.An application performs tasks that include a number of steps, some of which might invoke remote services or access remote resources. Os passos individuais podem ser independentes entre si, mas são orquestrados pela lógica da aplicação que implementa a tarefa.The individual steps might be independent of each other, but they are orchestrated by the application logic that implements the task.

Sempre que possível, a aplicação deve garantir que a tarefa é executada até à conclusão e resolve qualquer falha que possa ocorrer ao aceder aos serviços ou recursos remotos.Whenever possible, the application should ensure that the task runs to completion and resolve any failures that might occur when accessing remote services or resources. As falhas podem ocorrer por diversos motivos.Failures can occur for many reasons. Por exemplo, a rede pode estar inativa, as comunicações podem estar interrompidas, um serviço remoto pode não estar a responder ou pode estar num estado instável, ou um recurso remoto pode estar temporariamente inacessível, talvez devido a restrições de recursos.For example, the network might be down, communications could be interrupted, a remote service might be unresponsive or in an unstable state, or a remote resource might be temporarily inaccessible, perhaps due to resource constraints. Em muitos casos, as falhas serão transitórias e poderão ser tratadas usando o padrão de repetição.In many cases the failures will be transient and can be handled by using the Retry pattern.

Se a aplicação detetar uma falha mais permanente da qual não consegue recuperar facilmente, esta terá de ter a capacidade para restaurar o sistema para um estado consistente e garantir a integridade de toda a operação.If the application detects a more permanent fault it can't easily recover from, it must be able to restore the system to a consistent state and ensure integrity of the entire operation.

SoluçãoSolution

O padrão do Supervisor do Agente do Scheduler define os seguintes atores.The Scheduler Agent Supervisor pattern defines the following actors. Estes atores orquestram os passos a serem executados como parte da tarefa geral.These actors orchestrate the steps to be performed as part of the overall task.

  • O Scheduler faz com que os passos que compõem a tarefa sejam executados e orquestra a sua operação.The Scheduler arranges for the steps that make up the task to be executed and orchestrates their operation. Estes passos podem ser combinados num pipeline ou num fluxo de trabalho.These steps can be combined into a pipeline or workflow. O Scheduler é responsável por assegurar que os passos neste fluxo de trabalho são executados na ordem correta.The Scheduler is responsible for ensuring that the steps in this workflow are performed in the right order. À medida que cada passo é realizado, o Scheduler regista o estado do fluxo de trabalho, tal como “passo ainda não iniciado”, “passo em execução” ou “passo concluído”.As each step is performed, the Scheduler records the state of the workflow, such as "step not yet started," "step running," or "step completed." As informações do estado também devem incluir um limite superior do tempo permitido para a conclusão do passo, denominado tempo de conclusão.The state information should also include an upper limit of the time allowed for the step to finish, called the complete-by time. Se um passo precisar de acesso a um serviço ou a recurso remotos, o Scheduler invocará o Agente adequado, transmitindo-lhe os detalhes do trabalho a ser executado.If a step requires access to a remote service or resource, the Scheduler invokes the appropriate Agent, passing it the details of the work to be performed. Normalmente, o Scheduler comunica com um Agente com mensagens de pedido/resposta assíncronas.The Scheduler typically communicates with an Agent using asynchronous request/response messaging. Tal pode ser implementado com filas, mas pode também utilizar outras tecnologias de mensagens distribuídas.This can be implemented using queues, although other distributed messaging technologies could be used instead.

    O Scheduler realiza uma função semelhante no Gestor de Processos no padrão de Gestor de Processos.The Scheduler performs a similar function to the Process Manager in the Process Manager pattern. O fluxo de trabalho real é, normalmente, definido e implementado por um motor de fluxo de trabalho controlado pelo Scheduler.The actual workflow is typically defined and implemented by a workflow engine that's controlled by the Scheduler. Esta abordagem desacopla a lógica de negócio no fluxo de trabalho do Scheduler.This approach decouples the business logic in the workflow from the Scheduler.

  • O Agente contém a lógica que encapsula uma chamada para um serviço remoto ou o acesso a um recurso remoto mencionado por um passo numa tarefa.The Agent contains logic that encapsulates a call to a remote service, or access to a remote resource referenced by a step in a task. Por norma, cada Agente encapsula num wrapper chamadas para um único serviço ou recurso e implementa o processamento de erros adequado e a lógica de repetição (sujeitas a uma restrição de tempo limite, descrita mais à frente).Each Agent typically wraps calls to a single service or resource, implementing the appropriate error handling and retry logic (subject to a timeout constraint, described later). Se os passos no fluxo de trabalho a serem executados pelo Scheduler utilizarem vários serviços e recursos em diferentes passos, cada passo poderá mencionar um Agente diferente (este é um detalhe de implementação do padrão).If the steps in the workflow being run by the Scheduler use several services and resources across different steps, each step might reference a different Agent (this is an implementation detail of the pattern).

  • O Supervisor monitoriza o estado dos passos da tarefa a ser realizada pelo Scheduler.The Supervisor monitors the status of the steps in the task being performed by the Scheduler. Ele é executado periodicamente (a frequência será específica do sistema) e examina o status das etapas mantidas pelo Agendador.It runs periodically (the frequency will be system-specific), and examines the status of steps maintained by the Scheduler. Se detetar que algum excedeu o limite de tempo ou falhou, tomará as medidas para que o Agente adequado recupere o passo ou execute a ação corretiva adequada (tal pode envolver a modificação do estado de um passo).If it detects any that have timed out or failed, it arranges for the appropriate Agent to recover the step or execute the appropriate remedial action (this might involve modifying the status of a step). Tenha em atenção que as ações de recuperação ou corretivas são implementadas pelo Scheduler e pelos Agentes.Note that the recovery or remedial actions are implemented by the Scheduler and Agents. O Supervisor simplesmente deve pedir que estas ações sejam realizadas.The Supervisor should simply request that these actions be performed.

O Scheduler, o Agente e o Supervisor são componentes lógicos e a implementação física deles depende da tecnologia que está a ser utilizada.The Scheduler, Agent, and Supervisor are logical components and their physical implementation depends on the technology being used. Por exemplo, vários agentes lógicos podem ser implementados como parte de um serviço Web único.For example, several logical agents might be implemented as part of a single web service.

O Scheduler mantém informações sobre o progresso da tarefa e o estado de cada passo num arquivo de dados durável, denominado arquivo de estado.The Scheduler maintains information about the progress of the task and the state of each step in a durable data store, called the state store. O Supervisor pode utilizar estas informações para ajudar a determinar se um passo falhou.The Supervisor can use this information to help determine whether a step has failed. A figura mostra a relação entre o Scheduler, os Agentes, o Supervisor e o arquivo de estado.The figure illustrates the relationship between the Scheduler, the Agents, the Supervisor, and the state store.

Figura 1 – Atores no padrão do Supervisor do Agente do Scheduler

Nota

Este diagrama mostra uma versão simplificada do padrão.This diagram shows a simplified version of the pattern. Numa implementação real, podem existir muitas instâncias do Scheduler em execução em simultâneo, cada uma delas um subconjunto de tarefas.In a real implementation, there might be many instances of the Scheduler running concurrently, each a subset of tasks. Da mesma forma, o sistema pode executar várias instâncias de cada Agente ou mesmo de vários Supervisores.Similarly, the system could run multiple instances of each Agent, or even multiple Supervisors. Neste caso, os Supervisores têm de coordenar atentamente o trabalho entre si para garantir que não tentam recuperar os mesmos passos e tarefas que falharam.In this case, Supervisors must coordinate their work with each other carefully to ensure that they don’t compete to recover the same failed steps and tasks. O padrão de Eleição de Coordenador fornece uma solução possível para este problema.The Leader Election pattern provides one possible solution to this problem.

Quando a aplicação está pronta para executar uma tarefa, submete um pedido ao Scheduler.When the application is ready to run a task, it submits a request to the Scheduler. O Scheduler regista as informações de estado iniciais da tarefa e dos passos (por exemplo, passo ainda não iniciado) no arquivo de estado e, em seguida, começa a realizar as operações definidas pelo fluxo de trabalho.The Scheduler records initial state information about the task and its steps (for example, step not yet started) in the state store and then starts performing the operations defined by the workflow. À medida que o Scheduler inicia cada passo, atualiza as informações sobre o estado desse passo no arquivo de estado (por exemplo, passo em execução).As the Scheduler starts each step, it updates the information about the state of that step in the state store (for example, step running).

Se um passo fizer referência a um serviço ou recurso remoto, o Scheduler enviará uma mensagem ao Agente adequado.If a step references a remote service or resource, the Scheduler sends a message to the appropriate Agent. A mensagem contém as informações que o Agente precisa de transmitir ao serviço ou das quais precisa para aceder ao recurso, para além do tempo de conclusão da operação.The message contains the information that the Agent needs to pass to the service or access the resource, in addition to the complete-by time for the operation. Se o Agente concluir a operação com sucesso, devolverá uma resposta ao Scheduler.If the Agent completes its operation successfully, it returns a response to the Scheduler. Assim, o Scheduler pode atualizar as informações de estado no arquivo de estado (por exemplo, passo concluído) e executar o passo seguinte.The Scheduler can then update the state information in the state store (for example, step completed) and perform the next step. Este processo continua até que toda a tarefa seja concluída.This process continues until the entire task is complete.

Um Agente pode implementar qualquer lógica de repetição necessária para realizar o trabalho.An Agent can implement any retry logic that's necessary to perform its work. No entanto, se o Agente não concluir o trabalho antes de o período de conclusão expirar, o Scheduler assumirá que a operação falhou.However, if the Agent doesn't complete its work before the complete-by period expires, the Scheduler will assume that the operation has failed. Neste caso, o Agente deve parar o trabalho e não tentar devolver nada ao Scheduler (nem mesmo uma mensagem de erro) ou tentar qualquer outra forma de recuperação.In this case, the Agent should stop its work and not try to return anything to the Scheduler (not even an error message), or try any form of recovery. O motivo para esta restrição é que, depois de um passo ter excedido o tempo limite ou ter falhado, outra instância do Agente pode ser agendada para executar a etapa falhada (este processo é descrito mais à frente).The reason for this restriction is that, after a step has timed out or failed, another instance of the Agent might be scheduled to run the failing step (this process is described later).

Se o Agente falhar, o Scheduler não receberá nenhuma resposta.If the Agent fails, the Scheduler won't receive a response. O padrão não faz uma distinção entre um passo que excedeu o tempo limite e um que falhou genuinamente.The pattern doesn't make a distinction between a step that has timed out and one that has genuinely failed.

Se um passo exceder o limite de tempo ou falhar, o arquivo de estado conterá um registo que indica que o passo está em execução, mas o tempo de conclusão será ultrapassado.If a step times out or fails, the state store will contain a record that indicates that the step is running, but the complete-by time will have passed. O Supervisor procura passos como este e tenta recuperá-los.The Supervisor looks for steps like this and tries to recover them. Uma estratégia possível consiste no Supervisor atualizar o valor a concluir ao expandir o tempo disponível para concluir o passo e, em seguida, enviar uma mensagem ao Scheduler a identificar o passo que excedeu o limite de tempo. Em seguida, o Scheduler tenta repetir este passo.One possible strategy is for the Supervisor to update the complete-by value to extend the time available to complete the step, and then send a message to the Scheduler identifying the step that has timed out. The Scheduler can then try to repeat this step. No entanto, esta estrutura precisa que as tarefas sejam idempotentes.However, this design requires the tasks to be idempotent.

O Supervisor poderá precisar de impedir que o mesmo passo seja repetido se falhar continuamente ou exceder o tempo limite. Para tal, o Supervisor pode manter uma contagem de repetições para cada passo, juntamente com as informações de estado, no arquivo de estado.The Supervisor might need to prevent the same step from being retried if it continually fails or times out. To do this, the Supervisor could maintain a retry count for each step, along with the state information, in the state store. Se esta contagem exceder um limiar predefinido, o Supervisor poderá adotar uma estratégia de espera por um período prolongado antes de notificar o Scheduler, que deve repetir o passo, na expectativa de que as falhas serem resolvidas durante este período.If this count exceeds a predefined threshold the Supervisor can adopt a strategy of waiting for an extended period before notifying the Scheduler that it should retry the step, in the expectation that the fault will be resolved during this period. Em alternativa, o Supervisor pode enviar uma mensagem ao Scheduler para pedir que a tarefa completa seja anulada ao implementar um padrão de Transação de Compensação.Alternatively, the Supervisor can send a message to the Scheduler to request the entire task be undone by implementing a Compensating Transaction pattern. Esta abordagem implicará que o Scheduler e os Agentes forneçam as informações necessárias para implementar as operações de compensação para cada passo concluído com sucesso.This approach will depend on the Scheduler and Agents providing the information necessary to implement the compensating operations for each step that completed successfully.

O Supervisor não tem como objetivo monitorizar o Scheduler nem os Agentes, nem reiniciá-los em caso de falha.It isn't the purpose of the Supervisor to monitor the Scheduler and Agents, and restart them if they fail. Este aspeto do sistema deve ser processado pela infraestrutura que estes componentes estão a executar.This aspect of the system should be handled by the infrastructure these components are running in. Da mesma forma, o Supervisor não deve ter conhecimento das operações empresariais reais que as tarefas a serem realizadas pelo Scheduler estão a executar (incluindo como compensar caso estas tarefas falhem).Similarly, the Supervisor shouldn't have knowledge of the actual business operations that the tasks being performed by the Scheduler are running (including how to compensate should these tasks fail). Este é o objetivo da lógica do fluxo de trabalho implementado pelo Scheduler.This is the purpose of the workflow logic implemented by the Scheduler. A competência exclusiva do Supervisor consiste em determinar se um passo falhou e providenciar para que seja repetido ou para que toda a tarefa que contém o passo falhado seja anulada.The sole responsibility of the Supervisor is to determine whether a step has failed and arrange either for it to be repeated or for the entire task containing the failed step to be undone.

Se o Scheduler for reiniciado após uma falha ou se o fluxo de trabalho a ser realizado pelo Scheduler terminar inesperadamente, o Scheduler deverá conseguir determinar o estado de qualquer tarefa em utilização que estava a processar quando falhou e estar preparado para retomar a mesma a partir desse ponto.If the Scheduler is restarted after a failure, or the workflow being performed by the Scheduler terminates unexpectedly, the Scheduler should be able to determine the status of any inflight task that it was handling when it failed, and be prepared to resume this task from that point. Os detalhes de implementação desse processo provavelmente serão específicos do sistema.The implementation details of this process are likely to be system-specific. Se a tarefa não puder ser recuperada, poderá ser necessário anular o trabalho já realizado pela tarefa.If the task can't be recovered, it might be necessary to undo the work already performed by the task. A implementação de uma transação de compensação poderá também ser necessária.This might also require implementing a compensating transaction.

A vantagem principal deste padrão é que o sistema é resiliente em caso de falhas inesperadas, temporárias ou irrecuperáveis.The key advantage of this pattern is that the system is resilient in the event of unexpected temporary or unrecoverable failures. O sistema pode ser construído para ser auto-recuperável.The system can be constructed to be self-healing. Por exemplo, se um Agente ou o Scheduler falharem, poderá iniciar um novo agente e o Supervisor poderá fazer com que uma tarefa seja retomada.For example, if an Agent or the Scheduler fails, a new one can be started and the Supervisor can arrange for a task to be resumed. Se o Supervisor falhar, outra instância poderá ser iniciada e assumir a partir do ponto onde ocorreu a falha.If the Supervisor fails, another instance can be started and can take over from where the failure occurred. Se o Supervisor estiver agendado para ser executado periodicamente, uma nova instância poderá ser iniciada automaticamente após um intervalo predefinido.If the Supervisor is scheduled to run periodically, a new instance can be automatically started after a predefined interval. O arquivo de estado pode ser replicado para alcançar um maior grau de resiliência.The state store can be replicated to reach an even greater degree of resiliency.

Problemas e consideraçõesIssues and considerations

Deve considerar os seguintes pontos ao decidir como implementar este padrão:You should consider the following points when deciding how to implement this pattern:

  • Este padrão pode ser difícil de implementar e necessita de testes rigorosos de todos os modos de falha possíveis do sistema.This pattern can be difficult to implement and requires thorough testing of each possible failure mode of the system.

  • A lógica de recuperação/repetição implementada pelo Scheduler é complexa e depende das informações de estado contidas no arquivo de estado.The recovery/retry logic implemented by the Scheduler is complex and dependent on state information held in the state store. Também pode ser preciso registar as informações necessárias para implementar uma transação de compensação num arquivo de dados durável.It might also be necessary to record the information required to implement a compensating transaction in a durable data store.

  • A frequência com que o Supervisor é executado será importante.How often the Supervisor runs will be important. Deve ser executado com frequência suficiente para impedir que quaisquer passos falhados bloqueiem uma aplicação durante um período prolongado, mas não deve ser executado de uma forma tão frequente que se torne um custo.It should run often enough to prevent any failed steps from blocking an application for an extended period, but it shouldn't run so often that it becomes an overhead.

  • Os passos realizados por um Agente podem ser executados mais do que uma vez.The steps performed by an Agent could be run more than once. A lógica que implementa estes passos deve ser idempotente.The logic that implements these steps should be idempotent.

Quando utilizar este padrãoWhen to use this pattern

Utilize este padrão quando um processo a ser executado num ambiente distribuído, tal como a cloud, tem de ser resilientes a falhas de comunicações e/ou falhas operacionais.Use this pattern when a process that runs in a distributed environment, such as the cloud, must be resilient to communications failure and/or operational failure.

Este padrão pode não ser adequado para tarefas que não invocam serviços remotos ou recursos de acesso remotos.This pattern might not be suitable for tasks that don't invoke remote services or access remote resources.

ExemploExample

Uma aplicação Web que implementa um sistema de comércio eletrónico foi implementada no Microsoft Azure.A web application that implements an ecommerce system has been deployed on Microsoft Azure. Os utilizadores podem executar esta aplicação para procurar os produtos disponíveis e realizar encomendas.Users can run this application to browse the available products and to place orders. A interface de utilizador é executada como uma função da Web e os elementos de processamento das encomendas da aplicação são implementados como um conjunto de funções de trabalho.The user interface runs as a web role, and the order processing elements of the application are implemented as a set of worker roles. Parte da lógica de processamento da encomenda envolve o acesso a um serviço remoto, podendo este aspeto do sistema ser suscetível a falhas transitórias ou mais duradouras.Part of the order processing logic involves accessing a remote service, and this aspect of the system could be prone to transient or more long-lasting faults. Por este motivo, os estruturadores utilizaram o padrão do Supervisor de Agente do Scheduler para implementar os elementos de processamento da encomenda do sistema.For this reason, the designers used the Scheduler Agent Supervisor pattern to implement the order processing elements of the system.

Quando um cliente realiza uma encomenda, a aplicação constrói uma mensagem que descreve a encomenda e publica esta mensagem numa fila.When a customer places an order, the application constructs a message that describes the order and posts this message to a queue. Um processo de submissão separado, em execução numa função de trabalho, obtém a mensagem, insere os detalhes da encomenda na base de dados de encomendas e cria um registo para o processamento da encomenda no arquivo de estado.A separate submission process, running in a worker role, retrieves the message, inserts the order details into the orders database, and creates a record for the order process in the state store. Tenha em atenção que as inserções na base de dados das encomendas e o arquivo de estado são realizados como parte da mesma operação.Note that the inserts into the orders database and the state store are performed as part of the same operation. O processo de submissão foi concebido para garantir que ambas as inserções são concluídas em conjunto.The submission process is designed to ensure that both inserts complete together.

As informações de estado criadas pelo processo de submissão para a encomenda incluem:The state information that the submission process creates for the order includes:

  • OrderID.OrderID. O ID da encomenda na base de dados de encomendas.The ID of the order in the orders database.

  • LockedBy.LockedBy. O ID da instância da função de trabalho a processar a encomenda.The instance ID of the worker role handling the order. Podem existir várias instâncias atuais da função de trabalho a executar o Scheduler, mas cada encomenda só deve ser processada por uma única instância.There might be multiple current instances of the worker role running the Scheduler, but each order should only be handled by a single instance.

  • CompleteBy.CompleteBy. A hora em que a encomenda deve ser processada.The time the order should be processed by.

  • ProcessState.ProcessState. O estado atual da tarefa a processar a encomenda.The current state of the task handling the order. Estados possíveis:The possible states are:

    • Pendente.Pending. A encomenda foi criada, mas o processamento ainda não foi iniciado.The order has been created but processing hasn't yet been started.
    • Em processamento.Processing. A encomenda está atualmente a ser processada.The order is currently being processed.
    • Processada.Processed. A encomenda foi processada com sucesso.The order has been processed successfully.
    • Erro.Error. O processamento da encomenda falhou.The order processing has failed.
  • FailureCount.FailureCount. O número de vezes que o processamento da encomenda foi tentado.The number of times that processing has been tried for the order.

Nestas informações de estado, o campo OrderID é copiado do ID da encomenda da nova encomenda.In this state information, the OrderID field is copied from the order ID of the new order. Os campos LockedBy e CompleteBy estão definidos como null, o campo ProcessState está definido como Pending e o campo FailureCount está definido como 0.The LockedBy and CompleteBy fields are set to null, the ProcessState field is set to Pending, and the FailureCount field is set to 0.

Nota

Neste exemplo, a lógica de processamento de encomendas é relativamente simples e tem apenas um único passo que invoca um serviço remoto.In this example, the order handling logic is relatively simple and only has a single step that invokes a remote service. Em um cenário de várias etapas mais complexo, o processo de envio provavelmente envolveria diversas etapas e, portanto, vários registros seriam criados no armazenamento — de estado, cada um descrevendo o estado de uma etapa individual.In a more complex multistep scenario, the submission process would likely involve several steps, and so several records would be created in the state store — each one describing the state of an individual step.

O Scheduler também é executado como parte de uma função de trabalho e implementa a lógica de negócio que processa a encomenda.The Scheduler also runs as part of a worker role and implements the business logic that handles the order. Uma instância do Scheduler a consultar as encomendas examina o arquivo de estado para os registos em que o campo LockedBy é nulo e o campo ProcessState está pendente.An instance of the Scheduler polling for new orders examines the state store for records where the LockedBy field is null and the ProcessState field is pending. Quando o Scheduler encontra uma nova encomenda, preenche imediatamente o campo LockedBy com o seu próprio ID de instância, define o campo CompleteBy para um tempo adequado e define o campo ProcessState para processamento.When the Scheduler finds a new order, it immediately populates the LockedBy field with its own instance ID, sets the CompleteBy field to an appropriate time, and sets the ProcessState field to processing. O código foi concebido para ser exclusivo e atómico para garantir que duas instâncias em simultâneo do Scheduler não possam processar a mesma encomenda ao mesmo tempo.The code is designed to be exclusive and atomic to ensure that two concurrent instances of the Scheduler can't try to handle the same order simultaneously.

Em seguida, o Scheduler executa o fluxo de trabalho comercial para processar a encomenda de forma assíncrona e transmite o valor do campo OrderID a partir do arquivo de estado.The Scheduler then runs the business workflow to process the order asynchronously, passing it the value in the OrderID field from the state store. O fluxo de trabalho a processar a encomenda obtém os detalhes da encomenda da base de dados de encomendas e executa o trabalho.The workflow handling the order retrieves the details of the order from the orders database and performs its work. Quando um passo no fluxo de trabalho de processamento da encomenda tem de invocar o serviço remoto, utiliza um Agente.When a step in the order processing workflow needs to invoke the remote service, it uses an Agent. O passo do fluxo de trabalho comunica com o Agente através de um par de filas de mensagens do Azure Service Bus a funcionarem como um canal de pedido/resposta.The workflow step communicates with the Agent using a pair of Azure Service Bus message queues acting as a request/response channel. A figura mostra uma exibição de alto nível da solução.The figure shows a high-level view of the solution.

Figura 2-usando o padrão de supervisor de agente do Agendador para lidar com pedidos em uma solução do Azure

A mensagem enviada ao Agente por um passo do fluxo de trabalho descreve a encomenda e inclui o tempo de conclusão.The message sent to the Agent from a workflow step describes the order and includes the complete-by time. Se o Agente receber uma resposta do serviço remoto antes de o tempo de conclusão expirar, este publicará uma mensagem de resposta na fila do Service Bus no qual o fluxo de trabalho está a escutar.If the Agent receives a response from the remote service before the complete-by time expires, it posts a reply message on the Service Bus queue on which the workflow is listening. Quando a etapa do fluxo de trabalho recebe a mensagem de resposta válida, ela conclui seu processamento e o Agendador define o ProcessState campo do estado do pedido como processado.When the workflow step receives the valid reply message, it completes its processing and the Scheduler sets the ProcessState field of the order state to processed. O processamento da encomenda foi concluído com sucesso.At this point, the order processing has completed successfully.

Se o tempo de conclusão expirar antes de o Agente receber uma resposta do serviço remoto, o Agente simplesmente parará o processamento e terminará o tratamento da encomenda.If the complete-by time expires before the Agent receives a response from the remote service, the Agent simply halts its processing and terminates handling the order. Da mesma forma, se o fluxo de trabalho a processar a encomenda exceder o tempo de conclusão, este também terminará.Similarly, if the workflow handling the order exceeds the complete-by time, it also terminates. Em ambos os casos, o estado da encomenda no arquivo de estado permanece definido como “Em processamento”, mas o tempo de conclusão indica que o tempo de processamento da encomenda foi ultrapassado e o processo é considerado como tendo falhado.In both cases, the state of the order in the state store remains set to processing, but the complete-by time indicates that the time for processing the order has passed and the process is deemed to have failed. Tenha em atenção que, se o Agente que está a aceder ao serviço remoto ou o fluxo de trabalho que está a processar a encomenda (ou ambos) terminar inesperadamente, as informações no arquivo de estado permanecerão definidas como “Em processamento” e, eventualmente, terão um valor de conclusão expirado.Note that if the Agent that's accessing the remote service, or the workflow that's handling the order (or both) terminate unexpectedly, the information in the state store will again remain set to processing and eventually will have an expired complete-by value.

Se o Agente detetar uma falha irrecuperável não transitória enquanto está a tentar contactar o serviço remoto, este poderá enviar uma resposta de erro de volta para o fluxo de trabalho.If the Agent detects an unrecoverable, nontransient fault while it's trying to contact the remote service, it can send an error response back to the workflow. O Scheduler pode definir o estado da encomenda como Erro e gerar um evento que alerta um operador.The Scheduler can set the status of the order to error and raise an event that alerts an operator. O operador pode, em seguida, tentar resolver manualmente o motivo da falha e submeter novamente o passo de processamento falhado.The operator can then try to resolve the reason for the failure manually and resubmit the failed processing step.

O Supervisor examina periodicamente o arquivo de estado ao procurar as encomendas com um valor de conclusão expirado.The Supervisor periodically examines the state store looking for orders with an expired complete-by value. Se o Supervisor encontrar um registo, incrementará o campo FailureCount.If the Supervisor finds a record, it increments the FailureCount field. Se o valor de contagem de falhas for inferior a um valor de limiar especificado, o Supervisor reporá o campo LockedBy como nulo, atualizará o campo CompleteBy com um novo prazo de expiração e definirá o campo ProcessState como pendente.If the failure count value is below a specified threshold value, the Supervisor resets the LockedBy field to null, updates the CompleteBy field with a new expiration time, and sets the ProcessState field to pending. Uma instância do Scheduler pode recuperar esta encomenda e proceder ao seu processamento tal como anteriormente.An instance of the Scheduler can pick up this order and perform its processing as before. Se o valor de contagem de falhas exceder um limiar especificado, assume-se que o motivo da falha se deve a não ser transitório.If the failure count value exceeds a specified threshold, the reason for the failure is assumed to be nontransient. O Supervisor define o estado da encomenda como Erro e gera um evento que alerta um operador.The Supervisor sets the status of the order to error and raises an event that alerts an operator.

Neste exemplo, o Supervisor é implementado numa função de trabalho separada.In this example, the Supervisor is implemented in a separate worker role. Pode utilizar várias estratégias para que a tarefa do Supervisor seja executada, incluindo a utilização do serviço do Scheduler do Azure (não deve ser confundido com o componente do programador neste padrão).You can use a variety of strategies to arrange for the Supervisor task to be run, including using the Azure Scheduler service (not to be confused with the Scheduler component in this pattern). Para obter mais informações sobre o serviço do Scheduler do Azure, consulte a página Scheduler.For more information about the Azure Scheduler service, visit the Scheduler page.

Apesar de não ser apresentado neste exemplo, o Scheduler pode ter de manter a aplicação que submeteu a encomenda informada sobre o progresso e o estado da encomenda.Although it isn't shown in this example, the Scheduler might need to keep the application that submitted the order informed about the progress and status of the order. A aplicação e o Scheduler estão isolados um do outro para eliminar qualquer dependência entre ambos.The application and the Scheduler are isolated from each other to eliminate any dependencies between them. A aplicação não tem conhecimento sobre qual a instância do Scheduler que está a processar a encomenda nem o Scheduler tem conhecimento de qual a instância específica da aplicação que publicou a encomenda.The application has no knowledge of which instance of the Scheduler is handling the order, and the Scheduler is unaware of which specific application instance posted the order.

Para permitir que o estado da encomenda seja comunicado, a aplicação pode utilizar a sua própria fila de respostas privada.To allow the order status to be reported, the application could use its own private response queue. Os detalhes desta fila de respostas são incluídos como parte do pedido enviado para o processo de submissão, que inclui estas informações no arquivo de estado.The details of this response queue would be included as part of the request sent to the submission process, which would include this information in the state store. Em seguida, o Scheduler publica as mensagens nesta fila, indicando o estado da encomenda (pedido recebido, encomenda concluída, encomenda falhada, entre outros).The Scheduler would then post messages to this queue indicating the status of the order (request received, order completed, order failed, and so on). O ID da encomenda deve ser incluído nestas mensagens, para que possa ser correlacionado com o pedido original enviado pela aplicação.It should include the order ID in these messages so they can be correlated with the original request by the application.

Os padrões e orientações que se seguem também podem ser relevantes ao implementar este padrão:The following patterns and guidance might also be relevant when implementing this pattern:

  • Padrão de repetição.Retry pattern. Um agente pode utilizar este padrão para repetir de forma transparente uma operação que acede a um serviço ou a recurso remotos que tenham falhado anteriormente.An Agent can use this pattern to transparently retry an operation that accesses a remote service or resource that has previously failed. Utilize quando a causa da falha é considerada como transitória e pode ser corrigida.Use when the expectation is that the cause of the failure is transient and can be corrected.
  • Padrão Disjuntor Automático.Circuit Breaker pattern. Um Agente pode utilizar este padrão para processar falhas que demoram um período de tempo a corrigir ao ligar a um serviço ou recurso remotos variáveis.An Agent can use this pattern to handle faults that take a variable amount of time to correct when connecting to a remote service or resource.
  • Padrão Transação de Compensação.Compensating Transaction pattern. Se o fluxo de trabalho a ser realizado por um Scheduler não puder ser concluído com sucesso, poderá ser necessário anular todo o trabalho que foi executado anteriormente.If the workflow being performed by a Scheduler can't be completed successfully, it might be necessary to undo any work it's previously performed. O padrão de Transação de Compensação descreve a forma como isto pode ser obtido para operações que seguem o modelo de consistência eventual.The Compensating Transaction pattern describes how this can be achieved for operations that follow the eventual consistency model. Estes tipos de operações são normalmente implementados por um Scheduler que realiza processos e fluxos de trabalho empresariais complexos.These types of operations are commonly implemented by a Scheduler that performs complex business processes and workflows.
  • Asynchronous Messaging Primer (Manual Básico de Mensagens Assíncronas).Asynchronous Messaging Primer. Normalmente, os componentes no padrão do Supervisor de Agente do Scheduler são executados desacoplados uns dos outros e comunicam de forma assíncrona.The components in the Scheduler Agent Supervisor pattern typically run decoupled from each other and communicate asynchronously. Descreve algumas das abordagens que podem ser utilizadas para implementar comunicações assíncronas com base nas filas de mensagens.Describes some of the approaches that can be used to implement asynchronous communication based on message queues.
  • Padrão de Eleição de Coordenador.Leader Election pattern. Pode ser necessário coordenar as ações de várias instâncias de um Supervisor para impedir que estas tentem recuperar o mesmo processo falhado.It might be necessary to coordinate the actions of multiple instances of a Supervisor to prevent them from attempting to recover the same failed process. O padrão de Eleição de Coordenador descreve como fazê-lo.The Leader Election pattern describes how to do this.
  • Arquitetura de nuvem: O padrão de Agendador-agente-supervisor no blog de grandes ClemenssCloud Architecture: The Scheduler-Agent-Supervisor Pattern on Clemens Vasters' blog
  • Padrão do Gestor de ProcessosProcess Manager pattern
  • Referência 6: Um saga em sagas.Reference 6: A Saga on Sagas. Um exemplo mostra como o padrão CQRS utiliza um gestor de processos (parte das orientações do Percurso CQRS).An example showing how the CQRS pattern uses a process manager (part of the CQRS Journey guidance).
  • Microsoft Azure SchedulerMicrosoft Azure Scheduler