tradein/cian: добор карточек работает без единого отказа, но квота 100/сутки — остаток разгребается 190 дней #3284

Open
opened 2026-08-30 12:23:07 +00:00 by lekss361 · 0 comments
Owner

Разбор Циана после починки Домклика (#3251). Вывод неожиданный: у Циана ничего не сломано — у него не выдана мощность.

Замер

Три последних прогона cian_history_backfill подряд:

прогон дата обработано успешно длительность
5328 30.08 100 объявлений + 15 домов 100 / 15 54 мин
5240 29.08 100 + 15 99 / 15 119 мин
5154 28.08 100 + 15 100 / 15 42 мин

Отказов практически нет. Прогон останавливается не по бюджету, не по блокам и не по времени окна — он упирается ровно в batch_size: 100 и заканчивается.

Чего это стоит

источник объявлений с карточкой доля
avito 57 516 13 689 23.8%
cian 25 222 4 494 17.8%
yandex 21 653 10 729 49.5%
domklik 8 412 6 411 76.2%

Циан — второй по объёму источник и последний по полноте. Без истории цен остаётся 19 046 объявлений. При ста в сутки это 190 дней, причём остаток пополняется свежими: за двое суток Циан приносит ~4 900 объявлений, то есть очередь растёт быстрее, чем разбирается, примерно в двадцать раз.

Фактически история цен по Циану не собирается — она имитируется.

Почему так вышло

У Авито, Домклика и Яндекса есть выделенный *_detail_backfill в расписании. У Циана такого источника нет вообще. Карточки достаются побочным эффектом cian_history_backfill — задачи про историю цен, — и её выборка идёт не «у кого нет карточки», а «у кого нет строки в offer_price_history».

Отсюда же вторая аномалия: 1 697 объявлений имеют историю цен, но не имеют карточки. Раз выборка ключуется по истории, такие записи для неё уже обработаны и второй раз не придут никогда.

Что делать

  1. Поднять batch_size. Дешевле всего и сразу. Ограничение сверху — окно 02–05 и темп ~28 с на объявление (три четверти времени это сеть, задержка всего 5 с): за три часа реально ~350-400. Это сокращает 190 дней до ~50, но проблему не закрывает.
  2. Расширить окно и/или распараллелить. Прогон 5328 уложился в 54 минуты из трёх часов — две трети окна простаивают.
  3. Развести две задачи. История цен и полнота карточки — разные цели с разными выборками. Пока они склеены, 1 697 объявлений с историей без карточки недостижимы в принципе. Нужен отдельный cian_detail_backfill с выборкой по detail_enriched_at IS NULL, как у трёх остальных источников.

Пункт 3 — не расширение, а выравнивание Циана с уже существующим устройством остальных площадок.

Побочно найдено

Все четыре точки Циана ходят голым URL: detail.py:130, serp.py:234, serp.py:359, newbuilding.py:271 — везде fetch(url) без origin и без referer. Это ровно дефект №1 из #3251, и докстринг BrowserFetcher.fetch его прямо фиксирует: «таков путь всех providers кроме domclick detail». Правка дешёвая, но приоритет ей ниже: на текущем режиме Циан не блокируется (100 из 100), так что чинить стоит после того, как поднимется нагрузка — тогда и проверять будет на чём.

Связано

#3251 (методика), #3253 (данные о доме не доезжают до houses — у Домклика), #2995 (кросс-источниковый дедуп).

Разбор Циана после починки Домклика (#3251). Вывод неожиданный: **у Циана ничего не сломано — у него не выдана мощность.** ## Замер Три последних прогона `cian_history_backfill` подряд: | прогон | дата | обработано | успешно | длительность | |---|---|---|---|---| | 5328 | 30.08 | 100 объявлений + 15 домов | 100 / 15 | 54 мин | | 5240 | 29.08 | 100 + 15 | 99 / 15 | 119 мин | | 5154 | 28.08 | 100 + 15 | 100 / 15 | 42 мин | Отказов практически нет. Прогон останавливается **не по бюджету, не по блокам и не по времени окна** — он упирается ровно в `batch_size: 100` и заканчивается. ## Чего это стоит | источник | объявлений | с карточкой | доля | |---|---|---|---| | avito | 57 516 | 13 689 | 23.8% | | **cian** | **25 222** | **4 494** | **17.8%** | | yandex | 21 653 | 10 729 | 49.5% | | domklik | 8 412 | 6 411 | 76.2% | Циан — второй по объёму источник и последний по полноте. Без истории цен остаётся **19 046** объявлений. При ста в сутки это **190 дней**, причём остаток пополняется свежими: за двое суток Циан приносит ~4 900 объявлений, то есть очередь растёт быстрее, чем разбирается, примерно в двадцать раз. Фактически история цен по Циану не собирается — она имитируется. ## Почему так вышло У Авито, Домклика и Яндекса есть выделенный `*_detail_backfill` в расписании. **У Циана такого источника нет вообще.** Карточки достаются побочным эффектом `cian_history_backfill` — задачи про историю цен, — и её выборка идёт не «у кого нет карточки», а «у кого нет строки в `offer_price_history`». Отсюда же вторая аномалия: **1 697 объявлений имеют историю цен, но не имеют карточки.** Раз выборка ключуется по истории, такие записи для неё уже обработаны и второй раз не придут никогда. ## Что делать 1. **Поднять `batch_size`.** Дешевле всего и сразу. Ограничение сверху — окно 02–05 и темп ~28 с на объявление (три четверти времени это сеть, задержка всего 5 с): за три часа реально ~350-400. Это сокращает 190 дней до ~50, но проблему не закрывает. 2. **Расширить окно и/или распараллелить.** Прогон 5328 уложился в 54 минуты из трёх часов — две трети окна простаивают. 3. **Развести две задачи.** История цен и полнота карточки — разные цели с разными выборками. Пока они склеены, 1 697 объявлений с историей без карточки недостижимы в принципе. Нужен отдельный `cian_detail_backfill` с выборкой по `detail_enriched_at IS NULL`, как у трёх остальных источников. Пункт 3 — не расширение, а выравнивание Циана с уже существующим устройством остальных площадок. ## Побочно найдено Все четыре точки Циана ходят голым URL: `detail.py:130`, `serp.py:234`, `serp.py:359`, `newbuilding.py:271` — везде `fetch(url)` без `origin` и без `referer`. Это ровно дефект №1 из #3251, и докстринг `BrowserFetcher.fetch` его прямо фиксирует: «таков путь всех providers кроме domclick detail». Правка дешёвая, но приоритет ей ниже: на текущем режиме Циан не блокируется (100 из 100), так что чинить стоит после того, как поднимется нагрузка — тогда и проверять будет на чём. ## Связано #3251 (методика), #3253 (данные о доме не доезжают до houses — у Домклика), #2995 (кросс-источниковый дедуп).
Sign in to join this conversation.
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#3284
No description provided.