Реестр живых ячеек задуман так: ячейка, к которой давно никто не обращался, со временем выпадает из реестра и перестаёт греться. На крупном каталоге реестр не уменьшался никогда. Через день, через неделю, через две — одно и то же число.

Это девятая часть цикла «Кэш фрагментов и Redis».

Замкнутый круг

Реестр хранит для каждой ячейки время последнего обращения. Посчитали, сколько ячеек трогали за последние сутки: 31 115 из 31 115. Все. Хотя живые посетители трогают десятки ячеек в час.

Причин оказалось две:

  • прогрев сам продлевал ячейке жизнь — отрендерил, отметил обращение. Ячейка жила, потому что её грели, а грели, потому что она жила;
  • обходчик страниц тоже ставил отметки, когда находил блок в разметке: за час 49, за 6 часов 30 241, а за сутки и за 14 суток одинаково — 31 574.

Впервые измеренный размер задачи

Когда отметки перестали врать, впервые стало видно, сколько на самом деле надо греть: ожидается 31 680 ячеек, холодных — 24 264. И 88 % холодных — один блок: 294 товара × 96 вариантов вкладок.

Лечение

  • продление жизни из прогрева убрать — функцию удалить целиком, а не выключить флагом;
  • отмечать обращение посетителя и на HIT, а не только на MISS и STALE;
  • при выборке брать свежее первым — сначала то, что недавно трогали;
  • порция сторожа — 1000 (восьмая часть).

Эффект таких правок виден не сразу, а через дни: старые отметки должны истечь.

Решение: не сокращать ячейки

Естественный следующий шаг — выкинуть 96 вариантов вкладок, ведь живые посетители трогают около 55 ячеек в час из 31 574. Мы так не сделали.

Всё, что видно в разметке, — греть.

решение заказчика

Аргумент простой: память дешевле объяснений. Каждая выкинутая ячейка — это MISS для того посетителя, который её всё-таки откроет, и разговор «почему у меня медленно». А лишние мегабайты в Redis (четырнадцатая и пятнадцатая части) ничего не стоят.

Сокращать варианты можно только после недельного замера реального спроса — и то, если память действительно кончается.

Не понимаете, сколько ячеек у вас реально в работе?

Пришлите адрес — измерю реестр так, чтобы он не врал.

· полезно?
АЧ
Алексей Чикун веб-разработчик, команда TRIOHEAD

Делаю сайты и сервисы целиком: от вёрстки до сервера. Пишу о том, что проверил на своих проектах.

Комментарии

// загружаю комментарии…

Комментарии публикуются после проверки. Ссылки и HTML не принимаются.