Разработка системы удаленной компиляции | Статья в журнале «Молодой ученый»

Отправьте статью сегодня! Журнал выйдет 30 ноября, печатный экземпляр отправим 4 декабря.

Опубликовать статью в журнале

Авторы: , , ,

Рубрика: Информационные технологии

Опубликовано в Молодой учёный №27 (317) июль 2020 г.

Дата публикации: 05.07.2020

Статья просмотрена: 66 раз

Библиографическое описание:

Горелов, Б. Р. Разработка системы удаленной компиляции / Б. Р. Горелов, Д. А. Балавнев, Т. О. Шергин, М. Л. Киндулов. — Текст : непосредственный // Молодой ученый. — 2020. — № 27 (317). — С. 32-34. — URL: https://moluch.ru/archive/317/72360/ (дата обращения: 16.11.2024).



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

Ключевые слова: удаленная разработка, сокеты, TLS.

Сейчас на рынке можно найти много готовых решений, позволяющих вести удаленную разработку и в том числе производить удаленную компиляцию. Условно решения данной задачи можно разделить на несколько классов. Один из них — это полноценные интегрированные среды разработки (IDE), предоставляющие широкие возможности, в том числе удаленную разработку (например NetBeans, CLion). К сожалению, часто для комфортной работы с большим проектом в таком приложении требуется мощный компьютер.

Другим классом решений являются утилиты, автоматизирующие сборку, с функционалом распределенных вычислений (например FASTBuild, IncrediBuild, Distcc). При наличии большого количества вычислительных мощностей данные утилиты многократно ускоряют процесс компиляции и сборки программного обеспечения, что является их главным плюсом. Среди недостатков можно отметить требование серьезной настройки программного окружения, узкий круг поддерживаемых языков (чаще всего только С/С++).

Для устранения недостатков существующих подходов, а также для обеспечения простоты и безопасности использования была разработана собственная система, представляющая из себя консольное клиент-серверное приложение, разрабатываемое на языке С под OC Linux. Ее работа состоит из нескольких этапов:

  1. Инициализация соединения клиента с сервером
  2. Архивация и сжатие выбранных файлов (опционально)
  3. Инициализация работы протокола TLS (опционально)
  4. Отправка данных на сервер
  5. Компиляция файлов / сборка проекта
  6. Отправка результата клиенту.

Для всех сетевых взаимодействий был использован зарекомендовавший себя интерфейс сокетов Беркли. Сокет позволяет управлять сетевым адресом, транспортом (то есть выбирать протокол транспортного уровня), а также предоставляет базовые операции ввода вывода (открытие/закрытие соединения, отправка/получение данных). В качестве протокола транспортного уровня при создании сокета было решено использовать TCP, так как в отличие от UDP он обеспечивает надежную доставку данных. Для того, чтобы отслеживать несколько клиентских сокетов, не блокируясь на них, использовался мультиплексор select. Он работает как обработчик прерываний, который активируется, как только на любой из сокетов приходят какие-либо данные. Если запрос пришел на исходный серверный сокет, он трактуется как запрос на новое соединение. Иначе происходит взаимодействие с уже существующим клиентом.

: Интерфейс сокетов Беркли, мультиплексор select

Рис. 1: Интерфейс сокетов Беркли, мультиплексор select

Для удобства пользователя была добавлена возможность архивации данных. Если требуется обработать 1–2 файла, не составляет труда ввести их имена. В противном случае, этот процесс может быть трудоемким, поэтому вместо файла пользователь может указать папку с файлами, содержащими исходный код. В этом случае с помощью архиватора tar создается архив. Далее при помощи утилиты gzip производится сжатие. В полученном виде информацию можно удобно и быстро передать на сервер для последующей работы.

Поскольку компилируемая программа может представлять коммерческий интерес, в разрабатываемую систему была добавлена возможность шифрования данных. Для этих целей использовалась широко известная криптографическая библиотека с открытым исходным кодом OpenSSL. Использованный в системе протокол TLS версии 1.2 является стандартом на рынке и гарантирует что данные, передаваемые между сервером и клиентом, защищены и не повреждены. TLS использует асимметричные алгоритмы шифрования. Рассмотрим процесс установки соединения. После того, как стороны договорились использовать TLS, согласование деталей соединения происходит с помощью представленной на Рис. 2 процедуры рукопожатия. В начале клиент отправляет запрос на установление безопасного соединения и указывает в нем доступный ему набор шифров и хэш функций. Сервер выбирает шифр и хэш-функцию, отправляет подтверждение, а также свой цифровой сертификат, содержащий имя сервера, публичный ключ и название центра сертификации. Затем в случае, если клиент подтвердил действительность сертификата, он шифрует случайное число публичным ключом сервера и отправляет его. Последним этапом сервер расшифровывает переданное случайное число своим приватным ключом и обе стороны с помощью данного числа генерируют сеансовый ключ для последующего шифрования и дешифрования данных во время сеанса. Таким образом обеспечивается защита данных даже в случае, если они были перехвачены третьей стороной.

