chore(tradein/scheduler): добор карточек Яндекса и Циана шёл раз в сутки и простаивал #3301

Merged
lekss361 merged 1 commit from chore/cadence-yandex-cian-detail into main 2026-08-31 11:36:25 +00:00
Owner

Что происходило

compute_next_run_at держит суточную гранулярность (interval_days, минимум 1). Подчасовой такт делается хуком reschedule_after_minutes как post_claim. У avito_detail_backfill он есть (180 мин), у yandex_detail_backfill и cian_detail_backfill — не было. Отсюда один прогон в сутки и простой всё остальное время.

Цена простоя, по замеру прода 31.08:

за прогон блоков за неделю очередь при нынешнем такте
yandex 375–450 карточек 0 11 110 ~25 суток
cian 0 20 501

Оба фетчера здоровы. Упирались не в площадку и не в прокси, а в расписание.

Такты разные, и это не произвол

такт почему
yandex 180 мин (8 прогонов/сутки) ходит через resolve_proxy_url — берёт URL узла, но не лизует его, чужие прогоны не блокирует
cian 360 мин (4 прогона/сутки) ходит через BrowserFetcher и держит lease весь прогон, то есть отнимает узел у Авито и Домклика

Пул дефицитен (#2638), поэтому Циану — осторожнее. Асимметрия зафиксирована комментарием у обоих хендлеров и в докстринге миграции: иначе следующий читатель выровняет интервалы и сожжёт пул. Тест test_cian_default_interval_is_360_minutes_not_180 ассертит именно неравенство, чтобы выравнивание без замера покраснело.

Миграция

283_scrape_schedules_cadence_yandex_cian_detail.sql — идемпотентный UPDATE ... SET default_params = default_params || jsonb, остальные ключи параметров не трогает, безопасен к повторному прогону.

Оговорка

180/360 — консервативная отправная точка по аналогии с Авито, а не найденный оптимум. Двигать вниз только по замеру нескольких суток, глядя и на свипы тоже — тот же довод, что уже записан в комментарии у avito_detail_backfill: «те же прокси обслуживают SERP-свипы, сжечь их на обогащении хуже, чем медленно обогащать».

Тесты — 5

Наличие post_claim у обоих хендлеров, дефолтные интервалы, переопределение через params. Прогон: 397 passed, 1 skipped (-k "avito or cadence or scheduler"), ruff чист.

## Что происходило `compute_next_run_at` держит **суточную** гранулярность (`interval_days`, минимум 1). Подчасовой такт делается хуком `reschedule_after_minutes` как `post_claim`. У `avito_detail_backfill` он есть (180 мин), у `yandex_detail_backfill` и `cian_detail_backfill` — не было. Отсюда один прогон в сутки и простой всё остальное время. Цена простоя, по замеру прода 31.08: | | за прогон | блоков за неделю | очередь | при нынешнем такте | |---|---|---|---|---| | yandex | 375–450 карточек | **0** | 11 110 | ~25 суток | | cian | — | **0** | 20 501 | — | Оба фетчера здоровы. Упирались не в площадку и не в прокси, а в расписание. ## Такты разные, и это не произвол | | такт | почему | |---|---|---| | yandex | **180 мин** (8 прогонов/сутки) | ходит через `resolve_proxy_url` — берёт URL узла, но **не лизует** его, чужие прогоны не блокирует | | cian | **360 мин** (4 прогона/сутки) | ходит через `BrowserFetcher` и **держит lease весь прогон**, то есть отнимает узел у Авито и Домклика | Пул дефицитен (#2638), поэтому Циану — осторожнее. Асимметрия зафиксирована комментарием у обоих хендлеров и в докстринге миграции: иначе следующий читатель выровняет интервалы и сожжёт пул. Тест `test_cian_default_interval_is_360_minutes_not_180` ассертит именно **неравенство**, чтобы выравнивание без замера покраснело. ## Миграция `283_scrape_schedules_cadence_yandex_cian_detail.sql` — идемпотентный `UPDATE ... SET default_params = default_params || jsonb`, остальные ключи параметров не трогает, безопасен к повторному прогону. ## Оговорка 180/360 — консервативная отправная точка по аналогии с Авито, а **не найденный оптимум**. Двигать вниз только по замеру нескольких суток, глядя и на свипы тоже — тот же довод, что уже записан в комментарии у `avito_detail_backfill`: «те же прокси обслуживают SERP-свипы, сжечь их на обогащении хуже, чем медленно обогащать». ## Тесты — 5 Наличие `post_claim` у обоих хендлеров, дефолтные интервалы, переопределение через `params`. Прогон: `397 passed, 1 skipped` (`-k "avito or cadence or scheduler"`), ruff чист.
lekss361 added 1 commit 2026-08-31 11:18:04 +00:00
chore(tradein/scheduler): добор карточек Яндекса и Циана шёл раз в сутки и простаивал
All checks were successful
CI Trade-In / changes (pull_request) Successful in 9s
CI / changes (pull_request) Successful in 12s
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / backend-tests (pull_request) Has been skipped
CI Trade-In / browser-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
CI Trade-In / backend-tests (pull_request) Successful in 4m58s
4ddb3c7196
compute_next_run_at держит суточную гранулярность (interval_days, минимум 1),
подчасовой такт делается хуком reschedule_after_minutes как post_claim. У
avito_detail_backfill он есть (180 мин), у yandex_detail_backfill и
cian_detail_backfill не было — отсюда один прогон в сутки.

Цена простоя по замеру прода 31.08:

  Яндекс: 375-450 карточек за прогон, блоков НОЛЬ за неделю, очередь 11110
          → 25 суток при нынешнем такте
  Циан:   блоков ноль, очередь 20501

Такты разные, и это не произвол:

  yandex — 180 мин (8 прогонов/сутки). Ходит через resolve_proxy_url: берёт
           URL узла, но НЕ лизует его, поэтому чужие прогоны не блокирует.
  cian   — 360 мин (4 прогона/сутки). Ходит через BrowserFetcher и ДЕРЖИТ
           lease весь прогон, то есть отнимает узел у Авито и Домклика. Пул
           дефицитен (#2638), поэтому осторожнее.

Асимметрия зафиксирована комментарием у обоих хендлеров и в докстринге
миграции — иначе следующий читатель выровняет интервалы и сожжёт пул. Тест
test_cian_default_interval_is_360_minutes_not_180 ассертит именно неравенство,
чтобы выравнивание без замера покраснело.

283_scrape_schedules_cadence_yandex_cian_detail.sql — идемпотентный
UPDATE ... SET default_params = default_params || jsonb, остальные ключи
параметров не трогает.

Значения 180/360 — консервативная отправная точка по аналогии с Авито, а не
найденный оптимум: двигать вниз только по замеру нескольких суток, глядя и на
свипы тоже (тот же довод, что в комментарии у avito_detail_backfill).

Тесты (5): наличие post_claim у обоих, дефолтные интервалы, переопределение
через params. Прогон: 397 passed, 1 skipped, ruff чист.
lekss361 merged commit ea8943e00e into main 2026-08-31 11:36:25 +00:00
lekss361 deleted branch chore/cadence-yandex-cian-detail 2026-08-31 11:36:25 +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#3301
No description provided.