tazzz.ru · дополнение к «Ярусному фотохранилищу» · 31 августа 2026

Шакальный ярус: замеры

Проверка идеи: хранить все фото всех машин в предельно ужатом качестве (мгновенный показ полной галереи), обложки — в нормальном, а при открытии карточки догружать нормальное качество за секунды. Ниже — живое сравнение качества на реальном кадре, вес каждого уровня на весь корпус и замеренная скорость догрузки.

Вердикт: идея рабочая, и в текущий диск влезает — с двумя уточнениями.
01

Как выглядит шакал — смотрите сами

Реальный кадр dongchedi (оригинал 2048px), показанный на ширину модалки. Переключайте уровни — подпись показывает вес кадра и цену уровня на весь корпус:

Кадр объявления dongchedi в выбранном качестве
этот кадр: в среднем по площадкам: все 4 площадки: гео-критичные: растяжение:

Экземпляр кадра легче среднего по dongchedi (сцена простая) — веса «в среднем» в подписи считаются по выборке n=6 на площадку. На узком экране растяжение меньше и шакал выглядит лучше, чем на десктопе.

02

Лестница качества и цена уровня

Уровеньdongchedimobile_deencarche168 Все 4 (5,43 млн фото)Гео-критичные (2,61 млн)
480 / q72 = нынешний thumb19,7 КБ16,6 КБ9,1 КБ20,6 КБ87,7 ГБ44,0 ГБ
400 / q5511,6 КБ10,5 КБ5,9 КБ12,4 КБ53,7 ГБ26,2 ГБ
320 / q456,9 КБ6,7 КБ3,9 КБ7,5 КБ33,3 ГБ15,7 ГБ
256 / q384,2 КБ4,2 КБ2,5 КБ4,7 КБ20,9 ГБ9,7 ГБ
200 / q322,6 КБ2,6 КБ1,7 КБ2,9 КБ13,0 ГБ6,1 ГБ
160 / q281,7 КБ1,8 КБ1,2 КБ1,9 КБ8,7 ГБ4,1 ГБ

Средний вес одного фото WebP при данной длинной стороне и quality (замер живьём, n=6/площадку). Дедуп по content-hash (уже в хранилище) итог только уменьшит — повторные кадры перепарсов и перепубликаций хранятся один раз.

Что влезает в диск сегодня

Свободно 32 ГБ; минимум 10 ГБ оставляем нетронутыми (переполнение диска = отказ записи Postgres), рабочий бюджет — ≈22 ГБ. Сумма = шакал + обложки сетки (×1 в 480/q72 = 5,2 ГБ или ×3 = 15,5 ГБ) + рабочее множество догретых галерей (0,3 ГБ):

КомбинацияИтогоВ бюджет 22 ГБКомментарий
Гео-шакал 320/q45 + обложки ×121,2 ГБвлезаетрекомендуемый старт: 0 ₽/мес
Гео-шакал 256/q38 + обложки ×115,2 ГБвлезаетзапас больше, мыло заметнее
Гео-шакал 200/q32 + обложки ×321,9 ГБвпритыкесли обложек хочется три
Все площадки 320/q45 + обложки ×138,8 ГБнетнужно ~+30 ГБ диска
Все площадки 320/q45 + обложки ×349,1 ГБнетполный вариант: ~+40–50 ГБ диска
Все площадки 480/q72 (шакал = thumb)≈93–104 ГБнетэто уже «все превью», обложки не нужны

Докупка NVMe у Timeweb по конфигуратору ≈ 16,5 ₽/ГБ/мес → +50 ГБ ≈ 830 ₽/мес, +100 ГБ ≈ 1 650 ₽/мес (проверить в панели — отдельный сетевой диск может быть дешевле). Поэтому старт «в текущий диск» — самый выгодный.

03

Догрузка нормального качества: замер

Полный цикл на открытии карточки: скачать все кадры с CDN источника (параллельно, с настроенными потолками) + перекодировать в full-1600 и превью. Одна живая галерея на площадку, 31.08.2026:

ПлощадкаКадровУспехПараллельностьСтена (fetch + encode)Скачано
encar2020/20500,68 с0,4 МБ
che1682020/20301,68 с0,9 МБ
mobile_de2020/20504,02 с1,4 МБ
dongchedi1717/173014,07 с *3,8 МБ

