ПРОЕКТИРОВАНИЕ ИНТЕГРАЦИОННОГО СЛОЯ ВЕБ-ПРИЛОЖЕНИЯ ДЛЯ АВТОМАТИЗИРОВАННОГО ПОДБОРА И ЦЕНООБРАЗОВАНИЯ ИМПОРТИРУЕМЫХ АВТОМОБИЛЕЙ
Журнал: Научный журнал «Студенческий форум» выпуск №27(378)
Рубрика: Технические науки

Научный журнал «Студенческий форум» выпуск №27(378)
ПРОЕКТИРОВАНИЕ ИНТЕГРАЦИОННОГО СЛОЯ ВЕБ-ПРИЛОЖЕНИЯ ДЛЯ АВТОМАТИЗИРОВАННОГО ПОДБОРА И ЦЕНООБРАЗОВАНИЯ ИМПОРТИРУЕМЫХ АВТОМОБИЛЕЙ
Аннотация. В статье рассматривается проектирование интеграционного слоя веб-приложения для импорта автомобилей с зарубежных аукционов. Обосновывается микросервисная архитектура и гибридная схема хранения данных, объединяющая реляционную и документоориентированную СУБД. Предлагается трёхуровневый шаблон «провайдер — сервис — репозиторий», обеспечивающий подключение новых поставщиков данных без переработки бизнес-логики. Описаны механизмы отказоустойчивости при взаимодействии с внешними сервисами и алгоритм автоматического расчёта итоговой стоимости автомобиля «под ключ». Приведены результаты тестирования и технико-экономического обоснования.
Abstract. The paper deals with the design of the integration layer of a web application for importing cars from foreign auctions. A microservice architecture and a hybrid data storage scheme combining relational and document-oriented databases are justified. A three-tier “provider — service — repository” pattern is proposed, allowing new data providers to be connected without reworking the business logic. Fault-tolerance mechanisms for interaction with external services and an algorithm for the automatic calculation of the final turnkey price of a car are described. The results of testing and a feasibility study are presented.
Ключевые слова: веб-приложение, интеграция сервисов, микросервисная архитектура, отказоустойчивость, гибридное хранилище данных, автоматизация ценообразования, японские аукционы.
Keywords: web application, service integration, microservice architecture, fault tolerance, hybrid data storage, pricing automation, Japanese auctions.
Введение
Импорт подержанных автомобилей с аукционов Японии, Республики Корея и Китая остаётся одним из крупнейших каналов поставки транспортных средств на российский рынок. Однако для конечного покупателя этот рынок непрозрачен: реальная итоговая стоимость лота складывается из ставки на торгах, аукционных сборов, морского фрахта, таможенных пошлин, логистики по России и вознаграждения посредника, а исходные данные о лотах разрознены и быстро устаревают. В компаниях-импортёрах значительная часть операций выполняется вручную — сотрудники самостоятельно ищут проданные лоты, рассчитывают финальную цену и готовят предложения, что замедляет обработку обращений и повышает риск ошибок.
Целью работы является проектирование и реализация интеграционного слоя веб-приложения, который автоматизирует получение аукционных данных, расчёт итоговой стоимости и передачу заявок в корпоративную CRM-систему. Ключевая задача — построить архитектуру, устойчивую к сбоям внешних сервисов и расширяемую на новые источники данных без переработки основной бизнес-логики.
Архитектура системы и обоснование выбора
Система построена по микросервисному принципу и разделена на три исполняемых компонента, объединённых обратным прокси Nginx как единым шлюзом. Клиентская часть реализована на Next.js и React с использованием TypeScript: серверный рендеринг сокращает время открытия страниц каталога, а компонентная модель упрощает поддержку интерфейса. Бизнес-логика (приём заявок, калькулятор стоимости, административные операции) вынесена в приложение на Django с Django REST Framework. Автономный микросервис на FastAPI отвечает за наполнение каталога и по расписанию забирает обновления аукционных лотов. Такое разделение позволяет нагрузке от просмотра каталога не пересекаться с бизнес-логикой и обеспечивает независимое масштабирование сервисов.
Хранение данных организовано по гибридной схеме. Структурированные бизнес-данные с жёсткими требованиями к целостности — настройки ценообразования, правила расчёта пошлин, курсы валют и заявки клиентов — размещены в реляционной СУБД PostgreSQL. Слабоструктурированный и объёмный массив сведений об аукционных лотах хранится в документоориентированной СУБД MongoDB. Redis используется для кэширования «горячих» данных и как брокер очередей фоновых задач Celery. Подобное распределение закрепляет за каждым хранилищем свой класс задач и повышает скорость обработки запросов.
Интеграционный слой
Веб-приложение взаимодействует с тремя разнородными внешними сервисами: платформой ProAuctions (структурированные данные о лотах зарубежных аукционов по модели подписки), публичным API Центрального банка Российской Федерации (валютные котировки для калькулятора) и корпоративной CRM-системой Битрикс24 (приём заявок в виде лидов). Интеграции распределены между сервисами по предметному признаку: FastAPI работает с ProAuctions, а Django обращается к API ЦБ РФ и Битрикс24, что исключает дублирование интеграционного кода.
В основу каждой интеграции положен трёхуровневый шаблон, соответствующий принципам чистой архитектуры. Провайдер представляет собой низкоуровневый HTTP-клиент и скрывает детали конкретного внешнего API. Сервис реализует бизнес-логику обработки данных — дедупликацию, обогащение метаданными, валидацию и маппинг полей. Репозиторий отвечает за сохранение данных в СУБД. Такое разделение упрощает автоматическое тестирование за счёт подмены провайдера заглушкой и позволяет заменить поставщика данных или CRM без изменения основной логики.
Расширяемость обеспечена абстрактным базовым классом ABCLotsProvider, который описывает контракт получения лотов; от него наследуется конкретная реализация ProAuctionsLotsProvider. Заложенная архитектура провайдеров и поддержка мультивалютных расчётов (JPY, CNY, KRW) позволяют в дальнейшем подключить корейские, китайские или иные аукционные площадки без переработки сервисного слоя. Получение данных выполняется по расписанию планировщиком APScheduler: фоновая задача постранично опрашивает REST API поставщика, приводит ответы к внутренней модели, устраняет дубликаты по идентификатору лота и сохраняет документы в MongoDB.
Отказоустойчивость и автоматизация расчётов
Устойчивость к сбоям внешних сервисов реализована на нескольких уровнях. Курсы валют синхронизируются с API ЦБ РФ один раз в сутки и сохраняются одновременно в PostgreSQL и в кэше Redis; при недоступности источника калькулятор использует последнее сохранённое значение с отметкой даты, что гарантирует его работоспособность даже при длительных перебоях. Передача заявок в Битрикс24 вынесена в асинхронную задачу Celery: заявка мгновенно фиксируется в локальной базе, а её отправка выполняется в фоне с повторными попытками по экспоненциально возрастающему интервалу (до пяти попыток). Идемпотентность обеспечивается уникальным идентификатором заявки — повторная отправка одной записи не создаёт дубликат лида в CRM.
Автоматический расчёт итоговой стоимости «под ключ» суммирует цену лота, комиссию аукциона, логистику, таможенную пошлину, утилизационный сбор и наценку компании. Ставки пошлины и утилизационного сбора подбираются по характеристикам автомобиля (объём двигателя, возраст) из таблиц правил в базе данных, а суммы в иностранной валюте пересчитываются по актуальным курсам ЦБ РФ с учётом настраиваемых администратором коэффициентов наценки. Покупатель видит итоговую цену в рублях и иенах непосредственно в карточке лота, что делает ценообразование прозрачным и снимает нагрузку с менеджеров.
Результаты
Тестирование проводилось на стенде, повторяющем рабочую конфигурацию системы: Docker, Nginx, все микросервисы и тысячи реальных аукционных лотов. Разработаны модульные и интеграционные тесты; благодаря слоистой архитектуре сервисный слой проверялся изолированно — внешние API подменялись заглушками. Дополнительно выполнены нагрузочное тестирование и прогон типовых пользовательских сценариев. Достигнутый уровень покрытия кода тестами составил 83,42 % при целевом значении свыше 70 %. Значения остальных ключевых метрик приведены в таблице 1 и удовлетворяют заданным целевым порогам.
Таблица 1.
Результаты оценки ключевых метрик
|
Показатель |
Целевое значение |
Факт |
|---|---|---|
|
Покрытие кода тестами |
> 70 % |
83,42 % |
|
Время ответа API каталога |
< 500 мс |
120–280 мс |
|
Отрисовка первого контента (FCP) |
< 1800 мс |
1000 мс |
|
Время блокировки интерфейса (TBT) |
< 200 мс |
140 мс |
Технико-экономическое обоснование показало практическую эффективность внедрения. Совокупные инвестиционные затраты составили около 696 тыс. рублей. За счёт автоматизации подбора и расчёта время подготовки одного коммерческого предложения сократилось с 1,2 до 0,2 часа; с учётом исключения ручной актуализации каталога и переноса заявок в CRM суммарная экономия рабочего времени составила около 178 часов в месяц, или порядка 54 тыс. рублей. При таких показателях срок окупаемости проекта составляет приблизительно 12,9 месяца.
Заключение
Предложенная архитектура интеграционного слоя решает основную проблему предметной области — непрозрачность и трудоёмкость подбора импортируемых автомобилей. Сочетание микросервисного разделения, гибридного хранилища данных и трёхуровневого шаблона «провайдер — сервис — репозиторий» обеспечивает расширяемость системы и устойчивость к сбоям внешних сервисов, а автоматический расчёт стоимости «под ключ» делает ценообразование прозрачным для покупателя. Результаты тестирования и технико-экономического обоснования подтверждают работоспособность и целесообразность решения. Направлениями дальнейшего развития являются подключение корейских и китайских аукционных площадок через реализованный контракт провайдеров, а также добавление модуля аналитики динамики цен по проданным лотам.

