Jobs em segundo plano e workers
Explore como jobs em segundo plano e workers lidam com tarefas de backend assíncronas, de longa duração e não bloqueantes.
Por que existem jobs em segundo plano
Algumas tarefas demoram demais para ser executadas durante uma requisição, então elas precisam ser movidas para fora do ciclo de vida da requisição para manter os sistemas rápidos e responsivos.
- Tarefas de longa duração podem atrasar significativamente as respostas aos usuários.
- Exemplos comuns incluem envio de e-mails, geração de relatórios e processamento de arquivos de mídia.
- Jobs em segundo plano permitem que essas tarefas sejam executadas separadamente das requisições voltadas ao usuário.
Detalhes
Em um sistema backend típico, espera-se que uma requisição seja concluída rapidamente. Em geral, os usuários esperam respostas em milissegundos ou, no máximo, em alguns segundos. No entanto, algumas operações levam muito mais tempo, como processar vídeos enviados, gerar relatórios grandes ou enviar notificações para muitos usuários.
Se essas tarefas forem executadas diretamente dentro do ciclo de vida da requisição, o servidor precisará esperar que elas terminem antes de responder. Isso leva a tempos de resposta lentos e pode até causar timeouts, especialmente em condições de alto tráfego.
Isso cria uma experiência ruim para o usuário e também reduz a eficiência do sistema, já que os recursos ficam ocupados lidando com operações de longa duração em vez de atender novas requisições.
Para resolver isso, os sistemas backend movem essas tarefas para o segundo plano. O servidor responde rapidamente ao cliente, enquanto a tarefa de longa duração continua de forma assíncrona fora do ciclo de vida da requisição.
Essa separação é um padrão de design fundamental em sistemas backend modernos, permitindo respostas rápidas e, ao mesmo tempo, lidando com operações complexas e demoradas de forma confiável.
Processos de Worker
Processos de worker são programas dedicados que executam jobs em segundo plano fora do servidor web principal.
- Workers executam separadamente do servidor web e se concentram apenas no processamento de jobs.
- Eles consomem tarefas continuamente de uma fila.
- Adicionar mais workers aumenta a taxa de processamento do sistema e a capacidade de processamento paralelo.
Detalhes
Processos de worker são responsáveis por executar tarefas armazenadas em uma fila. Diferentemente do servidor web, que lida com requisições recebidas, os workers operam de forma independente e são otimizados para a execução de jobs em segundo plano.
Cada worker escuta continuamente a fila de tarefas e busca jobs quando eles estão disponíveis. Assim que uma tarefa é recuperada, o worker a processa e então passa para o próximo job.
Como os workers executam como processos separados, eles podem escalar de forma independente da aplicação principal. Isso permite que os sistemas lidem com cargas de trabalho crescentes sem desacelerar o tratamento de requisições.
Adicionar mais workers aumenta a taxa de processamento ao permitir que vários jobs sejam processados em paralelo, o que é essencial para lidar com grandes volumes de tarefas em segundo plano de forma eficiente.
Brokers de Mensagens e Sistemas de Filas
Brokers de mensagens fornecem a infraestrutura que armazena, distribui e entrega com confiabilidade jobs em segundo plano para workers.
- Brokers de mensagens atuam como o sistema subjacente para filas de tarefas.
- Tecnologias comuns incluem Kafka, RabbitMQ e AWS SQS.
- Eles garantem que as tarefas sejam armazenadas, entregues e processadas com confiabilidade.
Detalhes
Um broker de mensagens é um sistema que fica entre a aplicação e os processos worker, gerenciando o fluxo de tarefas. Quando a aplicação cria um job, ela o envia para o broker em vez de enviá-lo diretamente para um worker.
O broker armazena o job de forma durável, garantindo que ele não seja perdido mesmo se partes do sistema falharem. Isso é fundamental para a confiabilidade, especialmente em sistemas distribuídos, onde falhas podem ocorrer em qualquer ponto.
Os workers então se conectam ao broker e puxam tarefas quando estão prontos para processá-las. Isso desacopla a aplicação da camada de execução, permitindo que ambos os lados escalem de forma independente.
Brokers de mensagens também suportam processamento distribuído, permitindo que vários workers em diferentes máquinas lidem com tarefas simultaneamente, mantendo garantias confiáveis de entrega.
Jobs com Atraso
Jobs com atraso permitem que tarefas sejam agendadas para execução em um momento posterior, em vez de serem executadas imediatamente.
- Tarefas podem ser agendadas para serem executadas após um atraso específico.
- Casos de uso comuns incluem lembretes e a repetição de jobs com falha.
- Isso permite automação baseada em tempo em sistemas de backend.
Detalhes
Nem todas as tarefas precisam ser executadas imediatamente. Em muitos casos, é necessário agendar um trabalho para acontecer em um momento posterior, como enviar um e-mail de lembrete após 24 horas ou tentar novamente uma operação com falha após um curto atraso.
Jobs com atraso permitem que os sistemas definam quando uma tarefa deve ser executada, em vez de processá-la imediatamente. A tarefa é armazenada com um atraso ou horário agendado, e o sistema garante que ela seja executada quando esse momento for alcançado.
Isso normalmente é implementado usando message brokers ou sistemas de agendamento que acompanham quando os jobs devem ficar disponíveis para os workers. Até que o atraso expire, a tarefa permanece inativa e não é consumida pelos workers.
Quando o horário agendado chega, o job é movido para a fila ativa e processado como qualquer outra tarefa. Esse mecanismo é essencial para construir sistemas de retry confiáveis e workflows baseados em tempo.
A execução atrasada é um recurso importante em sistemas modernos de backend, permitindo automação e melhorando a tolerância a falhas sem exigir intervenção manual.
Jobs Cron
Jobs cron executam tarefas automaticamente em um cronograma fixo, permitindo operações recorrentes sem intervenção manual.
- Jobs cron executam tarefas em intervalos de tempo predefinidos.
- Casos de uso comuns incluem manutenção, relatórios e faturamento.
- Eles são acionados por um scheduler, em vez de solicitações de usuários.
Detalhes
Jobs cron são usados para executar tarefas repetidamente em horários ou intervalos específicos, como toda noite, todos os dias ou toda semana. Diferentemente de background jobs acionados por ações do usuário, jobs cron são iniciados por um scheduler.
Um scheduler, muitas vezes chamado de cron, acompanha regras baseadas em tempo e aciona tarefas quando essas condições são atendidas. Por exemplo, um sistema pode executar uma tarefa de limpeza do banco de dados toda noite à meia-noite ou gerar relatórios de analytics toda manhã.
Depois de acionada, a tarefa agendada normalmente é enviada para um processo worker ou executada como um background job. Isso permite que o sistema lide com cargas de trabalho recorrentes sem afetar o processamento de requisições em tempo real.
Jobs cron são essenciais para automatizar operações rotineiras, garantindo que tarefas de manutenção e periódicas sejam executadas de forma consistente, sem esforço manual.
Tratamento de Falhas em Jobs em Segundo Plano
Jobs em segundo plano podem falhar, então os sistemas devem implementar estratégias de retry para garantir que as tarefas sejam eventualmente concluídas.
- Falhas são esperadas em sistemas distribuídos e devem ser tratadas explicitamente.
- Filas de retry permitem que as tarefas sejam tentadas novamente após uma falha.
- Filas de dead-letter capturam tarefas que falham repetidamente.
Detalhes
Tarefas em segundo plano geralmente dependem de sistemas externos, como bancos de dados, APIs ou serviços de rede, que podem falhar de forma imprevisível. Por isso, o tratamento de falhas é uma parte crítica de qualquer sistema de jobs em segundo plano.
Uma abordagem comum é tentar novamente as tarefas que falharam. Quando um job falha, ele é colocado de volta em uma fila de retry e tentado novamente após algum atraso. Isso aumenta a chance de sucesso se a falha tiver sido temporária.
Para evitar sobrecarregar o sistema, os retries geralmente são espaçados usando exponential backoff, em que cada nova tentativa espera mais tempo do que a anterior. Isso evita que falhas rápidas e repetidas causem carga adicional.
Se uma tarefa falhar muitas vezes, ela é movida para uma fila de dead-letter. Isso permite que engenheiros inspecionem e depurem jobs problemáticos sem bloquear o restante do sistema.
Esses padrões garantem que o processamento em segundo plano seja confiável, mesmo na presença de falhas, o que é essencial para construir sistemas de backend robustos.
Seção de Perguntas
1 / 5
Esta lição faz parte do conteúdo premium
Faça upgrade para o plano premium para remover o desfoque e liberar a leitura completa.