brainax

Tarefas em segundo plano e agendamento

Aula 17 de 26 do curso “Vibe coding”. Grátis, com animações e teste.

O usuário não espera

Exemplo da aula: você cuida do site da mídia da escola, com newsletter. Algumas tarefas demoram: mandar e-mail para mil inscritos, comprimir um vídeo, montar um relatório. Se fizer isso enquanto a pessoa espera depois do clique, ela fica minutos olhando a rodinha. Solução: tarefa em segundo plano. O servidor responde na hora “recebido” e faz o trabalho depois. As tarefas entram numa fila, como os cartões do esquema, e um worker, programa executor, pega uma por uma.

Cron: trabalho com despertador

Cron é rodar uma tarefa por horário, como um despertador. “Todo dia 9:00” no esquema: o servidor acorda sozinho e manda o lembrete “prazo da matéria hoje”. O horário é escrito num código curto como 0 9 * * *: minuto 0, hora 9, e os asteriscos significam “qualquer dia, mês e dia da semana”. A armadilha: o horário costuma ser em UTC, o horário mundial, não o seu. Confira na documentação.

Onde rodar isso

Cloudflare: os Cron Triggers rodam um Worker por horário. Vercel: os Cron Jobs chamam o endereço da sua API na hora marcada. GitHub Actions (automação dentro do GitHub) roda um script por horário, mas não promete o minuto exato. Inngest: um serviço para cadeias de passos, por exemplo “se cadastrou, lembre em três dias”. Use onde o projeto já está. Os limites estão no site do serviço.

Falhou? Tente de novo

Uma tarefa pode falhar: o serviço de e-mail caiu por um minuto, a internet piscou. Um bom sistema não desiste, tenta de novo depois de uma pausa: é a seta “repetir” do esquema. No Inngest cada passo se repete sozinho, e passos já feitos não rodam outra vez. Peça ao agente: “adicione novas tentativas com pausa e grave no log se a tarefa continuar falhando”. Log é o diário onde o servidor anota o que aconteceu.

Nunca cobrar duas vezes

Repetir é perigoso se o passo já funcionou. Exemplo: a assinatura foi cobrada, mas a resposta se perdeu no caminho. Uma repetição às cegas cobra de novo. Você precisa de idempotência: repetir o mesmo passo dá o mesmo resultado que rodar uma vez. Como: cada operação tem um número único, e o servidor primeiro confere “isso já foi feito?”. Webhooks do esquema também podem chegar duas vezes, mesma regra.

Teste-se

  1. Por que mandar mil e-mails como tarefa em segundo plano?
    Resposta certa: Para a pessoa não esperar tudo ser enviado. O servidor responde “recebido” na hora e os e-mails saem depois pela fila. O servidor continua fazendo o trabalho.
  2. O que é cron?
    Resposta certa: Rodar uma tarefa por horário. Cron funciona como despertador: “todo dia às 9:00”. Repetir após erro é retry, e o diário de eventos é o log.
  3. O que significa idempotência num passo de pagamento?
    Resposta certa: Repetir o passo não cobra uma segunda vez. Erros sempre acontecem. Idempotência significa que repetir é seguro: o servidor vê o número da operação e não a faz de novo.

← API: conectando outros serviços Segurança do app →