IDE (Integrated Development Environment) — интегрированная среда разработки, которая представляет собой программное обеспечение (ПО), используемое разработчиками для создания, редактирования, отладки и оптимизации исходного кода компьютерных программ. Она обеспечивает набор инструментов и служб, которые упрощают и ускоряют процесс разработки программного обеспечения.
Одни из самых больших проблем при работе с IDE, с которыми сталкиваются многие разработчики больших систем — долгая индексация проектов и большая задержка при выполнении различных команд в IDE.
SUDU — инновационная облачная платформа для IDE, основная цель которой решить данную проблему, используя преимущества облачных вычислений. SUDU представляет собой набор сервисов с открытым API, с помощью которого можно получить информацию из кодовой модели для того или иного коммита. Например, в качестве запроса к кодовой модели может быть поиск объявления символа; поиск мест, которые ссылаются на указанный символ и другие. На данный момент SUDU поддерживает несколько языков, а именно C++ и Java, но все кодовые модели этих языков строятся по инкрементальному принципу, то есть построение кодовой модели для нового коммита происходит на основе кодовой модели уже построенного ранее одного из предыдущих коммитов. Такой подход позволяет ускорять построение новой кодовой модели, а также оптимизировать объем данных, который нужен для хранения кодовой модели, так как он позволяет хранить только непосредственные изменения между двумя кодовыми моделями.
В SUDU построение кодовых моделей происходит асинхронно, по запросу пользователя. После добавления проекта в SUDU, проект автоматически синхронизируется с указанным git репозиторием в асинхронном режиме. Но вполне возможна ситуация, при которой пользователь запросил построить дополнительно несколько сотен исторических коммитов, в таком случае возникает неопределенность в порядке построения кодовых моделей для новых коммитов и исторических коммитов. Для управления очередностью построения кодовых моделей и распределения ресурсов при построении возникла необходимость в сервисе, который мог бы оркестрировать построение инкрементальных кодовых моделей.
Данная работа посвящена исследованию и имплементации cервиса, оркестрирующего построение распределенной кодовой модели.
Целью и основным результатом данной работы является реализация сервиса оркестратора, управляющего построением распределенной кодовой модели. В частности, в ходе выполнения работы были получены следующие результаты:
1. Сформированы функциональные и нефункциональные требования к разрабатываемому сервису, учитывающие архитектуру SUDU и свойства уже имеющихся сервисов, а также недостатки существовавшей на тот момент системы.
2. Все требования были формализованы, а структура сервиса оркестратора и все сопровождающие детали перед имплементацией были оформлены в качестве ADR (Architecture Decision Record) документа, который был принят командой.
3. Сервисы, которые строили проектную и кодовую модель, были адаптированы под использование в унифицированном виде, то есть реализовывали общий gRPC API.
4. Полностью реализован и оттестирован сервис оркестратор, управляющий построением распределенной кодовой модели. Сервис оркестратор был успешно интегрирован в SUDU и сейчас используется в нем наряду со всеми остальными компонентами системы.
5. Расширен CLI (Command Line Interface), используемый для взаимодействия с сервисами SUDU, для добавления взаимодействия с сервисом оркестратором.
6. Создан документ, описывающий все настройки сервиса через конфигурацию переменных окружения.
7. Произведен замер эффективности представленного решения, который доказал эффективность выбранного подхода: дисковое пространство, необходимое для хранения индексов кодовых моделей, уменьшилось, а общая пропускная способность системы увеличилась.
Таким образом, цель работы достигнута в полном объеме, а сервис оркестратор введен в эксплуатацию в SUDU на постоянной основе.