Використання ключів маршрутизації та оренди профілів у чергах Playwright Worker

Помилка Playwright на кшталт TimeoutError: page.click failed — це часто неправда.

Помилка повідомляє вам, що побачив скрипт. Вона не пояснює, чому скрипт від самого початку опинився не в тому місці.

Я одного разу бачив, як два воркери (workers) взяли завдання для одного й того самого акаунта. Обидва воркери відкрили один і той самий профіль браузера одночасно. Один воркер чекав на повільну сторінку. Інший воркер зробив повторну спробу, змінив стан сесії та спричинив збій.

Проблема була не в коді. Проблема була в черзі.

Більшість черг воркерів розроблені для безстанних (stateless) завдань:

  • Взяти завдання.
  • Знайти вільний воркер.
  • Виконати завдання.
  • Позначити як виконане.

Це працює для скриншотів або API-викликів. Це не працює для автоматизації браузера.

Профіль браузера не є безстатним. Він належить одному акаунту, одному проксі та одному стану сесії. Найшвидший воркер — не завжди правильний воркер.

Щоб безпечно масштабуватися, ви повинні змінити свою логіку.

Замість того, щоб питати: Який воркер вільний?

Питайте: Яке середовище акаунта зараз безпечно використовувати?

Ви можете вирішити це за допомогою трьох рівнів:

  1. Ключі маршрутизації (Routing Keys) Не дозволяйте будь-якому воркеру брати будь-яке завдання. Використовуйте ключ маршрутизації на основі ID профілю або ID акаунта. Це гарантує, що лише один воркер працюватиме з конкретним профілем одночасно.

  2. Оренда профілів (Profile Leases) Отримання завдання в черзі означає, що воркер володіє завданням. Оренда профілю означає, що воркеру дозволено використовувати конкретний профіль браузера протягом певного часу. Використовуйте оренду з механізмом heartbeat (серцебиття). Якщо завдання займає більше часу, ніж очікувалося, воркер повинен продовжити оренду.

  3. Токени огородження (Fencing Tokens) Застарілі воркери є небезпечними. Якщо воркер втрачає оренду через затримку мережі, але продовжує працювати, він може спробувати записати дані. Використовуйте токен огородження. Рівень зберігання даних має відхиляти будь-які записи зі старим токеном.

Ви також повинні додати шлюз готовності (readiness gate). Перед запуском Playwright перевірте наступне:

  • Чи акаунт на паузі?
  • Чи потребує профіль перевірки людиною?
  • Чи відповідає регіон проксі вимогам завдання?

Заблоковане завдання — це не завжди невдале завдання. Часто це просто завдання, яке чекає на відповідний контекст.

Припиніть будувати черги, які пріоритезують лише швидкість. Будуйте черги, які пріоритезують стан акаунта.

Джерело: https://dev.to/web4browser/using-routing-keys-and-profile-leases-in-playwright-worker-queues-a53