Главная/Проекты/B2B-портал автозапчастей и система управления кроссами для крупного дистрибьютора
Микросервисы Высоконагруженные системы Нагрузочное тестированиеAutomotive

B2B-портал автозапчастей и система управления кроссами

Старый портал клиента падал при 30 запросах в секунду, а покупатели уходили к конкурентам, не дождавшись ответа. GROTEM с нуля построил два продукта — B2B-портал и систему управления собственной базой кроссов — и ещё до разработки доказал на нагрузочных тестах, что новая архитектура выдержит нагрузку.

  • 0,4 секунды на подбор товара — с аналогами, остатками, ценами и сроками доставки
  • 40 млн записей кроссов — в собственной системе управления базой аналогов
  • Готовность к выходу за рубеж — мультивалютность и мультиязычность заложены в архитектуру
фото
Клиент
ОтрасльДистрибуция автозапчастей
масштабФилиальная сеть по всей России, 1 млн+ позиций под заказ
географияРоссия и СНГ, в планах — новые зарубежные рынки
решениеРазработка с нуля: B2B-портал + система управления базой кроссов
02
Контекст

Клиент и исходная ситуация

Клиент — крупный российский B2B-дистрибьютор запчастей для азиатских, российских и европейских легковых автомобилей. Компания торгует двумя способами: со своих складов (более 30 000 наименований) и по схеме кросс-докинга — более 1 млн товаров поставщиков доступны под заказ на портале. Покупатели — магазины запчастей, СТО и оптовые компании; всё больше из них закупают не через интерфейс, а по API.

Главная особенность бизнеса — кроссы, связи между взаимозаменяемыми запчастями. Готовые каталоги аналогов часто ошибаются, и за неподошедшие детали претензии получает продавец. Поэтому компания ведёт собственную базу кроссов: её ежедневно проверяет и пополняет отдельный отдел.

Направления деятельности Оптовая дистрибуция автозапчастей со своих складов и по кросс-докингу
Клиенты Магазины запчастей, СТО, оптовики
Ассортимент 30 000+ наименований на складах, 1 млн+ под заказ
География Филиалы по всей России и в СНГ

Что происходило до начала проекта

  • Порталу было около 10 лет: монолит, в котором вся логика жила в хранимых процедурах базы данных. При пиковых 30 запросах в секунду база ложилась, а вместе с ней — весь портал.
  • Закупщики СТО и магазинов подбирают деталь, пока клиент стоит у прилавка. Медленная выдача и ошибки в аналогах уводили их к конкурентам.
  • В отраслевом рейтинге порталов по скорости ответа компания занимала около шестого места.
  • База кроссов велась в отдельной системе: данные долго загружались и часто с ошибками.
  • Компания готовилась к расширению за рубеж и в сегмент B2C, но старая платформа не масштабировалась.
03
Цели и задачи

Каких результатов хотел достичь клиент

Цель проекта

Заменить текущий B2B-портал и систему кроссирования современным высокопроизводительным решением, чтобы обойти конкурентов по скорости подбора товаров и подготовиться к выходу на международный рынок.

01

Ускорить подбор товаров

Отдавать результат запроса с аналогами, ценами и сроками доставки быстрее конкурентов — и в интерфейсе, и по API.

02

Выдерживать пиковую нагрузку и масштабироваться

Построить архитектуру, которая растёт вместе с числом клиентов, складов и регионов, при единой базе кроссов.

03

Упростить ведение базы кроссов

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

04

Автоматизировать работу с поставщиками

Загружать прайс-листы и рассчитывать цены на товары под заказ без ручной работы.

05

Подготовиться к новым рынкам

Заложить мультивалютность и мультиязычность для работы в других странах и с частными покупателями.

06

Вырастить свою команду на проекте

Подключить собственных разработчиков к разработке, чтобы после запуска компания сама развивала и поддерживала портал.

04
Решение

Что разработала команда GROTEM

Готовые платформы для Automotive закрывали бы только портал и не учли бы ценообразование компании, складывавшееся годами. Поэтому GROTEM разработал с нуля два независимых продукта на общей микросервисной платформе — B2B-портал для клиентов и административный портал для сотрудников, — а все права на код остались у клиента.

Изображение: B2B-портал — выдача товара с аналогами
B2B-портал

Подбор товара с аналогами, ценами и сроками доставки в одном запросе

