Главная/Проекты/Модернизация SFA-платформы
Модернизация legacy .NET 10 Мониторинг Высоконагруженные системы

Модернизация SFA-платформы «Пивоварен Бочкарёв» без остановки продаж

Перевели систему, с которой каждый день работают полевая команда и дистрибьюторы, со снятого с поддержки стека на .NET 10 и Linux. Платформа выдерживает пиковую нагрузку и снова готова к развитию.

  • Меньше 5 минут — синхронизация на территории с 700+ торговыми точками
  • 41 → 1 — репозиторий после перехода на монорепозиторий
  • 788 → 153 — проекта в кодовой базе
  • 7 → 1 — версия runtime: все сервисы на .NET 10
Заглавное фото
Клиент
ОтрасльFMCG, пивоваренная промышленность
МасштабОколо 2000 пользователей мобильного приложения и сеть дистрибьюторов
географияРоссия
ФорматМодернизация legacy-платформы + мониторинг
01
Контекст

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

«Пивоварни Бочкарёв» (ранее — Heineken в России и «Объединённые пивоварни») — третий по объёму производитель пива в стране: 8 пивоваренных заводов и более 20 брендов. Продажи компании держатся на цифровой платформе, которую GROTEM развивает с 2012 года: мобильное SFA-приложение, веб-панель для супервайзеров, портал дистрибьюторов, системы управления оборудованием и контрактами.

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

ОтрасльFMCG, пивоваренная промышленность
Масштаб бизнесаОколо 2000 пользователей мобильного приложения, ежедневный обмен данными с дистрибьюторами
ГеографияРоссия
Особенности работыВысокие требования к доступности: если утренняя синхронизация не проходит, торговая команда не может начать день

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

  • Сервисы работали на версиях .NET, снятых с поддержки, и только под Windows — это лицензии и санкционные риски.
  • Кодовая база разрослась до 41 репозитория, 93 решений и около 1,8 млн строк кода с учётом дублей.
  • Когда торговые представители одновременно синхронизировались, система работала нестабильно.
  • Единого мониторинга не было — об инцидентах узнавали от пользователей.
  • Копились известные проблемы — их было более 145, и на исправление не хватало бюджета поддержки.
02
Цели и задачи

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

Цель проекта

Перевести платформу на современный поддерживаемый стек и сделать её надёжной основой для новых бизнес-функций — без остановки ежедневной работы полевой команды и дистрибьюторов.

01

Выдерживать пиковую нагрузку

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

02

Снизить стоимость развития

Дорабатывать систему без обходных решений и постоянного переписывания legacy-кода.

03

Узнавать о сбоях раньше пользователей

Единый мониторинг и алерты по всем сервисам.

04

Закрыть риски безопасности

Актуальный стек с регулярными патчами и уход от зависимости от Windows.

03
Решение

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

GROTEM провела глубокий рефакторинг платформы: объединила разрозненный код в монорепозиторий, перевела сервисы на .NET 10 и Linux, внедрила единую авторизацию и мониторинг. Ключевой блок работ команда выполнила за три месяца, чтобы как можно раньше перейти к бизнес-задачам.

Архитектура и код

Один монорепозиторий вместо 41

Разрозненные репозитории объединили в монорепозиторий с модульной сервисной архитектурой и убрали дублирующийся код:

  • проектов стало 153 вместо 788;
  • объём кода без дублей сократился с 430 до 322 тысяч строк;
  • версия .NET для всех сервисов меняется в одном месте.
  • Монорепозиторий
  • .NET 10
  • Рефакторинг
Инфраструктура

С Windows — на Linux и контейнеры

Сервисы перевели в Docker-контейнеры на Linux. Единый CI/CD сам определяет, какие сервисы пересобрать при изменении общих библиотек, а тестовая, демо- и продуктивная среды разделены физически и логически.

  • Docker
  • Linux
  • CI/CD
Надёжность процессов

