Сайзинг egress · 02.09.2026
Замер с боевого сервера показал излом: один адрес держит три одновременных фетча, дальше латентность растёт. Отсюда считается всё остальное — и сегодняшний дефицит, и цена каждого следующего адреса.
Модель
Площадка ограничивает нас не числом адресов, а числом одновременных соединений с одного IP. Деталь занимает прокси не всю свою жизнь, а только на время фетча — остальное время слот пишет в Postgres, переводит и считает растаможку. Поэтому размер флота выводится из трёх измеримых чисел, а не из ощущений.
IPплощадки = ⌈ A × ( f / T ) / c ⌉ + 1 резервный
capacity_service: 12 / 8 / 24 / 4).Ключевое следствие: c = 3 — это предел самого адреса, а не пары «адрес × сайт». Один физический IP сегодня записан в таблицу тремя строками (dongchedi, che168, encar) с одними и теми же кредами, и лимитер proxy_slots:{proxy} считает слоты по URL целиком — то есть три площадки делят одни и те же три соединения. Складывать спрос надо по адресу, а не по площадке.
Замер · где излом
Медиана времени фетча в зависимости от того, сколько фетчей этой площадки уже в полёте. До 10 (≈3 на адрес) линия плоская: площадка нас не замечает. На 11–12 медиана прыгает на 45 % у обеих площадок разом — это упирается транспорт прокси, а не сайт. Che168 показан до 6: дальше выборка меньше 5 задач.
Излом совпадает с тем, что уже зашито в код эмпирически: PROXY_MAX_CONCURRENCY=3 с комментарием «прокси задыхался при ~4+». Замер это подтверждает и делает числом: потолок адреса — 3 одновременных фетча, дальше платим латентностью, а не получаем пропускную способность.
Замер · цена одной машины
| Площадка | Фетч p50 | Фетч p90 | Задача p50 | Доля прокси | Запросов/машину | Маршрут |
|---|---|---|---|---|---|---|
| DongCheDi | 2,49 с | 3,36 с | 11,4 с | 0,22 | 2 | 3 общих IP |
| Che168 | 3,64 с | 16,2 с | 5,8 с | 0,62 | 1 + 2 напрямую | 3 общих IP |
| Encar | 3,99 с | 11,4 с | 14,6 с | 0,27 | 2,3 | 3 общих IP + IP сервера |
| mobile.de | нет замера | — | — | ~0,4 | 1 + solve | 1 IP, sticky-пин |
| Drom | 1,61 с | 2,34 с | 10,4 с | 0,15 | 1 | IP сервера |
| Auto.ru | 1,94 с | 4,61 с | 8,8 с | 0,22 | 1 + bootstrap | IP сервера |
| Avito | 144,5 с | 159,2 с | 146,2 с | 0,99 | 3 hop | VPN-устройства |
Два вывода, которые меняют арифметику. Первый: фото прокси не тратят — все иностранные CDN открыты с прод-IP, и image_fetcher ходит direct-first; галерея из 30 кадров стоит ноль прокси-секунд. Второй: che168 держит прокси дольше всех относительно себя (0,62 против 0,22 у dongchedi) — задача короткая, а фетч длинный, поэтому на равном капе che168 съедает вдвое больше адресов, чем кажется.
Ответ
«Достаточно» = столько адресов, чтобы анти-бан-кап площадки можно было выбрать полностью, ни разу не поставив на адрес четвёртое соединение. Меньше — кап недостижим, и потолок задаёт не площадка, а наш egress. Больше — деньги, которые кап не даст потратить.
| Площадка | Кап A | Одновр. фетчей | Сейчас | Нужно | После диеты | Гео пула |
|---|---|---|---|---|---|---|
| DongCheDi | 12 | 2,6 | 3* | 1 | 4 | Китай (общий) |
| Che168 | 8 | 5,0 | 3* | 2 | 3 | Китай (общий) |
| Encar | 24 | 6,6 | 3* | 3 | 8 | Корея (общий) |
| mobile.de | 4 | 1,6 | 1 | 2 | 3 | Германия |
| Drom + Auto.ru | 4 + 4 | 1,5 | 0 | 1 | 2 | Россия |
| Физических адресов | — | 17,3 | 4 | 9 | 14 | +1 резерв уже внутри |
* Три китайско-корейских адреса — одни и те же физические IP: 79.172.218.214 / .230 / .247. Столбец «нужно» уже сложен по адресам, поэтому 1 + 2 + 3 = 6 азиатских, а не 6 на каждую площадку.
Что такое «после диеты». Деталь занимает слот 11,4 с у dongchedi и 14,6 с у encar, а с площадкой разговаривает 2,5 и 4,0 с. Остальное — наша собственная работа внутри слота: синхронная запись в Postgres на HDD (5,3 с у dongchedi, 6,3 с у encar, 7,7 с у drom — сегодня это самый крупный кусок), инлайновый подбор мощности, перевод, эмит. Программа «ёмкость без закупок» выносит это из слота — и тогда деталь почти всю свою жизнь висит на проводе: доля «занят прокси» уходит с 0,22 к ~0,9. Кап площадки при этом не меняется, но те же 12 одновременных деталей dongchedi дают уже не 2,6 одновременных фетча, а 10,4 — вчетверо больше адресов под ту же цифру в конфиге. Это и есть механизм «сколько ни оптимизируй — упрёмся в прокси»: оптимизация переводит нашу внутреннюю задержку во внешний спрос. В замере эффекта пока НЕ видно — save_db_ms за 28.08 не упал, а вырос, — поэтому колонка «после диеты» здесь проекция, а не факт.
Avito считается отдельно: там не прокси, а residential-устройства, и одна машина стоит 144 секунды монопольного устройства. Это 25 машин в час на устройство. На сегодняшних четырёх устройствах типовая сессия в 15 машин собирается 36 минут. Чтобы avito вела себя как остальные площадки (сессия ≤ 2 минут), нужно 8–12 устройств — либо сначала разобраться, почему hop стоит 144 с, потому что покупать устройства под такую цену запроса дорого.
Цена следующего адреса
| Площадка | Машин/час с одного IP | Живых сессий разом | Полное обновление склада |
|---|---|---|---|
| DongCheDi | 3 250 | 2,8 | 105 К за 32 ч |
| Che168 | 2 230 | 2,1 | 7,7 К за 3,5 ч |
| Encar | 2 030 | 1,2 | 15 К за 7,6 ч |
| mobile.de | 1 800 | 2,9 | 145 К за 80 ч |
| Avito (устройство) | 25 | 0,03 | неприменимо |
Расчёт: 3 соединения × 3600 с / фетч, с запасом 25 % на p90-хвост и кулдауны. «Живых сессий разом» — сколько одновременных поисков адрес доводит до полной выдачи за минуту при сегодняшнем размере сессии (26 машин у dongchedi, 39 у encar, 24 у che168, 15 у mobile.de).
Отсюда честный ответ на вопрос «упрёмся ли мы всё равно в прокси». При сегодняшнем трафике — нет: 60 поисков в сутки не выбирают и десятой доли одного адреса. Прокси станут потолком на двух режимах: ночные кампании-бэкфиллы (там спрос идёт тысячами машин в час) и рост живого поиска за ~300 сессий в час. Именно поэтому размер флота стоит привязать к капам, а не к текущему трафику: кап — это то, что мы включим в ту же ночь, когда понадобится.
До закупки
Цель пробы починили 27.08: она строит подписанный URL тем же билдером, что и боевой скрапер. Флапает всё равно. В базе у трёх адресов 2846 / 2848 / 2849 «сбоев» против 15–49 успехов, в логе — «1029 сетевых сбоев подряд → маршрут в кулдаун». Причина другая: che168 через эти датацентровые адреса отвечает 1,4–1,8 с, когда отвечает, и не укладывается в 8-секундный таймаут примерно в двух минутах из трёх — при том, что encar и dongchedi по тем же адресам в ту же секунду проходят за 0,5–1,2 с. Лечится порогом (таймаут che168 отдельно, кулдаун — после N подряд, а не первого), но по сути это диагноз маршрутам: che168 нужны не такие же адреса, а лучшие — китайские локальные или резидентные.
Детальный путь encar не берёт слот в proxy_limiter вообще: скрапер один раз получает self.proxy и работает. При риск-режиме это 24 детали на 3 адреса = 8 на адрес, вдвое-втрое выше измеренного излома, да ещё по два параллельных GET на машину (карточка + осмотр). Отсюда p90 фетча 11,4 с при медиане 4,0 с. Либо encar добавляется в DETAIL_PROXY_MATCHED_SITES, либо кап опускается до 9–12 — пока это не сделано, купленные адреса будут гаснуть в хвостах.
EGRESS_ROTATION_SITES=mobile_de обещает: сгорел egress — переезжаем на здоровый, паузу площадки ставим последним рубежом. Адрес ровно один (194.87.12.221, 0 успехов / 6 сбоев в базе), и он же прибит sticky-пином к кампании. Любой Akamai-блок = пауза всей площадки. Второй немецкий адрес — не про пропускную способность, а про то, чтобы механизм вообще существовал.
79.172.218.165:9070 лежит в таблице тремя строками с enabled=false ещё с августовского аудита (он висел в таймаут 12–20 с). Пул с тех пор так и живёт втроём. Либо адрес чинится у провайдера и возвращается, либо заменяется — это минус 25 % ёмкости трёх площадок одновременно, за которые, вероятно, платится абонентка.
У РФ-площадок прокси нет вовсе. Тем же адресом ходят фото всех площадок (direct-first), che168-спецификации и egress Telegram. Auto.ru уже показывает деградацию: 1,67 с при одной параллели против 3,5 с при семи. Один бан по этому IP — и гаснут не РФ-площадки, а весь direct-путь разом. Один российский адрес снимает связанность.
Порядок
Порог пробы che168 (свой таймаут, кулдаун после N подряд); .165 чинится или заменяется; encar заводится под лимитер (или кап опускается до 12). После этого замер повторяется — часть «дефицита» окажется учётной ошибкой, и покупать придётся меньше.
Два самых дешёвых адреса закрывают два SPOF, а не пропускную способность: mobile.de получает возможность ротации, direct-путь перестаёт быть единой точкой отказа для фото, Telegram и РФ-площадок. Делать до всякого роста трафика.
Ровно столько нужно, чтобы капы 12 / 8 / 24 выбирались целиком без четвёртого соединения на адресе. Брать по два за раз, наблюдая частоту срабатываний маршрутного предохранителя и медиану фетча — AIMD во флоте сам поднимет темп, если адреса живые.
Когда запись в Postgres и подбор мощности уедут из детального слота, доля «занят прокси» вырастет с 0,2–0,6 почти до единицы: та же пропускная способность потребует вдвое больше адресов. Это и есть точка, где прокси окончательно становятся единственным потолком — покупать надо в тот же заход, что и выкатывать оптимизацию.
144 секунды на машину делают устройства слишком дорогим способом купить пропускную способность. Сначала разбор, из чего складывается hop (листинг → деталь → каталог характеристик через VPN), потом уже количество.