Using Routing Keys and Profile Leases in Playwright Worker Queues
Une erreur Playwright telle que TimeoutError: page.click failed est souvent un mensonge.
L'erreur vous indique ce que le script a vu. Elle ne vous dit pas pourquoi le script se trouvait au mauvais endroit dès le départ.
J'ai déjà vu deux workers récupérer des tâches pour le même compte. Les deux workers ont ouvert le même profil de navigateur en même temps. Un worker attendait sur une page lente. L'autre worker a tenté une nouvelle exécution, a modifié l'état de la session et a provoqué un échec.
Le problème ne venait pas du code. Le problème venait de la file d'attente.
La plupart des files d'attente de workers sont conçues pour des tâches sans état (stateless).
- Récupérer une tâche.
- Trouver un worker disponible.
- Exécuter la tâche.
- La marquer comme terminée.
Cela fonctionne pour les captures d'écran ou les appels API. Cela échoue pour l'automatisation de navigateur.
Un profil de navigateur n'est pas sans état. Il appartient à un compte, un proxy et un état de session spécifiques. Le worker le plus rapide n'est pas toujours le bon worker.
Pour passer à l'échelle en toute sécurité, vous devez changer votre logique.
Au lieu de demander : Quel worker est disponible ?
Demandez : Quel environnement de compte est sûr à utiliser maintenant ?
Vous pouvez résoudre cela avec trois couches :
Routing Keys (Clés de routage) Ne laissez pas n'importe quel worker récupérer n'importe quelle tâche. Utilisez une clé de routage basée sur l'ID du profil ou l'ID du compte. Cela garantit qu'un seul worker accède à un profil spécifique à la fois.
Profile Leases (Baux de profil) Une revendication de file d'attente signifie qu'un worker est propriétaire d'une tâche. Un bail de profil signifie qu'un worker est autorisé à utiliser un profil de navigateur spécifique pendant une durée déterminée. Utilisez un bail avec un heartbeat (battement de cœur). Si la tâche prend plus de temps que prévu, le worker doit renouveler le bail.
Fencing Tokens (Jetons de clôture) Les workers obsolètes sont dangereux. Si un worker perd son bail en raison d'une latence réseau mais continue de s'exécuter, il pourrait tenter d'écrire des données. Utilisez un jeton de clôture (fencing token). La couche de stockage doit rejeter toute écriture provenant d'un ancien jeton.
Vous devez également ajouter une passerelle de préparation (readiness gate). Avant de lancer Playwright, vérifiez ces points :
- Le compte est-il en pause ?
- Le profil nécessite-t-il une révision humaine ?
- La région du proxy correspond-elle aux exigences de la tâche ?
Une tâche bloquée n'est pas toujours une tâche échouée. Il s'agit souvent simplement d'une tâche en attente du bon contexte.
Arrêtez de construire des files d'attente qui ne privilégient que la vitesse. Construisez des files d'attente qui privilégient l'état du compte.
Source: https://dev.to/web4browser/using-routing-keys-and-profile-leases-in-playwright-worker-queues-a53
