fix(tradein/avito): бэкфилл простаивал 23 часа из 24 — каденс был суточным #3054
No reviewers
Labels
No labels
Fable 5 ревью
GG-форсайт
admin
analytics
auth
automation
bug
business
chore
ci
compliance
data
data-moat
docs
duplicate
dx
enhancement
feedback/max
generative
needs-discussion
needs-human
observability
pause-bots
performance
priority/p0
priority/p1
priority/p2
priority/p3
scope/backend
scope/db
scope/devops
scope/frontend
scope/qa
scrapers
security
site-finder
stage/1
stage/2
status/blocked
status/done
status/needs-analysis
status/needs-fix
status/qa
status/ready
status/review
status/wip
tech-debt
tradein
ux
week ревью 1
wontfix
ИРД
вторичка
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: lekss361/gendesign#3054
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "fix/avito-backfill-cadence"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Продолжение #3049. Транспорт починен и обогащение работает — но очередь не разбирается.
Замер
За сутки после #3049: 238 обогащённых карточек при 9 951 активном объявлении Авито. При таком темпе очередь разбирается месяцами.
Прогоны:
Причина — планировщик, не скрапинг
compute_next_run_atимеет суточную гранулярность по построению:Меньше суток не выражается. У бэкфилла окно 0-23, поэтому выбирается случайная секунда следующих суток. Прогон при этом умирает по бану через 17-83 минуты — то есть задание работало около часа в сутки, а остальные 23 расписание ждало.
Механизм уже был написан
reschedule_after_minutesпоявился в #2162 дляproxy_healthcheck: ставитnext_run_at = now() + interval_minutesсразу после claim, не трогая sharedcompute_next_run_at. И сам себя тормозит — пока прогон идёт,has_running_runв_claim_runвернётNoneи расписание не сбросится.К бэкфиллу его просто не подключили. Правка — подключение, а не новый механизм.
Про значение 180 минут
Это осознанно консервативная отправная точка, а не найденный оптимум. Данных для подбора нет, и те два прогона, что есть, противоречат наивному ожиданию «пул восстановился за 70 минут, значит можно чаще»: 4586 стартовал через 4.3 часа, когда пул был давно чист (
consecutive_fails0 у всех четырёх), и умер впятеро быстрее предыдущего. Значит память Авито длиннее часов, и учащение способно ухудшить выход, а не улучшить.Отдельный риск, который надо держать в голове при подборе: те же 4 прокси обслуживают SERP-свипы — первичный сбор. Сжечь их на обогащении хуже, чем медленно обогащать. Двигать интервал вниз только по замеру нескольких суток, глядя и на свипы тоже.
Подбор идёт через
default_paramsрасписания — правка кода для этого не нужна.Проверка
Три теста закрепляют подключённость хука и коридор дефолта, но не конкретное значение: 180 будет двигаться, а вот утрата хука вернёт суточный простой молча.
Фальсификация выполнена: на неизменённом коде все три теста падают, с правкой проходят.
После мержа
Выставить
interval_minutesвdefault_paramsрасписания, если понадобится значение, отличное от дефолта, и смотреть несколько суток — выход бэкфилла и одновременно счётчики свипов.