По бренду и артикулу портал за один запрос находит все кроссы, проверяет остатки на собственных складах и в прайс-листах поставщиков, считает индивидуальную цену и срок доставки до торговой точки клиента:

  • фильтры и сортировка под настройки конкретного пользователя;
  • несколько сохранённых корзин и перенос товаров между ними;
  • генерация API-ключей для закупок из систем клиентов;
  • дополнительные пользователи и личный кабинет с настройками.
  • Проценка
  • Поиск аналогов
  • API для клиентов
Изображение: админка — загрузка кроссов
Система управления базой кроссов

Собственная база аналогов под контролем компании

Отдел кроссировщиков ведёт 40 млн записей кроссов по 20 млн товаров в одном интерфейсе: загружает и удаляет кроссы из Excel тысячами строк, видит ошибки по каждой строке и исправляет их до публикации:

  • 8 типов кроссов, у каждого свои правила проверки;
  • история загрузок с ответственными сотрудниками;
  • трансляция кроссов от материнского товара;
  • синхронизация с внешним каталогом Laximo;
  • 7 отчётов по кроссам.
  • База кроссов
  • Валидация данных
  • Административный портал
Изображение: мониторинг загрузки прайс-листов
Прайсинг поставщиков

Автоматическая загрузка 200+ прайс-листов

Прайсы около 100 поставщиков поступают по трём каналам — с почты, с собственного FTP и с FTP поставщика. Система сама разбирает файлы в среднем на 1 млн строк и применяет к ним наценки и скидки по бренду, городу, способу доставки и даже ключевым словам в названии товара:

  • более 30 индивидуальных настроек для каждого прайс-листа;
  • управление приоритетом загрузки;
  • мониторинг результатов с выгрузкой отчётов в Excel.
  • Прайс-листы
  • Кросс-докинг
  • Ценообразование
Изображение: схема интеграции с 1С
Интеграции

Связь с 1С и системами клиентов

Товары, склады, клиенты и поставщики асинхронно приходят из 1С — 19 файлов, некоторые на тысячи строк. Каждая строка проверяется, и при ошибке 1С получает ответ с конкретной причиной (система распознаёт более 200 видов ошибок). Для сайтов и систем клиентов открыт внешний API.

  • 1С
  • Apache NiFi
  • Внешний API
05
Сложность

Особенности проекта

Проект совмещал технические и организационные вызовы: производительность пришлось доказывать без исходных метрик, а продукт — строить вместе с разработчиками заказчика.

01
Проверка до старта разработки

Заказчик потребовал сначала доказать производительность на ядре расчётов — без интерфейса. С ноября 2022 по февраль 2023 года прошли четыре этапа нагрузочных тестов: собственные товары, товары поставщиков, запись в базу и полное ядро. После каждого этапа добавлялись новые условия.

02
Нет исходных метрик

Заказчик поставил цель в 100 мс на подбор товара, но данных о работе старого портала для сравнения не было. Критерии оценки команда выстраивала сама — по рейтингу конкурентов и анализу данных клиента.

03
Две системы ценообразования

Цена собственных товаров зависит от валюты и курса (ЦБ или внутреннего), НДС, договорных скидок, тендерных цен и правила, по которому филиалы не конкурируют друг с другом. Для товаров поставщиков действует отдельная логика. И всё это — для сотен аналогов на нескольких складах за доли секунды.

04
Смешанная команда

Часть разработчиков заказчик нанимал с рынка под этот проект, и опыта коммерческой разработки у них не было. При этом за сроки и качество всей команды отвечал GROTEM.

05
Требования менялись по ходу проекта

Уже в разработке выяснилось, что доработать 1С нельзя, а данные заказчика не всегда соответствуют его же описанию. Добавились требования безопасности — админка за VPN и отдельная авторизация, — а кроссы, которые планировали заполнять вручную, пришлось мигрировать.

06
Инженерная часть

Что было важно реализовать на уровне системы

Скорость портала обеспечила не новая СУБД, а архитектура, проверенная нагрузкой на реальных данных клиента. Ниже — решения, на которых держатся скорость, надёжность и развитие системы.

