Номинируйте кейсы на Workspace Digital Awards 2026. Прием заявок до 15 декабря по льготной цене, успейте принять участие!
Brief
Модуль телеметрии CU/DU базовых станций
Brief
#Программирование сайта#Разработка программного обеспечения#Администрирование серверов

Модуль телеметрии CU/DU базовых станций

155 
Brief Россия, Иваново
Поделиться: 0 0 0
Модуль телеметрии CU/DU базовых станций
Клиент

ООО "НТР"

Бюджет

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/ресурсные лимиты)

1Аудит и discovery (1–2 итерации)

Что сделали:

- ревью исходного кода и схем обмена;

- замерили ключевые метрики (задержки, объемы, частота пиков);

- составили «карту интеграций» со смежными сервисами;

- согласовали приоритеты доработок и ограничения по простоям.

Артефакты: отчет по узким местам, initial SLO/SLA-ориентиры, backlog.

2Архитектура и контракты

Что сделали:

- спроектировали целевую схему сервисов и контур миграции;

- разработали protobuf-схемы (версирование, политика изменений);

- определили партиционирование и ключи в ClickHouse;

- описали политики backpressure/ретраев.

Артефакты: архитектурный документ, protobuf-контракты, схемы БД, план миграции.

3Инфраструктурная обвязка

Что сделали:

- подготовили окружение Linux, systemd-юниты, базовые лимиты;

- добавили централизованное логирование и метрики по стадиям конвейера;

- настроили стенды для нагрузочного тестирования.

Артефакты: конфиги окружения, руководство по деплою/наблюдаемости

4Реализация Ingest (SCTP)

Что сделали:

- разработали многопоточный приемник (Boost.Asio + Folly executors);

- реализовали парсинг протокольных сообщений и буферизацию;

- добавили телеметрию на уровне очередей и окон SCTP.

Критерии приемки: устойчивый прием при пиковых нагрузках без потери пакетов.

5Normalizer & Writer (gRPC + ClickHouse)

Что сделали:

- нормализация и дедупликация, контроль версий схем;

- пакетная запись, стратегия ретраев и идемпотентность;

- материализованные представления для частых запросов.

Критерии приемки: стабильное время вставки и предсказуемые задержки энд-ту-энд.

6API-слой и совместимость

Что сделали:

- реализовали gRPC-методы для «сырых» и агрегированных данных;

- добавили адаптеры совместимости для существующих потребителей;

- провели корректность миграции без изменений у внешних клиентов.

Критерии приемки: нулевые изменения контрактов для текущих интеграций.

7Нагрузочные испытания и hardening

Что сделали:

- стендовые прогонкы с профилями «средняя», «пик», «аварийная очередь»;

- стресс-тесты Writer/ClickHouse, проверка TTL и мерджей;

- отладили backpressure и пороги алертов.

Артефакты: отчеты нагрузочного тестирования, скорректированные лимиты.

8Пилот, параллельный прогон и поэтапная миграция

Что сделали:

- организовали «тень» (shadow)-прогон нового контура рядом со старым;

- выполнили поэтапное переключение CU/DU-источников по батчам;

- провели мониторинг расхождений и финальную синхронизацию.

Критерии приемки: отсутствие простоев, корректная консистентность данных.

9Ввод в эксплуатацию и передача

Что сделали:

- формализовали SOP/рутинные процедуры, чек-листы инцидентов;

- передали эксплуатационную документацию и провели обучение команды заказчика;

- согласовали план дальнейших улучшений (опциональные фичи, новые метрики).

Артефакты: эксплуатационные регламенты, руководство для разработчиков и NOC.

Результат

Проект позволил:

- сохранить функциональность и при этом перевести модуль телеметрии CU/DU на современную, масштабируемую архитектуру;

- снизить задержки обработки и повысить устойчивость при пиковых потоках;

- унифицировать интерфейсы и облегчить поддержку благодаря gRPC-контрактам и четкому разделению сервисов;

- подготовить основу для роста: добавление новых типов метрик, подключение дополнительных узлов, расширение аналитики в ClickHouse.

Комментарий агентства

Максим Яблоков
Максим Яблоков

Генеральный директор (CEO)

Команда из 2 C/C++ разработчиков, аналитика и PM закрыла полный цикл — от аудита и проектирования до пилота, миграции и ввода в эксплуатацию — без остановки сервиса и с сохранением совместимости для существующих потребителей данных.

https://нтр.рф/

Стек технологий

  • С С Язык программирования
  • С++ С++ Язык программирования
  • Sass Sass Язык программирования
  • Django Django Фреймворк/библиотека
  • Flask Flask Фреймворк/библиотека
  • Phalcon Phalcon Фреймворк/библиотека
  • ClickHouse ClickHouse База данных
  • Firebase Firebase База данных
  • IBM Db2 IBM Db2 База данных
  • Node.js Node.js Среда разработки

Над проектом работали:


Выскажите мнение
Авторизуйтесь, чтобы добавить свой комментарий.
оставить заявку

Хотите заказать похожий проект?

Brief с удовольствием обсудит вашу задачу

Оставить заявку