Как подготовить Битрикс к росту каталога
Каталог проектируют не под первые сто товаров, а под будущие объёмы, фильтры, остатки и обмены. Чек-лист архитектуры до массовой загрузки.
Каталог, который быстро работает на демонстрационных данных, может резко замедлиться после загрузки ассортимента. Причина не только в сервере: объём умножает ошибки модели данных, фильтра, изображений и обмена.
1. Разделите товар и торговое предложение
Товар хранит общую сущность, SKU — продаваемый вариант. Цвет и размер не должны без причины превращаться в дубли карточек, но и одно предложение со всеми комбинациями не решает задачу. Модель влияет на URL, остатки, цены, фильтр и обмен.
2. Проведите ревизию свойств
Удалите дубли, унифицируйте типы и единицы измерения, определите обязательность. Свойства для фильтра должны иметь контролируемые значения. Текстовые варианты «10 см», «10см» и «0,1 м» создают мусор и раздувают индекс.
3. Спроектируйте разделы и URL
Разделы нужны не для хранения каждого маркетингового среза. Отдельные посадочные создавайте под устойчивый спрос, а комбинации фильтра канонизируйте и индексируйте осознанно. Массовая генерация URL из каждого значения создаёт дубли.
4. Ограничьте данные в компонентах
Карточка списка не должна загружать все свойства и предложения. Выберите минимальный набор для цены, наличия, изображения и нескольких характеристик. Детальные данные получайте на соответствующей странице или по запросу.
5. Подготовьте импорт
Полная перезагрузка каталога в рабочее время плохо масштабируется. Используйте стабильные внешние ID, пакетную обработку, журнал ошибок и возобновление с позиции. Отдельно измерьте обновление цен, остатков, свойств и изображений.
6. Обработайте изображения заранее
Генерация десятков размеров на первом запросе создаёт всплеск нагрузки. Определите набор производных, формат, лимиты исходника и фоновую подготовку. Храните оригинал отдельно от публичных вариантов.
7. Измерьте фильтр, кеш и базу
Проверьте популярные комбинации, холодный и прогретый кеш, частоту инвалидации и slow query log. Кеш, который очищается после каждого обновления одного остатка, не даёт ожидаемой пользы.
8. Проведите нагрузочное испытание
Создайте обезличенную копию с объёмом, близким к прогнозу. Проверьте каталог, фильтр, поиск, карточку, корзину и импорт одновременно. Фиксируйте p95 времени ответа, ошибки, CPU, память, дисковые операции и базу.
Критерии готовности
- модель товара и SKU описана;
- справочники свойств нормализованы;
- URL и индексация фильтров управляются;
- импорт возобновляется после ошибки;
- изображения не создаются массово на пользовательском запросе;
- известен запас по инфраструктуре и время ключевых операций.
Масштабирование начинается с данных и сценариев. Более мощный сервер полезен только после того, как понятно, какую именно работу он должен выполнять.