Восстановление устаревших блокировок профилей браузера
Блокировка профиля браузера предотвращает одновременное открытие одного и того же аккаунта двумя воркерами.
Большинство систем автоматизации допускают ошибки при восстановлении. Когда воркер аварийно завершает работу или теряет сеть, система видит старую блокировку и удаляет её. Это позволяет очереди двигаться дальше, но приводит к повреждению состояния аккаунта.
Устаревшая блокировка — это не файл, который нужно просто удалить. Это незавершенная операция, требующая контролируемого пути восстановления.
Перестаньте относиться к блокировкам как к простым файлам. Относитесь к ним как к аренде (leases).
Для безопасной аренды необходимы:
- Владелец
- Срок действия (expiry time)
- Heartbeat (сигнал активности)
- Номер версии (fencing token)
Номер версии имеет решающее значение. Каждая операция записи должна включать актуальный токен. Если старый воркер возвращается после того, как управление перехватил новый, система отклоняет старый токен. Это предотвращает скрытое повреждение данных.
Не переходите сразу из состояния «заблокировано» в «доступно». Используйте конечный автомат (state machine) для прохождения через следующие этапы:
- Удержано (Held)
- Подозрение на устаревание (Suspected stale)
- В карантине (Quarantined)
- Проверено (Inspected)
- Доступно | Ожидание возобновления | Ручная проверка
Этап карантина критически важен. Он не позволяет второму воркеру взаимодействовать с профилем, пока вы проводите расследование.
В ходе расследования необходимо собрать доказательства:
- Был ли процесс браузера всё еще запущен?
- Каким был последний известный URL?
- Находилась ли задача на критическом этапе, таком как оформление заказа или изменение настроек?
- Есть ли скриншот ошибки?
Если задача прервалась во время критической операции, не возобновляйте её автоматически. Отправьте её на ручную проверку. У автоматизации должны быть границы, чтобы предотвратить ошибочные решения.
Распространенные ошибки, которых следует избегать:
- Удаление блокировки без проверки безопасности профиля.
- Неиспользование fencing tokens для отклонения запоздалых записей от старых воркеров.
- Повторная отправка форм без использования известной безопасной контрольной точки.
- Смена прокси-серверов в процессе восстановления.
Цель не в том, чтобы усложнить процесс восстановления. Цель в том, чтобы сделать его явным.
Блокировка — это лишь симптом. Ваша система должна защищать среду аккаунта, стоящую за этой блокировкой.
Один профиль. Одна аренда владельца. Одна активная задача. Один след доказательств. Одно решение о восстановлении.