Self-healing: 10+ «нянечек», которые сами разлипают залипшее в сервисе выкупов

Оно сломается ночью. Прокси, браузер, верстка WB — что-нибудь да отвалится в 3:40, когда все спят.

Вопрос не в этом. Вопрос — кто это починит.

Надежность сервиса самовыкупов — это не «он никогда не ломается». Это «он ломается и чинит себя сам за 5-10 минут, пока ты спишь». В Toptaker крутится 10+ периодических задач-сторожей (cron-воркеры): одни ловят задачи, застрявшие в статусе PROGRESS дольше 30 минут, и перезапускают их; другие отпускают busy-аккаунты, которые висят занятыми больше часа; третьи раз в неделю сверяют целостность балансов. Любой залип сам разлипнется без твоего вмешательства.

Дальше — конкретно: что за задачи, с какой частотой бегают и почему это важнее красивого дашборда.

Почему «он не падает» — это вранье, а «он сам встаёт» — правда?

Любая система автоматизации на маркетплейсах падает. Браузер с антидетектом крашится, прокси отваливается, WB меняет верстку, аккаунт ловит капчу на полпути.

Кто обещает «100% безотказно» — либо не запускал это в проде, либо врёт.

Самовыкупы — серая зона. Я 5 лет на WB, до этого дропил на eBay из Вьетнама, и насмотрелся, как «надёжные» сервисы тихо дохнут на ночном прогоне. Антифрод WB ловит ~98% накрутки по 200+ параметрам. И если выкуп застрял на середине сценария — это не просто «не докупилось». Это полузавершённая сессия, которая выглядит подозрительнее честного отказа.

Поэтому вопрос не «как не упасть», а «как встать так, чтобы не оставить за собой грязный след».

Решение скучное и инженерное: не надеяться, что воркер доработает, а ставить над ним нянечку. Она щупает его пульс и перезапускает с чистого листа.

Что делают эти 10+ нянечек?

Вот основной состав сторожей. Частота — реальная, из прода.

  • check_stuck_buyout_tasks — каждые 5 минут. Ищет выкуп-задачи в статусе PROGRESS дольше 30 минут и рестартит их. 30 минут — это уже точно «зависло», а не «долго думает».
  • recover_unfinalized_done_tasks — каждые 10 минут. Подбирает задачи, которые отработали, но не дофиналились (не записали результат, не закрыли сессию). Доводит до конца.
  • restart_stuck_review_tasks — каждые 5 минут. То же самое, но для отзывов: залипший review перезапускается.
  • release_stale_reservations — каждые 10 минут. Отпускает busy-аккаунты, которые висят занятыми дольше часа. Без этого аккаунт «протухает» в резерве и выпадает из ротации — а дальше начинается тихое голодание по аккаунтам.
  • check_all_proxies — каждые 10 минут. Гоняет проверку прокси: мёртвый прокси не должен утащить за собой выкуп.
  • check_balance_integrity — по понедельникам в 04:00. Сверяет целостность кошельков и балансов: не списалось ли лишнего, не уехал ли резерв.

Плюс ещё сторожа по мелочи — отсюда «10+». Логика у всех одна: короткий интервал + жёсткий порог по времени + идемпотентный рестарт. Идемпотентный (повторный запуск не создаёт дубль, а продолжает с того же места) — ключевое слово, иначе «самопочинка» наделает двойных выкупов.

Чем это отличается от того, как делают конкуренты?

Большинство сервисов выкупов строятся по схеме «один большой скрипт запустил пачку — и молится». Если на 40-й из 100 задач браузер умер, оставшиеся 60 просто не выполняются. Ты узнаёшь об этом утром по недокупу. А часто — вообще не узнаёшь, потому что в личном кабинете «задача создана» висит зелёным.

