Главная/Портфолио/Разработка имитатора нагрузки для ведущего поставщика ВКС-систем в РФ

Разработка имитатора нагрузки для ведущего поставщика ВКС-систем в РФ

Ведущий разработчик ВКС-систем в России (NDA) при выпуске обновления своего программного обеспечения столкнулся с задачей: провести полномасштабное тестирование продукта в условиях максимальной нагрузки. Чтобы это стало возможно, он обратился к нам для создания имитатора нагрузки.

Цель нашей работы на уровне бизнеса — помочь клиенту подготовиться к сдаче завершённого, готового к высоким нагрузкам решения конечному заказчику ВКС-системы.

Конечный заказчик обозначил конкретные требования, которым должна была соответствовать система, и нашему клиенту было важно качественно протестировать её, чтобы привести в соответствие этим требованиям и продемонстрировать измеримый результат во время сдачи и защиты проекта.

Отрасльтелекоммуникации
Типовое решениеимитатор нагрузки
Услугиразработка, интеграции, автоматизированное тестирование, нагрузочное тестирование, визуализация данных
Технологический стекC#, Asterisk , C/C++, .NET, Python
Разработка_компонентов_систем_видео_конференц_связи Разработка_компонентов_систем_видео_конференц_связи

Отраслевая специфика компании-клиента

Отрасль клиента — разработка систем связи — очень консервативна, и это повлияло на выбор технологического стека.

В случае данного проекта мы использовали преимущественно C# и C++ — низкоуровневые языки программирования, лежащие в истоках IT-отрасли. Пишут на них немногие специалисты, в том числе из-за высокой сложности. Поскольку у нас в штате есть подходящие программисты, мы привлекли их к созданию решения.

Ключевые вызовы проекта

  • Нашему клиенту было важно показать своему конечному заказчику, что его решение способно выдерживать нагрузку в заданное количество абонентов, подключившихся системе связи при любом возможном сценарии: одновременно, с интервалом в секунду и т. д. Поиск реальных людей, готовых массово поучаствовать в тестировании системы, затруднителен. А готовые решения для такого тестирования не подходят: поскольку универсальный сервис сделать сложно, они слишком «заточены» под конкретные системы, при этом стоимость использования — высокая.
  • Усреднённые показатели, такие как длительность звонков, доли видео- и аудио- вызовов, количество событий смены статусов, должны были соответствовать задаваемым режимам тестирования.
  • В соответствии с нагрузочным профилем ПО должно было имитировать различные типы задач на ВКС-систему: от массовой смены статусов абонентов до отслеживания статусов узловых станций. Регистрация абонентов в сети тоже учитывалась как нагрузка. Это увеличивало количество и качество требований к системе.
  • Авторизация с SSO (single sign-on, технология единого входа) и Kerberos, обеспечивающими пользователям единую точку логина для всех цифровых систем компании клиента — отдельный вызов в контексте настройки интеграции нашей системы с его системой.
  • Нам предстояло решать вопросы безопасности на системном уровне: Astra Linux, используемая на стороне клиента, имела много особенностей, поэтому было необходимо выработать свои подходы для работы с ней. Об этом подробнее рассказали ниже.

 

Наши решения

Создали специализированный под задачи клиента имитатор нагрузки

Первая и главная часть нашей работы.

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

Систему можно попросить: «Сымитируй тысячу пользователей». В ответ она отправит тысячу запросов на сервер, поступающих линейно или по кривой.

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

Ещё важно понимать, что система нагружается не только самим звонком, но и регистрацией sim-карты на телефонной связи, сервисными сообщениями, подключением и отключением абонентов, использованием адресных книг.

Интегрировали имитатор с системой клиента, предполагающей кастомный механизм авторизации

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

В ходе проработки логики подняли Asterisk — проверенную виртуальную АТС (Автоматическую Телефонную Станцию) с открытым исходным кодом. Asterisk работала поверх IP-телефонии и имитировала нагрузку, при этом управляли этой АТС мы: давали полноценную нагрузку на систему в тестовом режиме.

