КОРУС Консалтинг
1 500 000
Транспортные услуги
Россия
Июнь 2022
Необходимо было провести рефакторинг существующего монолитного модуля портала, который отвечал за учёт и предоставление льгот сотрудникам.
Разделить монолит на микросервисы, чтобы повысить отказоустойчивость и возможность независимого развёртывания.
Настроить асинхронное взаимодействие между новыми сервисами.
Обеспечить корректное отображение статистики по заявкам в личном кабинете администратора в реальном времени, без зависаний и ошибок агрегации.
Оптимизировать расчёт остатков льгот, т.к. тяжёлые SQL-запросы работали долго и блокировали таблицы при большом количестве сотрудников.
Также, необходимо было повысить переиспользуемость кода - вынести общие модули в отдельные NuGet-пакеты.
Архитектурное решение: вместо одного монолита спроектировали 4 микросервиса. Каждый сервис получил свою БД и независимый конвейер развертывания.
Коммуникация: внедрили брокер сообщений Kafka.
Ускорение работы с данными: вынесли тяжёлые расчёты остатков льгот из кода .NET в хранимые функции PostgreSQL, добавили составные индексы по сотруднику, типу льготы и периоду. Переписали несколько LINQ-запросов.
Переиспользование: вынесли модуль авторизации в отдельный NuGet-пакет. Также упаковали общие модели льгот и интерфейсы репозиториев. Пакет опубликовали в корпоративном NuGet-фиде.
Фронтенд-доработки: модифицировали личный кабинет администратора - добавили интерактивные дашборды с агрегацией статистики. Данные подтягиваются через новый API.
Качество: написали модульные тесты на xUnit + Moq.
Монолитный модуль портала успешно разделён на 4 независимых микросервиса. Теперь каждый сервис можно масштабировать отдельно.
Время отклика интерфейса при подаче заявки сократилось с 3–5 секунд до менее 0,5 секунды, т.к. основной поток теперь не ждёт расчётов. Отказ одного сервиса не блокирует подачу заявок, они накапливаются в очереди и обрабатываются позже.
Запросы, ранее выполнявшиеся 6-8 секунд, теперь отрабатывают за 0,5-1 секунду благодаря хранимым функциям и индексам. Заявки перестали падать по таймауту.
Добавлены интерактивные дашборды с агрегацией статистики.
Модуль авторизации вынесен в отдельный NuGet-пакет.
Покрытие тестами 80-90% ключевой логики. Количество критических багов в продакшене после релиза снизилось примерно 70%, по сравнению с предыдущей версией монолита.