Коллеги спрашивают: Лёша, как там сервис?
Коллеги спрашивают: Лёша, как там сервис? Сначала большое спасибо всем, кто присылает сообщения с ошибками и подсказывает, где в интерфейсе написано не для людей. Стараюсь как могу исправлять =) Чтобы было спортивно и прямо интересно, запустил массовую проверку: 12 тысяч с хвостиком доменов — стоматологии, клиники, компании по продаже услуг. Почти все, с кем работал в SEO последние 20 лет. Это не абстрактный стресс-тест, а продуктовая задача: собрать данные по сайтам, посчитать SEO Health Score и получить основу для рейтинга сайтов компаний. Один сайт вручную — это демо, уровень pet проекта. Измерение тысяч проектов — это продукт. Плюс нужно проверить несколько гипотез, чтобы потом не краснеть: - как краулер ведёт себя на живом интернете, а не на тестовых сайтах; - отловить WAF, редиректы, битую вёрстку, noindex-ловушки; - проверить очередь, память и воркеры под длинной нагрузкой, а не под одним кликом Проверить. Как это устроено: домены попадают в админскую очередь, до 500 страниц за скан. Параллельно крутятся 2 слота плюс 3 deep для тяжёлых тарифов Solo/Pro. Админская очередь deep не забирает — специально, чтобы не висеть неделями. Пользовательские проверки имеют приоритет: гостевые и кабинетные задачи встают вперёд админской очереди. Пока идёт мой прогон 12k, сервис для людей работает штатно. Каждый сайт — отдельная задача: краул, SEO-проверки, Health Score, снимок в /report/{domain}. Сейчас в очереди около 7 000 сайтов, в работе 2 скана, старейшие ждут 50+ часов. Математика простая: 12k на 2 слота по несколько минут на сайт — это дни, не часы. Проблемы, которые поймал за прогон, и что с ними сделал: 1. Сайт живой, а сканер — нет. 429, anti-bot, cookie-challenge. В браузере открывается, наш IP — робот. Не падаем: soft-fail с понятным текстом в админке для того, кто запускал сканирование, и никакой фейковой оценки 0 баллов. Чтобы не получилось так, что пользователь заплатил, а проверить не может. Выдаётся понятное предупреждение, что и как сделать. 2. Редирект на другой домен. Ввели clinic.ru, а финальный URL — universclinic.ru. Честно отвечает: это уже другой хост, не подменяю домен проекта. 3. Весь сайт в noindex. Технически открывается, но для SEO не существует. Отдельная причина all_noindex, не путаем с WAF. 4. Checkpoint не сохранился в БД. На одном сайте в meta попали null-байты (\x00) — PostgreSQL JSONB их не принимает. Скан шёл, а прогресс в БД — нет. Нашёл, починил: теперь есть санитизация перед записью в analysis_tasks. 5. Очередь выглядит страшно, но это не авария. Список на 7k похож на пожар, на деле ожидаемый результат. Алерты в MAX не шлю — только по реальным инцидентам: stall, zombie, timeout-storm. 6. Памяти на VPS на 8 ГиБ. Две параллельные проверки по 500 страниц дают около 1,3 Gb на воркер. Подкрутил лимиты cgroup, RSS-watchdog, recycle воркера после каждого скана — чтобы утечки не копились. Если будет тесно, апгрейдим VPS. 7. Деплой посреди прогона. Рестарт воркеров — это SIGTERM текущим сканам. Checkpoint + resume: после перезапуска скан продолжается с места обрыва, а не с нуля (если статус ещё processing). Что это даёт: честные отчёты — нет 100 баллов там, где сканер не смог прочитать сайт. Каталог с рейтингом — реальные домены с оценкой и снимком Health Score, а не пустая витрина. Очередь, Redis, Celery, Postgres проверены не на словах, а пачкой в 12 000 URL. Тексты ошибок — для маркетолога, не для разработчика. 12 000 сайтов — это не нажали кнопку и забыли. Это конвейер: 2 слота, честные soft-fail, checkpoint, приоритет живым пользователям — и баги, которые находят только настоящие пользователи и поисковые системы. Прогон идёт, самые упрямые домены уже отфильтрованы, остальное — вопрос времени и терпения воркеров. Про бота в Максе, который всем этим управляет, расскажу потом. Очень удобная штука.