Привет, я Данила Трусов, директор продукта «Инферит ИТМен».
Хочу рассказать, как мы в буквальном смысле переписали три года разработки за восемь месяцев — и почему этот переход оказался не просто технологическим апгрейдом, а шагом к полной независимости продукта.

Почему вообще пришлось все переписывать

До 2022 года наши агенты для системы инвентаризации «Инферит ИТМен» прекрасно себя чувствовали в экосистеме .NET. Они стабильно решали задачи учета ИТ-активов и хорошо работали у заказчиков. Но в какой-то момент все изменилось: заказчики, особенно из госсектора, начали требовать максимальной технологической прозрачности и импортонезависимости.

Формально наш стек был рабочим, но с точки зрения инфраструктуры возникли сложности:

  • в закрытых контурах нужно было вручную устанавливать дополнительные библиотеки runtime;

  • некоторые российские дистрибутивы Linux просто не поддерживали нужные пакеты;

  • даже если нужные зависимости были, в изолированных сетях служба ИБ не разрешала устанавливать сторонние библиотеки.

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

Почему выбрали C++

Мы рассматривали разные варианты, но в итоге сделали ставку на C++. Причина простая — нам нужна была нативность и автономность.

C++ позволил значительно сократить количество внешних зависимостей и сделать работу агента более предсказуемой в разных окружениях. Для заказчиков с закрытыми контурами это критично: агент можно поставить и запустить без необходимости тянуть за собой тяжелые пакеты или дополнительное окружение.

Кроме того, C++ дал контроль над производительностью. В .NET часть поведения «спрятана» внутри фреймворка, а здесь все на виду: память, процессы, потоки, ресурсы. Мы смогли буквально выжать максимум из железа и убрать избыточное потребление ресурсов.

Восемь месяцев против трех лет

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

Над проектом работали три человека: архитектор, ранее отвечавший за .NET-разработку, и два новых инженера на C++. Несмотря на минимальные ресурсы, мы успели в срок.

Секрет был в трех вещах:

  • готовая архитектура — модульность и иерархия агентов остались с прошлой версии;

  • накопленный опыт — мы уже знали, где «узкие места», и не повторяли старые ошибки;

  • рациональный компромисс — выбрали C++14, чтобы сохранить совместимость со старыми системами, которые до сих пор живут в корпоративных сетях.

Главные вызовы и как мы их прошли

Переписать код было полдела. Сложности начались в интеграции и инфраструктуре.

1. Безопасность и архитектура передачи данных

В закрытых контурах категорически запрещены запросы сверху вниз. Сервер не может обращаться к агентам напрямую — только принимать данные от них. Мы полностью переделали логику взаимодействия: теперь данные идут только снизу вверх. Агенты сами собирают и отправляют информацию, сервер ничего не «дергает».

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

2. Разнообразие рабочих сред

У заказчиков встречаются и современные ОС, и очень старые версии Windows и Linux.
Чтобы все это работало, агент должен быть максимально автономным в части окружения и не должен опираться на внешние библиотеки, которые могут отсутствовать в закрытых инфраструктурах. Мы добились этого за счет сокращения зависимостей и расширенной кроссплатформенной поддержки.

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

Дополнительные плюсы

В обновленной системе, помимо прочего, есть несколько приятных бонусов:

  • устойчивость к сетевым сбоям — данные не теряются, если с��язь временно пропадает;

  • в разы меньше трафика — благодаря пакетированию и новой модели обмена;

  • упрощенное развертывание — теперь не требуется подтягивать тяжелые внешние компоненты, и агент легче устанавливать в изолированных средах;

  • гибкая модель данных — можно добавлять новые типы собираемых объектов без обновления агентов.

В итоге продукт стал лучше приспособлен к изолированным и смешанным инфраструктурам, где вместе живут разные ОС и конфигурации.

Что изменилось в результате

После перехода на C++ агент стал работать заметно быстрее и экономнее. В некоторых сценариях прирост производительности превысил 40% за счет оптимизации алгоритмов сбора и обработки данных.

Отказ от внешних библиотек позволил нам в три раза расширить список поддерживаемых ОС. Сейчас «Инферит ИТМен» работает на Windows (от 7 до Server 2022) и Linux — включая «МСВСфера», Astra Linux (от 1.7), Debian 9+, Ubuntu 18.10+, CentOS 7, Oracle Linux 8.3, Red Hat 7.4 и 8, SUSE 15.5+.

Первый крупный кейс

Одним из первых заказчиков обновленного «Инферит ИТМен» стала промышленная компания с десятками тысяч рабочих станций. Новая версия агента обработала 10 миллионов файлов в 30 раз быстрее, чем прежняя, и помогла собрать единую базу достоверных данных об ИТ-активах.

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

Выводы

Этот проект стал для нас отличным уроком. Мы поняли, что при смене технологического стека важно не только «на что перейти», но и зачем.

Теперь мы стараемся держать баланс между инновациями, стабильностью и совместимостью.

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

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