Тяжёлые операции перезапускаются после сбоя

Самописный движок фоновых процессов под Windows заменили на Temporal. Распределённые операции выполняются как саги с компенсацией: если шаг не прошёл, процесс корректно откатывается или перезапускается.

  • Temporal
  • Отказоустойчивость
Наблюдаемость

Единый контур мониторинга

Метрики, логи и трейсы сервисов и мобильного приложения собираются в Grafana. Алерты приходят команде, и о масштабных проблемах она узнаёт раньше, чем пользователи.

  • Grafana
  • Prometheus
  • OpenTelemetry
04
Сложность

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

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

01
Годы накопленного legacy

Около 1,8 млн строк кода с учётом дублей, неочевидные связи между сервисами и настройки, которые не менялись годами.

02
Совместимость со старым мобильным приложением

Новая авторизация не должна была отключить сотрудников, которые ещё работали в старой версии приложения.

03
Интеграции с дистрибьюторами

Обмен данными с учётными системами дистрибьюторов должен был продолжаться без перерыва.

04
Сжатые сроки

Бизнесу нужны были новые функции, а не «невидимый» рефакторинг. Поэтому ключевой блок работ уложили в три месяца.

05
Реальные данные и нагрузка

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

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

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

Главный принцип — модернизировать платформу так, чтобы пользователи и партнёры клиента не почувствовали переход.

Монорепозиторий и общий CI/CD Пайплайн сам определяет, какие сервисы нужно пересобрать при изменении общих библиотек.
Версия .NET в одном месте Целевой фреймворк задан централизованно: обновление всех сервисов — одна строка.
Единый Identity Авторизация на OpenIddict (OAuth2/OIDC) — тот же контур GROTEM использует как стандарт в своих проектах.
Nginx как умный маршрутизатор Запросы старых версий мобильного приложения распознаются и получают совместимый токен — переход на новую авторизацию прошёл для них незаметно.
Саги на Temporal Распределённые транзакции с компенсациями вместо самописного движка под Windows.
Изолированные среды Test, Demo и Prod разделены физически и логически.
06
Результаты

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

Платформа переведена на актуальный стек и снова развивается: на ней уже выходят новые бизнес-функции. Синхронизация мобильного приложения занимает меньше 5 минут даже на территориях с 700+ торговыми точками.

<5 мин

синхронизация на территории с 700+ торговыми точками

41→1

репозиторий вместо разрозненной кодовой базы

788→153

проекта после очистки и объединения кода

7→1

версия runtime — все сервисы на .NET 10

Параметр
До проекта
После запуска
Репозитории
41
1 монорепозиторий
Версии runtime
7
1 — .NET 10
Объём кода без дублей
430 тыс. строк
322 тыс. строк
Серверы
Windows
Linux, Docker-контейнеры
Мониторинг
Об инцидентах сообщали пользователи
Алерты по всем сервисам
Фоновые процессы
Самописный движок
Temporal с перезапуском после сбоя
  • Безопасность — платформа снова получает патчи безопасности, зависимость от Windows-лицензий снята.
  • Новые функции быстрее — на обновлённой платформе уже вышли автоматическое обновление адресной программы анкет и прозрачное товародвижение у дистрибьютора.
  • Предыстория — модернизация стала следующим шагом после запуска мобильного приложения SalesPro.
  • Опыт для рынка — подход к переводу крупной legacy-системы на новый стек без остановки бизнеса GROTEM применяет и в других проектах.
07
Стек

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

Backend

.NET 10 C# BFF

Архитектура

Монорепозиторий Модульные сервисы

Оркестрация и обмен

Temporal RabbitMQ

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

Linux Docker Nginx GitLab CI

Авторизация

OpenIddict (OAuth2 / OIDC)

Наблюдаемость

Prometheus Grafana Loki Tempo OpenTelemetry

Данные

MS SQL PostgreSQL Redis
Обсудим ваш проект

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

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

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

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

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

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

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

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