Два с половиной года был основным разработчиком платформы, через которую инженеры мобильного оператора следят за производительностью сети и управляют её конфигурацией.
Задача
У инженеров радиосети две больные темы. Первая — тяжёлые данные о производительности: KPI по оборудованию Ericsson и Nokia, сети UMTS и LTE. Вторая — конфигурация: ошибка в файле, который правили вручную, уходит прямо в живую сеть. Платформа закрывала обе в одном веб-приложении: аналитика KPI, алармы и отчёты плюс формы на основе схем, из которых генерируются уже проверенные файлы конфигурации.
Моя роль
Удалённый fullstack-разработчик, 2019–2021. Продукт с 2015 года писала небольшая команда; за время моей работы я был самым активным контрибьютором и вёл задачи от спецификации до деплоя в продакшн.
Что я сделал
- Оптимизация KPI-запросов. Профилировал и переписал самые тяжёлые аналитические запросы: починил сломанную view для отчётов, убрал лишний JOIN, подобрал индексы, перестроил генерацию запросов, чтобы избавиться от temp-table filesort. Худший запрос ускорился с ~800 секунд до ~25.
- Подсистема отчётов по расписанию. Сначала написал спецификацию, потом построил с нуля отдельный Node.js-сервис в Docker: расписания на cron, генерация XLSX-отчётов, отправка на почту. Подключил его к пяти модулям аналитики, и регулярные отчёты стали приходить инженерам сами.
- Формы конфигурации на основе схем (datafill). Модуль, где инженеры заполняют параметры сайтов сети (базовых станций), а система генерирует из этого файлы конфигурации. Добавил поддержку нескольких схем на подсеть и сделал интерфейс управления схемами с валидацией JSON, чтобы ошибку в описании формы было видно ещё до генерации файлов.
- Миграция фронтенда на Vue.js. Постепенно встраивал новые Vue-компоненты в легаси-фронтенд на Knockout/Durandal. Так приложение обновлялось без переписывания с нуля.
- Поддержка продакшна. Разобрался с инцидентом в пайплайне данных: после обновления зависимости молча сломался сборщик, который импортирует данные вендоров. Починил и восстановил пропущенные данные. Обновления на сервер оператора выкатывал в сессиях под наблюдением, с проверкой безопасности со стороны заказчика.
Результаты
Платформа была в продакшне у инженеров оператора всё время, пока я на ней работал. Тяжёлые отчёты перестали висеть минутами, регулярная отчётность ушла на автомат. Конфигурацию теперь собирают в формах с валидацией, а не в файлах вручную.
Стек
Node.js · Express · Vue.js · MongoDB · MySQL (MariaDB) · Docker · node-cron · автоматизация XLSX



