feat(browser): per-provider page pacing + resource-block tuning — снизить proxy fan-out (#1812) #1813

Merged
lekss361 merged 1 commit from feat/browser-reduce-page-fanout into main 2026-06-19 18:30:13 +00:00
Owner

Closes #1812. Часть: per-provider прокси-изоляция уже применена в prod env (avito=auv, cian=ha, yandex=ti, generic=mproxy) — cross-provider контеншн устранён. Этот PR — within-provider residual.

Что

  • Per-provider inter-page pacing (_pace_provider): мин. интервал между page.goto одного провайдера (env BROWSER_MIN_PAGE_INTERVAL_S, default 2.0с) — даёт под-коннектам прокси дренироваться. Под per-provider lock, _last_goto_at[provider] timestamp, чистится в recycle.
  • Resource-block tuning: BROWSER_BLOCK_RESOURCE_TYPES (default font,media) через page.route abort. document/script/stylesheet/xhr/fetch/image — пропускаются (image глушит camoufox block_images на уровне launch). Legacy BROWSER_BLOCKED_RESOURCE_TYPES — fallback.

Тесты

48 passed (route abort font/media, continue document/script/css/xhr; pacing first-no-sleep/wait-remainder/disabled; env-parse).

На ревью / важно

  • ⚠️ Эффективность pacing требует prod-верификации: cian backfill с 5с task-delay ВСЁ РАВНО давал ~12% (single-page fan-out, не только back-to-back) — 2с browser-pacing может не добить полностью. После merge+deploy я re-run burst (3 cian) эмпирически — если останутся 500, тюним interval вверх / блокируем больше.
  • Воркер убрал bool-гейт BROWSER_BLOCK_RESOURCES (#1798) — теперь «выключить» = пустой BROWSER_BLOCK_RESOURCE_TYPES. Проверить, нет ли BROWSER_BLOCK_RESOURCES=... в prod .env.runtime (станет no-op).
  • Default сменил image,media,fontfont,media (image остаётся через camoufox block_images launch-arg). Подтвердить, что фото-блок не отвалился.
  • 3-й файл test_server_resource_block.py — приведён к новому контракту (иначе CI red).
Closes #1812. Часть: per-provider прокси-изоляция уже применена в prod env (avito=auv, cian=ha, yandex=ti, generic=mproxy) — cross-provider контеншн устранён. Этот PR — within-provider residual. ## Что - **Per-provider inter-page pacing** (`_pace_provider`): мин. интервал между `page.goto` одного провайдера (env `BROWSER_MIN_PAGE_INTERVAL_S`, default 2.0с) — даёт под-коннектам прокси дренироваться. Под per-provider lock, `_last_goto_at[provider]` timestamp, чистится в recycle. - **Resource-block tuning**: `BROWSER_BLOCK_RESOURCE_TYPES` (default `font,media`) через `page.route` abort. document/script/stylesheet/xhr/fetch/image — пропускаются (image глушит camoufox `block_images` на уровне launch). Legacy `BROWSER_BLOCKED_RESOURCE_TYPES` — fallback. ## Тесты 48 passed (route abort font/media, continue document/script/css/xhr; pacing first-no-sleep/wait-remainder/disabled; env-parse). ## На ревью / важно - ⚠️ **Эффективность pacing требует prod-верификации**: cian backfill с 5с task-delay ВСЁ РАВНО давал ~12% (single-page fan-out, не только back-to-back) — 2с browser-pacing может не добить полностью. **После merge+deploy я re-run burst (3 cian) эмпирически** — если останутся 500, тюним interval вверх / блокируем больше. - Воркер **убрал bool-гейт `BROWSER_BLOCK_RESOURCES`** (#1798) — теперь «выключить» = пустой `BROWSER_BLOCK_RESOURCE_TYPES`. Проверить, нет ли `BROWSER_BLOCK_RESOURCES=...` в prod `.env.runtime` (станет no-op). - Default сменил `image,media,font` → `font,media` (image остаётся через camoufox block_images launch-arg). Подтвердить, что фото-блок не отвалился. - 3-й файл `test_server_resource_block.py` — приведён к новому контракту (иначе CI red).
lekss361 added 1 commit 2026-06-19 18:29:30 +00:00
feat(browser): block font/media + per-provider page pacing — снизить proxy fan-out (#1812)
All checks were successful
CI / changes (pull_request) Successful in 6s
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
59b5d15752
lekss361 merged commit 2402287d64 into main 2026-06-19 18:30:13 +00:00
lekss361 deleted branch feat/browser-reduce-page-fanout 2026-06-19 18:30:13 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#1813
No description provided.