ООО "НТР"
6 500 000
Информационные технологии и интернет
Россия, Москва
Июнь 2025
НТР.рф — национальная цифровая платформа, объединяющая поставщиков и операторов. Одним из направлений её работы является создание сервисов для мониторинга и управления телекоммуникационным оборудованием.
В составе платформы заказчика требовалось доработать и перевести на новую архитектуру модуль телеметрии CU/DU базовых станций (CU — Central Unit, DU — Distributed Unit).
Проблематика исходной версии:
- архитектура не масштабировалась под растущий поток диагностических событий;
- интерфейсы обмена данными были разнородны, поддержка — трудозатратна;
- наблюдались задержки обработки и неустойчивость при пиковых нагрузках;
- отсутствовали удобные точки расширения для дальнейшего развития.
Цель: сохранить текущий функционал, повысить производительность и отказоустойчивость, унифицировать интеграции и подготовить основу для дальнейших доработок — без остановки сервиса.
Команда со стороны подрядчика: 2 C/C++ разработчика, системный аналитик, Project Manager (полное ведение проекта со стороны подрядчика).
Архитектурные принципы:
- Сервисный подход: разделение приема телеметрии, нормализации, агрегации и отдачи данных на четкие сервисы.
- Единые интерфейсы через gRPC для внутренних взаимодействий (низкая задержка, строгие контракты, стриминг).
- Надежный транспорт приема: SCTP для устойчивого потокового обмена с сетевыми элементами (мультипоточность, восстановление сессий).
- Высокопроизводительное хранилище: ClickHouse для временных рядов и аналитических запросов (партиционирование по времени, первичные ключи по timestamp, node_id).
- Асинхронность и неблокирующий I/O: Boost.Asio и примитивы Folly (экзекьюторы, lock-free очереди) для конвейерной обработки.
- Идемпотентность и дедупликация: контроль уникальности событий на уровне нормализатора (хеш события/композитный ключ).
- Назад-совместимость: слой адаптеров для старых форматов сообщений/полей.
- Наблюдаемость: расширенное логирование, технические метрики по этапам конвейера (ingest → normalize → write).
Логический конвейер:
- Ingest-сервис (SCTP приемник)
- Поддерживает несколько SCTP-ассоциаций от CU/DU, динамическое масштабирование по числу воркеров.
- Валидирует заголовки, выполняет первичную буферизацию, ставит события в внутреннюю очередь.
Normalizer (gRPC-сервис):
- Приводит данные к единому protobuf-контракту (версирование схем).
- Отбрасывает дубли, помечает «грязные» записи флагами валидации.
- Подготавливает батчи для записи.
Writer (ClickHouse sink):
- Пакетная запись в ClickHouse с учетом max_insert_block_size.
- Партиционирование по дате/часу, сортировка по (node_id, timestamp).
- Политики хранения (TTL) для «сырых» и «агрегированных» данных.
Aggregator/Views
- Материализованные представления для быстрых выборок (посекундные/поминутные метрики, статусы узлов).
- Предагрегация для типовых дашбордов мониторинга.
API-слой (gRPC):
- Отдает агрегаты и «сырые» срезы под внешние сервисы платформы.
- Пагинация/оконные выборки для длинных интервалов.
Работа с нагрузкой и сбоями:
- Backpressure: если Writer отстает, Normalizer замедляет прием батчей; Ingest регулирует окна SCTP.
- Повторяемость: идемпотентные вставки и детектор дублей исключают «раздутие» данных при ретраях.
- Грациозная деградация: при дефиците ресурсов система приоритизирует агрегаты и свежие статусы, откладывая запись малозначимых метрик.
- Горизонтальное масштабирование: репликация ClickHouse, шардинг по node_id, горизонтальные копии Ingest/Normalizer.
Технологический стек:
- C/C++, Boost, Folly (асинхронщина, структуры данных, утилиты)
- SCTP (транспорт телеметрии), gRPC (внутренние интерфейсы, стриминг)
- ClickHouse (временные ряды, аналитика)
- Linux (systemd-юниты, cgroups/ресурсные лимиты)
Что сделали:
- ревью исходного кода и схем обмена;
- замерили ключевые метрики (задержки, объемы, частота пиков);
- составили «карту интеграций» со смежными сервисами;
- согласовали приоритеты доработок и ограничения по простоям.
Артефакты: отчет по узким местам, initial SLO/SLA-ориентиры, backlog.
Что сделали:
- спроектировали целевую схему сервисов и контур миграции;
- разработали protobuf-схемы (версирование, политика изменений);
- определили партиционирование и ключи в ClickHouse;
- описали политики backpressure/ретраев.
Артефакты: архитектурный документ, protobuf-контракты, схемы БД, план миграции.
Что сделали:
- подготовили окружение Linux, systemd-юниты, базовые лимиты;
- добавили централизованное логирование и метрики по стадиям конвейера;
- настроили стенды для нагрузочного тестирования.
Артефакты: конфиги окружения, руководство по деплою/наблюдаемости
Что сделали:
- разработали многопоточный приемник (Boost.Asio + Folly executors);
- реализовали парсинг протокольных сообщений и буферизацию;
- добавили телеметрию на уровне очередей и окон SCTP.
Критерии приемки: устойчивый прием при пиковых нагрузках без потери пакетов.
Что сделали:
- нормализация и дедупликация, контроль версий схем;
- пакетная запись, стратегия ретраев и идемпотентность;
- материализованные представления для частых запросов.
Критерии приемки: стабильное время вставки и предсказуемые задержки энд-ту-энд.
Что сделали:
- реализовали gRPC-методы для «сырых» и агрегированных данных;
- добавили адаптеры совместимости для существующих потребителей;
- провели корректность миграции без изменений у внешних клиентов.
Критерии приемки: нулевые изменения контрактов для текущих интеграций.
Что сделали:
- стендовые прогонкы с профилями «средняя», «пик», «аварийная очередь»;
- стресс-тесты Writer/ClickHouse, проверка TTL и мерджей;
- отладили backpressure и пороги алертов.
Артефакты: отчеты нагрузочного тестирования, скорректированные лимиты.
Что сделали:
- организовали «тень» (shadow)-прогон нового контура рядом со старым;
- выполнили поэтапное переключение CU/DU-источников по батчам;
- провели мониторинг расхождений и финальную синхронизацию.
Критерии приемки: отсутствие простоев, корректная консистентность данных.
Что сделали:
- формализовали SOP/рутинные процедуры, чек-листы инцидентов;
- передали эксплуатационную документацию и провели обучение команды заказчика;
- согласовали план дальнейших улучшений (опциональные фичи, новые метрики).
Артефакты: эксплуатационные регламенты, руководство для разработчиков и NOC.
Проект позволил:
- сохранить функциональность и при этом перевести модуль телеметрии CU/DU на современную, масштабируемую архитектуру;
- снизить задержки обработки и повысить устойчивость при пиковых потоках;
- унифицировать интерфейсы и облегчить поддержку благодаря gRPC-контрактам и четкому разделению сервисов;
- подготовить основу для роста: добавление новых типов метрик, подключение дополнительных узлов, расширение аналитики в ClickHouse.
![]()
Максим Яблоков
Генеральный директор (CEO)
Команда из 2 C/C++ разработчиков, аналитика и PM закрыла полный цикл — от аудита и проектирования до пилота, миграции и ввода в эксплуатацию — без остановки сервиса и с сохранением совместимости для существующих потребителей данных.
Максим Яблоков
Подписаться
Елизавета Гордиенко
Подписаться
Наталия Пестова
Подписаться
Анна Клюйкова
Подписаться