Спецификация · 02.09.2026 · ветка full-update

Что осталось до закупки прокси

Четыре требования из девяти закрыты и лежат в рабочем дереве. Здесь — пять оставшихся, выкатка, и три замера, которых не хватает, чтобы закупка была осознанной.

Продолжает: отчёт по сайзингу · docs/plans/slot-diet-2-proxy-readiness-spec.md (эпик Э4)

Закрыто 4 из 9 Лимиты от числа адресов, корейская площадка под ограничителем, проверка живости, счётчик на машину.
Осталось 5 Два из них прямо блокируют эффект от покупки: немецкий и российский адреса без них не заработают.
Не выкачено 0 из 11 файлов Всё сделанное лежит незакоммиченным. Автосборка стоит из-за биллинга — выкатка ручная.

Где мы

Девять требований эпика Э4

Эпик Э4 отвечает на один вопрос: «что должно быть в коде, чтобы купленный адрес превратился в пропускную способность». Закрытые пункты описаны в docs/plans/slot-diet-2-proxy-readiness-spec.md; ниже — сводка и ссылки на разделы этой спецификации для незакрытых.

IDТребованиеСтатусГде
Э4.1Лимиты считаются от числа живых адресов, а не константойзакрытоcapacity_service.antiban_detail_limit
Э4.2Корейская площадка под ограничителем; риск-режим не снимает защиту адресазакрытоencar_scraper.fetch_car_detail
Э4.3Учёт по физическому адресу — один счётчик на машинузакрытоproxy_limiter.acquire_any_address
Э4.4Пер-площадочные таймаут и кулдаун проверки живостизакрыто кроме метрики→ Э4.4м
Э4.5Переезд на другой адрес только когда их два и большеблокирует→ раздел
Э4.6Российские площадки ходят через маршруты, а не мимо нихблокирует→ раздел
Э4.7Стартовые темпы выведены из замера, а не из устаревшегоосталось→ раздел
Э4.8В админке — добавить адрес сразу трём площадкамосталось→ раздел
Э4.9Фотографии продолжают идти напрямую, мимо проксивыполняетсяне трогали

Что «блокирует» значит буквально. Из трёх адресов, которые предлагается купить первыми, два — немецкий и российский — без пунктов Э4.5 и Э4.6 не дадут ничего: механизм переезда на второй немецкий адрес существует, но никогда не срабатывает, а российские площадки к купленному адресу просто не обратятся.

Требования

Что сделать

Э4.5

Переезд на другой адрес — только когда их два и больше

блокирует закупку
Почему это важно. В настройках объявлено: если немецкую площадку заблокировали, переезжаем на другой адрес и не останавливаем работу. Немецкий адрес ровно один. Переезжать некуда — значит любая блокировка останавливает площадку целиком, хотя код рапортует о переезде.
Сделать
  • Перед решением о переезде проверять, что здоровых адресов у площадки два и больше. Проверка есть — _has_healthy_egress в tasks/distributed_parser_tasks.py, она отвечает «есть хоть один», а нужно «есть куда переехать».
  • Один адрес — не переезд, а честная пауза источника плюс событие в колокольчик админки: «у площадки единственный маршрут».
  • Привязку немецкой площадки к одному адресу на всю кампанию ослабить до «держим адрес, пока не заблокировали».
Принять
При одном адресе блокировка даёт паузу и событие в админке, при двух — запись в журнале о переезде и продолжение работы. Проверяется подстановкой списка адресов в тесте, без сети.
Оценка
Полдня.
Э4.6

Российские площадки ходят через маршруты, а не мимо них

блокирует закупку
Почему это важно. Обе российские площадки берут proxy_list[0] напрямую: без выбора здорового маршрута, без счётчика, без учёта. В таблице адресов для них ноль строк — купленный российский адрес окажется невостребованным. А пока его нет, обе площадки, все фотографии и Telegram делят один и тот же адрес сервера: одна блокировка гасит всё сразу.
Сделать
  • В обоих адаптерах (services/adapters/drom_adapter.py, autoru_adapter.py) заменить взятие первого элемента списка на выбор через order_routes и слот адреса — так же, как это уже сделано у китайских и корейской площадок.
  • Прямой канал остаётся первой ступенью: адрес нужен как запасной путь при ограничении по скорости, а не вместо прямого хода.
  • Добавить строки для обеих площадок в таблицу адресов — после покупки.
Принять
При наличии строки российского адреса не меньше 90% запросов идут через него, а не с адреса сервера. Проверяется по полю маршрута в журнале за сутки.
Оценка
День.
Э4.7

Стартовые темпы — из замера, а не из устаревшего числа

осталось
Почему это важно. Система умеет сама нащупывать безопасный темп для каждого адреса, но стартует от чисел, посчитанных когда-то из времени запроса 7,4 секунды. Замер даёт 2,5. То есть старт занижен втрое, и подниматься до реального потолка система будет часами вместо минут.
Сделать
Пересчитать стартовые темпы в services/proxy_fleet.py по формуле «три места × 60 секунд ÷ измеренное время запроса»: китайская первая — 72 запроса в минуту вместо 24, вторая — 50 вместо 24, корейская — 45 вместо 40, немецкая — около 40 вместо 12 (её значение оценочное, см. пробелы в замерах).
Принять
После суток работы средний темп по журналу не ниже стартового и без всплесков блокировок. Откат — одной переменной окружения, без правки кода.
Оценка
Час на правку, сутки наблюдения.
Э4.8

В админке — добавить адрес сразу трём площадкам