Микросервисы вместо смены базы данных Заказчик искал причину в СУБД, но узким местом были хранимые процедуры. GROTEM вынес логику в приложение и разделил систему на сервисы каталога, цен, партнёров и кроссов со своими базами. Теперь ресурсы добавляют только там, где растёт нагрузка.
Нагрузочные тесты на данных клиента Команда проанализировала дамп базы: 8 млн товаров, 20 млн связей, в среднем около 100 аналогов на товар, у редких — до 1 000. Скрипты Apache JMeter имитировали пользователей, запрашивающих случайные товары в тех же пропорциях. Финальный этап прошёл на мощностях, урезанных до текущих серверов заказчика.
Потоковая загрузка прайсов Файлы на несколько миллионов строк (до ~100 МБ, в архивах, CSV и Excel) обрабатываются пакетами при постоянном потреблении памяти, без временных файлов, с быстрой вставкой через COPY.
Транзакционность цен Благодаря версиям строк новый прайс становится активным мгновенно, а файл с ошибками не применяется вовсе; устаревшие данные удаляются в фоне.
Асинхронный обмен с 1С Файлы проходят через хранилище MinIO, очереди RabbitMQ и Apache NiFi, поэтому всплески выгрузок из 1С не блокируют портал.
Масштабирование по регионам Система разворачивается для новых стран при единой базе кроссов; B2B-портал и админка — отдельные приложения с разными контурами авторизации.
Автоматизация разработки Архитектурные тесты, генерация API-клиентов, единый скрипт проверки кода и запуск всего окружения в несколько кликов. Новые разработчики заказчика быстро включались в работу, а код оставался единообразным.
07
Результаты

Что получил бизнес

Новый портал отвечает за 0,4 секунды — вдвое быстрее среднего показателя в сегменте Automotive, а база кроссов и прайсы поставщиков больше не требуют ручной работы. В ноябре 2023 года GROTEM передал клиенту готовое решение и сопровождал его на гарантии.

0,4 секунды

на подбор товара с аналогами, остатками, ценами и сроками доставки

50 запросов/с

выдержало ядро расчётов на самых тяжёлых сценариях проценки ещё на этапе тестов

40 млн

записей кроссов в собственной системе с построчной проверкой и историей загрузок

200+

прайс-листов от ~100 поставщиков загружаются автоматически с почты и FTP

Процесс
До проекта
После запуска
Подбор товара
Портал падал при 30 запросах в секунду
0,4 секунды на запрос с аналогами, ценами и сроками
Масштабирование
Монолит: вся нагрузка на одну базу
Ресурсы добавляются отдельным сервисам
Ведение кроссов
Долгая загрузка данных, частые ошибки
Загрузка из Excel с проверкой каждой строки
Международные продажи
Платформа не масштабировалась под новые страны
Мультивалютность, мультиязычность, развёртывание по регионам
  • Загрузка каталогов на сервер занимает до 15 минут.
  • Клиент получил два продукта с полными правами на код — без лицензий и зависимости от чужой платформы.
  • Разработчики заказчика за год в общей команде с GROTEM заметно выросли профессионально и теперь сами поддерживают и развивают портал.
  • Архитектура уже готова к новым странам и продажам частным покупателям — без переделки ядра.
10
Стек

Технологии проекта

Архитектура

Микросервисы BFF Отдельные приложения B2B-портала и админки

Бэкенд

.NET Entity Framework Core MediatR MassTransit

Фронтенд

Angular

Базы данных и хранилища

PostgreSQL MinIO

Интеграции и очереди

RabbitMQ Apache NiFi

Инфраструктура

Docker Portainer Kubernetes

Мониторинг и логирование

Prometheus Grafana Loki Grafana Tempo

Тестирование

Apache JMeter xUnit NetArchTest

Документация API

Swagger
Обсудим ваш проект

Поможем выбрать оптимальное решение для вашего бизнеса

Разберём задачу, предложим архитектуру решения и оценим сроки реализации — на первой консультации, бесплатно.

  • Покажем релевантный опыт на похожих проектах
  • Сформируем решение с учётом ваших задач и IT-ландшафта
  • Предложим следующие шаги без обязательств

Оставьте заявку на консультацию

Заполните обязательные поля — остальное обсудим в разговоре. Перезвоним или напишем в течение одного рабочего дня

Бесплатно Ответ за 1 рабочий день Без обязательств

Спасибо! Данные отправлены.

Для подписки на рассылку подтвердите почту по ссылке в письме. Если письма нет, проверьте папки «Спам» и «Промоакции».