* Из 14 с — 10 с съел таймаут одного кадра с последующим добором через прокси; без него галерея собирается за ~4 с. Это и есть довод за покадровую подмену: шакал уже на экране, каждый готовый кадр заменяется на чёткий независимо, хвостовой кадр никого не держит. Ожидание «2–4 с до нормального качества» подтверждается для большинства кадров всех площадок; полная галерея dongchedi в худшем случае доезжает за ~15 с.

UX-схема подтверждена замером. Открытие модалки: мгновенно вся галерея в шакале (с нашего диска, ~7 КБ/кадр — быстрее любого хотлинка) → фоновый прогрев в порядке показа → чёткие кадры проявляются в течение 1–4 с, начиная с первого. Слепых квадратов нет ни в один момент.
04

Цена наполнения (бэкфилл)

Чтобы построить шакал, оригинал каждого фото надо скачать один раз (заодно в тот же проход бесплатно строятся обложки — трафик общий). Важно: 885 ГБ ниже — транзит, а не хранение. Оригинал живёт только в оперативке между скачиванием и перекодированием и на диск не пишется вовсе: сохраняются только обложка (480px, ~20 КБ) и шакалы (~7 КБ) — итого ~140 КБ на машину вместо ~6 МБ оригиналов. Скорости прямого канала с прод-IP дают:

  • dongchedi — 2,07 млн фото при 13 фото/с ≈ 44 ч чистыми (узкое место всего бэкфилла);
  • mobile_de — 2,82 млн при 72/с ≈ 11 ч; encar — 2,8 ч; che168 — 2,1 ч (идут параллельно dongchedi);
  • суммарно скачивается ≈ 885 ГБ входящего трафика (у Timeweb бесплатен), с дросселированием — 3–4 суток фоном;
  • CPU на перекодирование мелкого шакала — фон на 4 ядрах, вписывается (замер: ~10+ кадров/с на full-варианты, шакал легче);
  • порядок: dongchedi → che168 → encar (гео-критичные), mobile_de — последним или после докупки диска.

Против схемы «только обложки» из основного отчёта эта добавляет ~16 ГБ хранения и ~2 суток бэкфилла, а взамен даёт мгновенную полную галерею всегда — и заодно страховку для «Из БД»: у мёртвых объявлений (источник удалил фото) галерея сохраняется хотя бы в шакале, а не только 1–3 обложки.

05

Доступность фото и вымирание ссылок (замер 31.08)

По каждой площадке скачаны пачки фото свежих и старых объявлений с прод-IP (боевые заголовки, параллельность 12; для упавших дополнительно проверен боевой каскад с прокси-пулом):

ПлощадкаСвежие (авг.)Старые (июнь)МедианаПричина смертей
dongchedi24/24 · 100%3/24 · 12%0,52 с403 на подписанных ссылках — мертвы с любого IP, прокси не спасает (0/6)
mobile_de24/24 · 100%8/24 · 33%0,28 с404/410 — объявления проданы/сняты, не восстановимо (0/6)
che16824/24 · 100%24/24 · 100%0,86 свымирания не видно
encar24/24 · 100%24/24 · 100%0,16 свымирания не видно
drom / autoru / avito70/70 · 100%72/72 · 100%0,04–0,07 скэш им и не нужен — браузер РФ грузит сам

Кривая вымирания по возрасту объявления

Возрастdongchedi живоmobile_de живо
1–2 недели100%100%
3–5 недель41%— (нет машин в окне)
6–8 недель33%82%
2–2,7 месяца8%50%
Следствие: бэкфилл — это спасательная операция, и она срочная. 82% машин dongchedi и 99,8% mobile_de спарсены в июне — в зоне, где живо 8–12% и ~40–50% фото соответственно. Оценка спасаемого сейчас: dongchedi ~15% фото (~320 тыс.), mobile_de ~40–50% (~1,2–1,4 млн), che168 и encar — почти всё. Итого ~2,1–2,2 млн из 5,43 млн (~40%), и каждая неделя промедления съедает ещё часть июльской когорты dongchedi. Порядок бэкфилла: dongchedi (сначала август и июль) → mobile_de → encar/che168 (последние два стабильны, им спешка не нужна). Хранение спасённого — соответственно меньше расчётного: гео-шакал ужимается с 15,7 до ~5 ГБ, mobile_de — с 18,9 до ~9 ГБ. Флаг шакала-на-парсинге надо включать не дожидаясь бэкфилла — каждое новое объявление с этого момента перестаёт терять фото.
06

Что это меняет в плане включения