осталось
Почему это важно. Один физический адрес обслуживает три площадки и живёт в таблице тремя строками. Сейчас оператор заводит их по одной и легко ошибётся: строка забыта — площадка не увидит купленный адрес и продолжит работать на прежней ёмкости, молча.
Сделать
  • Кнопка «добавить адрес в группу»: одна форма — три строки для китайских и корейской площадок.
  • Кнопка «включить обратно» для отключённого адреса 79.172.218.165 — после проверки у провайдера.
  • В списке адресов показывать физическую машину одной строкой с отметками площадок, а не тремя одинаковыми.
Принять
Добавление адреса группой поднимает потолок всех трёх площадок в течение минуты — без перезапуска. Это же и приёмка требования Э4.1.
Оценка
День.
Э4.4м

Метрика «ложный вывод адреса из работы»

осталось
Почему это важно. Именно ложные срабатывания и были исходной болезнью: у трёх адресов в базе накопилось по 2846 «сбоев» против 15 успехов. Механизм починен, но без метрики мы не узнаем, если он сломается снова.
Сделать
Считать событием «ложный вывод» случай, когда адрес выведен из работы для одной площадки, а другая площадка по тому же адресу ответила в ту же минуту. Данные для этого уже пишутся — событие fleet_route_down и результаты проверок живости.
Принять
Доля ложных выводов за сутки меньше 1% от числа проверок. Значение выведено в админку рядом со списком адресов.
Оценка
Полдня.

Отдельно от требований

Выкатка и проверка на бою

Сделанное лежит в рабочем дереве незакоммиченным: одиннадцать файлов кода и девять файлов проверок. Автоматическая сборка стоит из-за биллинга репозитория, поэтому выкатка ручная — порядок описан в заметке ci-billing-and-manual-deploy.

Что нельзя проверить локально. Счётчики одновременности работают на серверных скриптах Redis, а в тестовой заглушке их нет — запрос слота всегда «пропускает». Все написанные проверки подтверждают правильность подключения: какой ключ, какой счёт, какой предел. Что счёт действительно ограничивает, можно увидеть только на боевом Redis.
Проверить на боюКакПризнак нормы
Счётчик действительно ограничиваетКлючи proxy_slots:addr:* в Redis под нагрузкой кампанииНе больше трёх держателей на адрес
Ложных выводов адресов нетСобытия fleet_route_down за суткиМеньше 1% от проверок
Хвост запросов у корейской площадки ушёлПоле времени запроса в журнале, 90-й процентильНе больше полутора медиан
Лимиты сходятся с числом местСумма лимитов активных площадок против адресов × 3Сумма не превышает

Что изменится на бою сразу после выкатки. Пока работает одна площадка, она забирает всю ёмкость адресов — девять одновременных обработок на трёх машинах. Когда параллельно идут три, каждая получает по три. Раньше каждая независимо получала по девять, то есть двадцать семь на девять мест: превышение оплачивалось замедлением. Это не потеря пропускной способности, а приведение к измеренному пределу.

Чего не хватает

Три пробела в замерах

Каждый из них влияет на то, сколько именно адресов покупать. Пока они не закрыты, часть цифр в отчёте по сайзингу — оценка, а не измерение.

ПробелПочему осталсяКак закрытьНа что влияет
Немецкая площадка Не парсилась с 20.08, а журнал хранит семь дней Прогнать одну кампанию и снять время запроса Третий немецкий адрес: покупать или нет
Стоимость обращения к Avito 144 секунды на машину — это 25 машин в час с устройства Разобрать, из чего складывается цепочка через VPN Сколько устройств покупать — и покупать ли вообще
Реальный предел адреса Три места измерены косвенно, при смешанной нагрузке После выкатки — наблюдать, как система сама поднимает темп Множитель во всей формуле сайзинга

Порядок

Что за чем

  1. Шаг 1 Выкатить сделанное и понаблюдать сутки

    Одиннадцать файлов кода. Наблюдать по четырём признакам из таблицы выше. Точка отката — откат кода: переключателей нет, решение владельца от 27.08.

  2. Шаг 2 Закрыть Э4.5 и Э4.6

    Переезд при двух адресах и российские площадки через маршруты. Без них покупка немецкого и российского адресов не даст эффекта.

  3. Шаг 3 Купить два адреса: немецкий и российский

    Это не про скорость, а про отказоустойчивость: у немецкой площадки появляется куда переезжать, а фотографии, Telegram и российские площадки перестают зависеть от одного адреса сервера.

  4. Шаг 4 Э4.7 и Э4.8, затем расширить китайско-корейский пул с 3 до 6

    Сперва стартовые темпы и групповое добавление в админке — иначе новые адреса будут разгоняться часами и заводиться поштучно. Брать по два за раз, наблюдая за выводом адресов из работы.

  5. Шаг 5 Метрика ложных выводов и закрытие пробелов в замерах

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

  6. Потом Диета обработки — эпики Э0–Э3

    Отдельная программа: наблюдаемость, жизнь рабочих процессов, вынос сети из обработки, разгрузка диска. Она поднимает долю времени, когда адрес реально занят, с 0,22 почти до 0,9 — и тогда те же площадки потребуют вдвое больше адресов. Покупать под неё нужно в тот же заход, что и выкатывать её.

Не код

Одно действие на вашей стороне

Адрес 79.172.218.165 отключён с августа как неотвечающий. Он, вероятно, продолжает оплачиваться. Починить у провайдера или заменить — это четверть ёмкости трёх площадок, которая сейчас не работает и ничего не стоит вернуть. Пункт Э4.8 добавляет кнопку «включить обратно», но само решение — ваше.

Контекст

Предшествующие документы