Процедура рукопожатия TLS

Рис. 2. Процедура рукопожатия TLS

Были протестированы базовый и расширенный функционал приложения. Создан каталог с тестами и версиями системы для отслеживания изменений в работе приложения. В базовом режиме на сервер передавались однофайловые и многофайловые проекты. Тесты подразумевали как корректный пользовательский ввод, так и нет (например, содержащий ошибки в названиях файлов). Для тестирования расширенного функционала были выбраны проекты и разной структурой. Тесты показали, что текущая версия системы без ошибок работает с проектами с одноуровневой структурой, обработка многоуровневых проектов требует участия пользователя.

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

Литература:

  1. W. Richard Stevens; Bill Fenner & Andrew M. Rudoff (2003). Unix Network Programming, Volume 1: The Sockets Networking API (3rd Edition). Addison-Wesley Professional.
  2. Advanced Programming in the UNIX environment, third edition, W. Richard Stevens and Stephen A. Rago, Addison-Wesley, 2013
  3. Postel, Jon, «Transmission Control Protocol — DARPA Internet Program Protocol Specification», RFC 793 , DARPA, September 1981.
  4. Berkeley sockets — URL: https://en.wikipedia.org/wiki/Berkeley_sockets
  5. OpenSSL Cryptography and SSL/TLS toolkit — URL: https://www.openssl.org
  6. SSL/TLS cryptographic protocols — URL: https://en.wikipedia.org/wiki/Transport_Layer_Security
Основные термины (генерируются автоматически): TLS, удаленная разработка, IDE, TCP, UDP, безопасность использования, Интерфейс сокетов Беркли, процедура рукопожатия, транспортный уровень, удаленная компиляция.


Ключевые слова

TLS, удаленная разработка, сокеты

Похожие статьи

Контейнеризация в системах обработки данных

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

Обзор технологии GraphQL

В статье рассматривается технология GraphQL, приводится обзор достоинств и недостатков, а также сравнение с REST технологией.

Обзор существующих инструментов для моделирования бизнес-процессов, использующих основные методологии

В статье авторы описывают и выявляют достоинства и недостатки программных средств для моделирования бизнес-процессов.

Анализ средств для реализации нейронных сетей на языке программирования Java

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

Реализация проектных решений с использованием современных информационно-коммуникационных технологий

В данной работе нами были рассмотрены теоретические основы работы с Open Server, основные теоретические аспекты построения аналогичных сайтов на языке программирования PHP, разработан чат-мессенджер для организации, а также проанализированы достоинст...

Внедрение машинного обучения в блокчейн-системы

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

Рассмотрение декларативного подхода к разработке интерфейсов мобильных приложений для Android

В данной статье рассматриваются императивный и декларативный подходы к разработке интерфейсов, анализируются преимущества и недостатки библиотеки Jetpack Compose.

Формализация требований для средств разработки и обучения нейронных сетей

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

Архитектура Serverless

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

Обзор платформ для разработки смарт-контрактов

Для того чтобы разработка смарт-контрактов была эффективной, необходимы знание и понимание разработчиками особенностей блокчейн-платформ. Целью написания статьи являлось проведение обзора текущего состояния платформ смарт-контрактов и их особенностей...

Похожие статьи

Контейнеризация в системах обработки данных

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

Обзор технологии GraphQL

В статье рассматривается технология GraphQL, приводится обзор достоинств и недостатков, а также сравнение с REST технологией.

Обзор существующих инструментов для моделирования бизнес-процессов, использующих основные методологии

В статье авторы описывают и выявляют достоинства и недостатки программных средств для моделирования бизнес-процессов.

Анализ средств для реализации нейронных сетей на языке программирования Java

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

Реализация проектных решений с использованием современных информационно-коммуникационных технологий

В данной работе нами были рассмотрены теоретические основы работы с Open Server, основные теоретические аспекты построения аналогичных сайтов на языке программирования PHP, разработан чат-мессенджер для организации, а также проанализированы достоинст...

Внедрение машинного обучения в блокчейн-системы

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

Рассмотрение декларативного подхода к разработке интерфейсов мобильных приложений для Android

В данной статье рассматриваются императивный и декларативный подходы к разработке интерфейсов, анализируются преимущества и недостатки библиотеки Jetpack Compose.

Формализация требований для средств разработки и обучения нейронных сетей

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

Архитектура Serverless

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

Обзор платформ для разработки смарт-контрактов

Для того чтобы разработка смарт-контрактов была эффективной, необходимы знание и понимание разработчиками особенностей блокчейн-платформ. Целью написания статьи являлось проведение обзора текущего состояния платформ смарт-контрактов и их особенностей...

Задать вопрос