У Toptaker нет «одного большого прогона». Есть очередь задач и пул сторожей, которые независимо подбирают застрявшее. Разница на пальцах:

  • У них: упал воркер — задачи зависли до утра, пока человек не перезапустит руками.
  • У нас: упал воркер — check_stuck_buyout_tasks через ≤5 минут увидит PROGRESS>30мин и перезапустит задачу на свободном аккаунте.
  • У них: аккаунт занялся и не освободился — выпал из работы навсегда, пул тихо сжимается.
  • У нас: release_stale_reservations через ≤10 минут вернёт busy-аккаунт >1ч в строй.

Это та же философия, что и в самопочинке селекторов: WB меняет верстку — наш парсер сам пересобирает селектор (CSS/XPath-путь до элемента на странице), а не падает с «элемент не найден». Self-healing на уровне задач — продолжение того же подхода, только этажом выше: не «починить клик», а «починить весь застрявший прогон».

Почему именно 30 минут и 1 час, а не «сразу»?

Потому что «сразу рестартить» — худшее, что можно сделать.

Реальный выкуп идёт по человеческому сценарию: зашёл, полистал каталог, посмотрел карточку, добавил в корзину, подождал, оформил. Это поведенческий профиль, который антифрод и читает. Дёргай рестарт каждые 30 секунд — и завалишь WB шквалом полусессий с одного товара. А следом приедет снятие СПП (скидка постоянного покупателя) на 30 дней по всему ассортименту. Это уже не «не докупилось». Это слитые деньги на ровном месте.

Поэтому пороги подобраны так, чтобы отличить «реально завис» от «нормально долго работает»:

  • 30 минут на выкуп-задачу — за это время честный сценарий точно успевает завершиться.
  • 1 час на резерв аккаунта — дольше аккаунт легально занятым быть не должен.

Цель — не максимум выкупов в минуту, а проходимость до 95% без следов накрутки. Не «гарантия 100%» — такого в серой зоне не существует.

Что это значит для тебя как для клиента?

Ничего. И это правильный ответ.

Ты нажимаешь кнопку, ставишь объём — и не сидишь над дашбордом с валидолом. Отвалится ночью прокси, крашнется браузер, выкатит WB новую верстку — оно перезапустится само в пределах 5-10 минут.

Тебе не придёт паническое «у нас всё упало, ждите до утра». Тебе вообще ничего не придёт. Чинить будет некого — уже починилось.

Сервис-инструмент, а не агентство: нажал кнопку — делает сам и сам себя латает. Подробнее про этот подход — чем Toptaker отличается.

FAQ

Что значит self-healing в сервисе самовыкупов? Это набор периодических задач-сторожей, которые сами находят застрявшие выкупы и отзывы, перезапускают их и освобождают зависшие аккаунты — без ручного вмешательства. В Toptaker таких сторожей 10+.

Как быстро система чинит зависший выкуп? Основные сторожа бегают каждые 5-10 минут. Выкуп-задача в статусе PROGRESS дольше 30 минут перезапускается в пределах одного цикла. На практике любой залип разлипается за 5-10 минут.

Почему рестарт не делается мгновенно? Мгновенный рестарт ломает поведенческий профиль и провоцирует антифрод WB (~98% по 200+ параметрам). Пороги 30 минут / 1 час отделяют реально зависшую задачу от нормально работающей и не оставляют грязных полусессий.

Не создаёт ли самопочинка дубли выкупов? Нет. Рестарты идемпотентны: повторный запуск продолжает задачу, а не плодит новый выкуп. Иначе «самопочинка» сама стала бы источником накрутки.

Это гарантирует 100% выполнение? Нет. Самовыкупы — серая зона, гарантий 100% не бывает. Self-healing вытягивает проходимость до 95% и убирает класс отказов «зависло и стоит до утра».


Падать будет всё. Вопрос один: кто встанет первым с пола — ты или система. У нас встаёт система, а ты спишь.

Хотите так же — но без ручной возни?

Toptaker делает выкупы и отзывы автоматически: SRID, чеки и скриншоты по каждому действию. 5 выкупов бесплатно при регистрации.