Клиент использовал кастомный механизм авторизации: чтобы совершить звонок, каждому пользователю было необходимо авторизоваться в системе на уровне протокола взаимодействия. На фоне этого, задачи интеграции, которые мы выполняли, оказались нетривиальными.

В системе клиента использовалась SSO — и на эти протоколы мы тоже «вставали».

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

Для проведения работ с SSO мы должны были взять авторизацию с Kerberos, чтобы Asterisk из-под этого пользователя, этой авторизации, генерил вызов и метрики. А поскольку Astra Linux, операционная система клиента, «резала» пакеты безопасности, нам пришлось найти способ справиться с вопросом обеспечения защиты на системном уровне и адаптировать процесс интеграции под Astra Linux. Мы нашли в Astra Linux определённые настройки, изучили детали взаимодействия с ОС, включили их, и это сработало.

В процессе интеграции с системой клиента, которая использует специфический механизм авторизации, мы успешно выполнили следующие задачи:

  • Получили необходимые артефакты от клиента и обеспечили поддержку протоколов взаимодействия, лежащих в основе связи.
  • Управляли АТС, создавая полноценную нагрузку в тестовом режиме. (Для имитации нагрузки на систему была запущена Asterisk — надёжная виртуальная АТС с открытым исходным кодом, работающая через IP-телефонию.)
  • Реализовали поддержку кастомного механизма авторизации клиента, требующего авторизации каждого пользователя на уровне протокола взаимодействия перед совершением звонка.
  • Интегрировали систему по протоколам семейства SSO, используемым клиентом.
  • Поддержали общие механизмы авторизации, предоставляемые системой клиента.
  • Для работы с SSO мы взаимодействовали с Kerberos для генерации вызовов и метрик от имени авторизованного пользователя.
  • Преодолели сложности, связанные с тем, что операционная система клиента Astra Linux блокировала пакеты безопасности. Найдя необходимые настройки и изучив особенности взаимодействия с ОС, мы обеспечили защиту на системном уровне и адаптировали процесс интеграции под Astra Linux.

Ещё нужно было сделать так, чтобы в момент авторизации пользователя Astra Linux отправляла нам пакеты в сеть. Однако в системе клиента, в C++ пакете, использовались настройки, которые не позволяли это сделать. Чтобы имеющиеся настройки обойти и реализовать кастомный механизм авторизации, мы модифицировали Asterisk специфичным образом.

В результате мы обеспечили успешную интеграцию с системой клиента, учитывая все особенности и требования безопасности.

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

Разработали дашборды

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

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

Дашборды отражают нагрузку на ЦПУ и многие другие показатели.

вкс вкс

Технологический стек и решаемые им задачи

  • На C# и C++ мы встраивали в Asterisk модули, писали кастомную авторизацию.
  • На .NET разработали основной имитатор (затем система авторизации потребовала модификации Asterisk, и мы его патчили; управляли и модернизировали на C#). Также .NET выбрали для реализации определённых метрик.
  • Python использовали совместно с клиентом для обмена данными пользователя, кроме того, некоторые компоненты системы клиента были написаны на этом языке.
  • Для работы с кастомной авторизацией взяли C++ и C#.

Состав команды

  • Тимлид отдела разработки
  • Техлид отдела разработки
  • Senior fullstack-программист
  • Junior fullstack-программист
  • UX/UI-дизайнер
  • Middle-тестировщик

Результаты

  • Клиент получил отдельное специализированное ПО, которое в соответствии с нагрузочным профилем может имитировать различные типы задач на системе видеосвязи — от массовой смены статусов абонентов видеоконференцсвязи до отслеживания статусов узловых станций. Целевая система, которую наш клиент показал своему конечному заказчику, не отличала тестовую нагрузку от реальной.
  • Использование нашего ПО позволило клиенту выявить значительное количество ошибок на этапе тестирования продукта и качественно повысить его надёжность. Автоматизация нагрузочного тестирования позволила включить его в набор стандартных CI-тестов, повысив скорость выпуска новых релизов.
  • Цель разработки была достигнута: клиент представил и защитил решение перед своим конечным заказчиком и поделился с нами результатами.