O lançamento do Dapr 1.14 no mês passado incluiu muitos novos recursos e estava repleto de recursos. Isso incluiu a adição de uma nova API de Jobs e serviço de plano de controle do Scheduler para gerenciar jobs. Ao longo dos anos, o projeto Dapr foi frequentemente solicitado a incluir uma API de Jobs. O serviço Scheduler permite isso e foi projetado para abordar as melhorias de desempenho e escalabilidade nos lembretes do Actor e na API do Workflow.
Nesta postagem, vou me aprofundar nos detalhes de como o serviço Scheduler foi projetado e sua implementação para dar a você algum contexto.
O Problema que o Scheduler Resolve
Antes da v1.14, se você quisesse agendar um trabalho, você poderia usar o componente de vinculação Cron para implementar trabalhos recorrentes em um cronograma definido regularmente; por exemplo, automatizar backups de banco de dados, enviar notificações de e-mail recorrentes, executar tarefas de manutenção de rotina, processamento de dados e ETL, executar atualizações do sistema e processamento em lote.
No entanto, a abordagem de vinculação carecia nas áreas de durabilidade e escalabilidade e, mais importante, não podia ser combinada com outras APIs do Dapr. Por exemplo, outra solicitação frequente é poder ter mensagens atrasadas para pub/sub, e sem dúvida haverá outros cenários de trabalho atrasados que surgirão.
Limitações da Abordagem de Vinculação Cron
-
Durabilidade: O componente de vinculação Cron não fornece nenhuma garantia de durabilidade. Se o processo que hospeda o trabalho for interrompido, o trabalho agendado será perdido.
-
Escalabilidade: O componente de vinculação Cron é executado no mesmo processo que o aplicativo, o que significa que a escalabilidade do trabalho agendado é limitada pela escalabilidade do aplicativo. Isso pode levar a problemas de desempenho se houver muitos trabalhos agendados.
-
Integração com outras APIs do Dapr: O componente de vinculação Cron é uma solução isolada e não pode ser facilmente combinado com outras APIs do Dapr, como pub/sub ou atores.
Para resolver esses problemas, o Dapr 1.14 introduziu o serviço Scheduler, que fornece uma API de trabalhos independente e escalável, com garantias de durabilidade.
O Serviço Scheduler do Dapr
O serviço Scheduler do Dapr é um serviço de plano de controle que gerencia a execução de trabalhos assíncronos. Ele fornece uma API para criar, atualizar, excluir e consultar trabalhos, bem como uma implementação de plano de controle que garante a durabilidade e a escalabilidade dos trabalhos.
Arquitetura do Scheduler
O serviço Scheduler é composto por dois componentes principais:
-
API de Trabalhos: Essa é a API HTTP que os clientes usam para criar, atualizar, excluir e consultar trabalhos.
-
Serviço de Plano de Controle: Esse é o serviço que gerencia a execução dos trabalhos. Ele é responsável por garantir a durabilidade e a escalabilidade dos trabalhos.
O serviço de plano de controle usa um armazenamento durável (como um banco de dados) para armazenar os detalhes dos trabalhos. Quando um trabalho precisa ser executado, o serviço de plano de controle envia uma mensagem para um serviço de execução, que é responsável por executar o trabalho.
Recursos da API de Trabalhos
A API de Trabalhos do Scheduler fornece os seguintes recursos:
-
Criar Trabalho: Crie um novo trabalho especificando o nome, a programação, os dados de entrada e outros metadados.
-
Atualizar Trabalho: Atualize os detalhes de um trabalho existente, como a programação ou os dados de entrada.
-
Excluir Trabalho: Exclua um trabalho existente.
-
Consultar Trabalhos: Consulte a lista de trabalhos existentes, filtrando por status, programação, etc.
-
Obter Trabalho: Obtenha os detalhes de um trabalho específico.
-
Executar Trabalho Imediatamente: Execute um trabalho imediatamente, ignorando sua programação.
Além disso, a API de Trabalhos suporta vários tipos de programação, incluindo:
- Cronograma Cron: Execute o trabalho de acordo com um cronograma Cron.
- Atraso: Execute o trabalho após um atraso especificado.
- Recorrente: Execute o trabalho em um intervalo recorrente.
Integração com outras APIs do Dapr
Uma das principais vantagens do serviço Scheduler é sua capacidade de se integrar com outras APIs do Dapr, como pub/sub e atores. Por exemplo, você pode usar o Scheduler para enviar notificações atrasadas por meio do pub/sub ou para executar tarefas de manutenção em seus atores.
Essa integração é possível porque o Scheduler usa o runtime do Dapr para se comunicar com outros serviços. Quando um trabalho precisa ser executado, o serviço de plano de controle do Scheduler envia uma mensagem para o runtime do Dapr, que então invoca o código do trabalho.
Implementação do Serviço de Plano de Controle
O serviço de plano de controle do Scheduler é responsável por garantir a durabilidade e a escalabilidade dos trabalhos. Ele usa um armazenamento durável, como um banco de dados, para armazenar os detalhes dos trabalhos.
Quando um trabalho precisa ser executado, o serviço de plano de controle envia uma mensagem para um serviço de execução, que é responsável por invocar o código do trabalho. Esse serviço de execução pode ser dimensionado independentemente do serviço de plano de controle, o que permite uma melhor escalabilidade.
Além disso, o serviço de plano de controle usa técnicas como particionamento e replicação para garantir a alta disponibilidade e a tolerância a falhas.
Conclusão
O serviço Scheduler do Dapr 1.14 fornece uma solução escalável e durável para agendar e executar trabalhos assíncronos. Ele resolve as limitações da abordagem de vinculação Cron e permite uma melhor integração com outras APIs do Dapr.
Com o Scheduler, você pode criar, atualizar, excluir e consultar trabalhos por meio de uma API HTTP, com garantias de durabilidade e escalabilidade. Além disso, você pode integrar o Scheduler com outras APIs do Dapr, como pub/sub e atores, para criar soluções mais poderosas e flexíveis.
Se você está trabalhando com cargas de trabalho assíncronas em seu aplicativo Dapr, o serviço Scheduler é uma adição valiosa ao seu conjunto de ferramentas.