Как это работает: Ozonru.kz (часть 2)
Сегодня я расскажу о том, как товары попадают в каталог, который мы прокачали в прошлой статье.
В настоящее время емкость базы товаров - около 400 000 позиций. Невозможно внести вручную и поддерживать в актуальном состоянии каталог с таким количеством товаров.
Будучи серьезным ресурсом, у которого есть мобильные приложения и партнерские магазины, OZON разработал свой REST API с основным функционалом получения каталога и товаров, фасетными фильтрами, процедурами аутентификации пользователей и управления заказами.
Мы проанализировали и отбросили возможность работы сайта регионального представительства по принципу тонкого клиента:
1. Мы боролись за быструю загрузку страниц. API - потенциально слабое место в высоконагруженном проекте.
2. Предполагалось наличие товаров, которых нет в основном каталоге OZON.
Для обеспечения актуальности торговых предложений мы разбили синхронизацию на два направления: импорт информации и отслеживание состояний при критически важных операциях.
Остановимся поподробнее на процессе импорта категорий и товаров.
Мы ввели два режима:
1. ручной (через администраторский раздел),
2. автоматический (задания CRON).
Ручной режим позволяет:
• получать список доступных веток каталога для импорта или обновления,
• получать список товаров со статусами наличия, цены, скидок в локальном каталоге товаров,
• управлять опциональными характеристиками для локального каталога.
Рис.1. Начальная страница управления товарами
Рис.2. Развернутый список доступных веток каталога
Рис.3. Выбор необходимых характеристик товаров для фасетного фильтра перед загрузкой товаров
Рис.4. Процесс импорта (с отладочной информацией)
Рис.5. Теперь наша ветка каталога загружена, кнопка «Загрузить» изменилась на «Обновить».
Автоматический режим обновления отличается от ручного тем, что запускается по расписанию, например, 1 раз в неделю. Делается обход всех загруженных веток и обновляется информация по товарам.
В рамках бета-версии сайта скорость обновления товаров не очень высокая - от 0,1 до 0,4 сек на товар, поэтому мы получаем данные в несколько потоков (multi_curl), что оставляет потенциальные возможности для сокращения сроков импорта за счет оптимизации серверной логики в будущем. Сейчас суммарное время обновления всего каталога составляет около 4-х часов.
Для исключения недоразумений с покупкой недоступных товаров, для операций, связанных с корзиной и оформлением заказов, мы ввели он-лайн проверку статусов для товаров Ozon с основного сайта.
Например, вы неделю назад положили товар в корзину. При возвращении на сайт вы увидите сообщение, если цена на товар изменилась или товар был снят с продажи.
Чтобы разгрузить сервер API, был внедрен механизм кеширования запросов к этому серверу.
Для уменьшения нагрузки на сервер API, совместно со специалистами компании OZON был разработан механизм кеширования запросов для редко обновляемых данных (например, фотографии к товарам).
По завершению работ и запуска beta-версии, мы получили готовое решение, которое можно масштабировать и тиражировать для региональных представительств OZON в других странах.
В третьей части статьи я постараюсь сделать расчет экономической выгодности разработки подобного проекта относительно выбранных технологий - как для разработчиков, так и для заказчиков.