Uso de claves de enrutamiento y arrendamientos de perfiles en colas de trabajadores de Playwright

Un error de Playwright como TimeoutError: page.click failed suele ser una mentira.

El error te dice lo que el script vio. No te dice por qué el script estaba en el lugar equivocado para empezar.

Una vez vi a dos trabajadores tomar trabajos para la misma cuenta. Ambos trabajadores abrieron el mismo perfil de navegador al mismo tiempo. Un trabajador estaba esperando en una página lenta. El otro trabajador reintentó, cambió el estado de la sesión y causó un fallo.

El problema no era el código. El problema era la cola.

La mayoría de las colas de trabajadores están diseñadas para trabajos sin estado (stateless).

  • Tomar un trabajo.
  • Encontrar un trabajador libre.
  • Ejecutar la tarea.
  • Marcarlo como terminado.

Esto funciona para capturas de pantalla o llamadas a API. Falla para la automatización de navegadores.

Un perfil de navegador no es sin estado. Pertenece a una cuenta, un proxy y un estado de sesión. El trabajador más rápido no siempre es el trabajador adecuado.

Para escalar de forma segura, debes cambiar tu lógica.

En lugar de preguntar: ¿Qué trabajador está libre?

Pregunta: ¿Qué entorno de cuenta es seguro usar ahora?

Puedes resolver esto con tres capas:

  1. Claves de enrutamiento (Routing Keys) No permitas que cualquier trabajador tome cualquier trabajo. Usa una clave de enrutamiento basada en el ID del perfil o el ID de la cuenta. Esto garantiza que solo un trabajador toque un perfil específico a la vez.

  2. Arrendamientos de perfiles (Profile Leases) Una reclamación de cola significa que un trabajador posee un trabajo. Un arrendamiento de perfil significa que se le permite a un trabajador usar un perfil de navegador específico durante un tiempo determinado. Usa un arrendamiento con un latido (heartbeat). Si la tarea tarda más de lo esperado, el trabajador debe renovar el arrendamiento.

  3. Tokens de cerco (Fencing Tokens) Los trabajadores obsoletos son peligrosos. Si un trabajador pierde su arrendamiento debido a un retraso en la red pero sigue ejecutándose, podría intentar escribir datos. Usa un token de cerco. La capa de almacenamiento debe rechazar cualquier escritura de un token antiguo.

También debes añadir una puerta de preparación (readiness gate). Antes de lanzar Playwright, comprueba esto:

  • ¿Está la cuenta pausada?
  • ¿Necesita el perfil revisión humana?
  • ¿Coincide la región del proxy con los requisitos del trabajo?

Un trabajo bloqueado no siempre es un trabajo fallido. A menudo es solo un trabajo esperando el contexto adecuado.

Deja de construir colas que solo prioricen la velocidad. Construye colas que prioricen el estado de la cuenta.

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