Привет, я Данила Трусов, директор продукта «Инферит ИТМен».
Хочу рассказать, как мы в буквальном смысле переписали три года разработки за восемь месяцев — и почему этот переход оказался не просто технологическим апгрейдом, а шагом к полной независимости продукта.
Почему вообще пришлось все переписывать
До 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. Сейчас мы продолжаем развивать продукт, усиливаем аналитику и возможности для корпоративных клиентов. Но самое важное уже сделано — мы создали действительно независимую платформу, которая не боится ни импортозамещения, ни ограничений по инфраструктуре.
Комментарии (9)

martein
25.11.2025 06:09Читать статью нужно так: "Рынок нашего ПО схлопнулся, мы побежали в госуху, а там Astra Linux, никаких смузи-технологий, только то, что есть в гос.реестре, и мы побежали даже не на mono, а на плюсы. Аналогов нет, нам не больно бороться с плюсами, даже стали быстрее ходить на работу и веселее отлаживать наше ПО. Ничего не бойтесь, тут не страшно, не больно, всё импортозаместим, чемодан нам никто не заносил за статью. Покупайте нашу прогу для инвентаризации. Всем пока."

lexasub
25.11.2025 06:09ребята на плюсы ушли из-за безопасников, написано же, rust прогонять через безов - жесть. Любое наличие виртуальной машины в языке - для безов красный флаг, единственное исключение - питон

eao197
25.11.2025 06:09Оно понятно, что когда родина прикажет, то и голой ж... на ежа сядешь. Но использовать С++14 в 2025-ом -- это больно. Хорошо хоть, что не С++98.

CatAssa
25.11.2025 06:09А мне понравился настрой статьи. Ушли от .NET монстра на божественные С++.
Я сейчас нечто подобное делаю: переписываю некоторые наши сервисы для работы под Astra/Red и т.п. Вообще, переделка полезна сама по себе - позволяет поправить колченогость прежней архитектуры и что-то соптимизировать. Ну и я просто люблю С++ :).

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

CatAssa
25.11.2025 06:09Наверняка были известны очевидные косяки прежней системы, которые "просто убирали".

eao197
25.11.2025 06:09вот так вот взяли, вжух, и всё завелось?
А в чем вы видите проблему?
Более интересно они с нуля все писали или брали какие-то готовые библиотеки (вроде POCO или Boost-а).
Kerman
--SelfContained и у вас нет внешних зависимостей. -p:PublishAot=true - и у вас на выходе бинарник как в плюсах.
dotnet add package Avaloniaи у вас кроссплатформенный UI с синтаксисом WPF, с поддержкой Native AOT и работающий на любом линуксе, где есть гуй.