Usando Routing Keys e Profile Leases em Filas de Workers do Playwright

Um erro do Playwright como TimeoutError: page.click failed é, muitas vezes, uma mentira.

O erro diz o que o script viu. Ele não diz por que o script estava no lugar errado para começar.

Uma vez vi dois workers pegarem tarefas para a mesma conta. Ambos os workers abriram o mesmo perfil de navegador ao mesmo tempo. Um worker estava esperando em uma página lenta. O outro worker tentou novamente, alterou o estado da sessão e causou uma falha.

O problema não era o código. O problema era a fila.

A maioria das filas de workers é projetada para tarefas stateless (sem estado).

  • Pegar uma tarefa.
  • Encontrar um worker livre.
  • Executar a tarefa.
  • Marcá-la como concluída.

Isso funciona para capturas de tela ou chamadas de API. Falha para automação de navegador.

Um perfil de navegador não é stateless. Ele pertence a uma conta, um proxy e um estado de sessão. O worker mais rápido nem sempre é o worker correto.

Para escalar com segurança, você deve mudar sua lógica.

Em vez de perguntar: Qual worker está livre?

Pergunte: Qual ambiente de conta é seguro para usar agora?

Você pode resolver isso com três camadas:

  1. Routing Keys Não permita que qualquer worker pegue qualquer tarefa. Use uma routing key baseada no ID do perfil ou no ID da conta. Isso garante que apenas um worker manipule um perfil específico por vez.

  2. Profile Leases Uma reivindicação na fila significa que um worker detém uma tarefa. Um profile lease significa que um worker tem permissão para usar um perfil de navegador específico por um tempo determinado. Use um lease com um heartbeat. Se a tarefa demorar mais do que o esperado, o worker deve renovar o lease.

  3. Fencing Tokens Workers obsoletos são perigosos. Se um worker perder seu lease devido a um atraso de rede, mas continuar executando, ele pode tentar gravar dados. Use um fencing token. A camada de armazenamento deve rejeitar qualquer gravação vinda de um token antigo.

Você também deve adicionar um gate de prontidão (readiness gate). Antes de iniciar o Playwright, verifique o seguinte:

  • A conta está pausada?
  • O perfil precisa de revisão humana?
  • A região do proxy corresponde aos requisitos da tarefa?

Uma tarefa bloqueada nem sempre é uma tarefa que falhou. Muitas vezes é apenas uma tarefa esperando pelo contexto correto.

Pare de construir filas que priorizam apenas a velocidade. Construa filas que priorizam o estado da conta.

Fonte: https://dev.to/web4browser/using-routing-keys-and-profile-leases-in-playwright-worker-queues-a53