0
Обложка: Что поможет упростить удалённую разработку в облаке

Что поможет упростить удалённую разработку в облаке

Mutagen позволяет работать с кодом на локальных IDE и автоматически синхронизирует его с контейнерами в облаке. Сегодня мы расскажем, что ещё может предложить инструмент, кто его использует и что о нём думает ИТ-сообщество. T1 Cloud  снова на связи!

Эти непростые контейнеры

Тренды рынка контейнерных технологий регулярно анализируют коммерческие и некоммерческие организации вроде Cloud Native Computing Foundation (CNCF) и Red Hat. В прошлом году они опросили больше тысячи инженеров в США, Европе и Азии и установили, что примерно 50% компаний используют контейнеры в продакшн. В то же время в Gartner убеждены, что к концу 2022 года эта цифра увеличится до 75%.

Аналогичной точки зрения придерживаются специалисты компании Datadog, разрабатывающей сервис для мониторинга серверов, баз данных и приложений в облаке. Год назад они собрали данные по инфраструктуре своих клиентов и обнаружили, что в среднем у них развернуто по тысяче подов. Это — группы, состоящие из одного или нескольких контейнеров. Для сравнения, эта цифра оказалась в два раза больше, чем в 2019-м.

Unsplash.com/Venti Views

Вместе с расширением экосистемы растет популярность программных продуктов вроде OpenShift и Deckhouse. Они автоматизируют настройку контейнерной инфраструктуры в облаке и серьёзно упрощают жизнь разработчикам. Но отладка в контейнерной среде остается непростым делом.

Программист должен «упаковать» код в docker-образ, направить его в кластер для развёртки и проверить работоспособность — алгоритм приходится повторять для всех вносимых изменений. Это медленный и часто утомительный процесс, который не позволяет в полной мере использовать возможности дебаггеров и систем мониторинга, отражающих вносимые изменения на лету.

Однако существуют проекты, которые берут вопросы синхронизации на себя и позволяют использовать локальную среду разработки для отладки «контейнерного кода». Об одном из таких проектов — Mutagen — мы расскажем далее.

Что ещё за Mutagen

В первую очередь инструмент автоматизирует процессы commit, push и pull для запуска и проверки работоспособности кода на системе в облаке. Программу можно отредактировать в локальной IDE (или даже в текстовом редакторе) и проверить её работоспособность в контейнерной среде без редеплоя.

В основе архитектуры Mutagen лежит специальный демон. Он работает в фоновом режиме и управляет синхронизационными сессиями. Для каждого пользователя может быть запущен всего один такой процесс. В то же время инструмент не нужно устанавливать вручную на удалённых системах. Он самостоятельно копирует необходимые бинарные файлы с помощью механизмов scp и docker cp и защищённых транспортов ssh или docker exec.

Unsplash.com/Venti Views

Для начала синхронизации достаточно написать всего пару команд — mutagen sync create или mutagen forward create. Вот примеры:

mutagen sync create —name=web-app-code ~/project user@example.org:~/project

mutagen forward create —name=web-app tcp:localhost:8080 docker://devcontainer:tcp:localhost:1313

Обмен информацией между локальной средой и облаком происходит в условиях взаимного недоверия. Mutagen использует функции POSIX *at, чтобы защитить данные при передаче и предотвратить атаки типа CVE-2017-1000420, связанные с эскалацией привилегий. При этом механизмы форвардинга позволяют получить доступ к удалённым приложениям без открытия портов в сеть. Поддерживается трафик IPv4/v6 TCP, доменные сокеты Unix и именованные каналы Windows.

Одна из главных функций Mutagen — Mutagen Compose для интеграции с Docker Compose. Она управляет сборкой, запуском и конфигурацией целого набора контейнеров. Если вы хотите поближе познакомиться с этим решением для удалённой разработки, авторы подготовили подробное руководство. Исходный код проекта выложен на GitHub, и репозиторий может стать второй остановкой для изучения возможностей инструмента.

Что думает сообщество

По словам разработчиков Mutagen, их проект серьёзно сокращает задержки при синхронизации кода, так как учитывает особенности каждой программной платформы. Например, в случае с Linux система работает с модифицированным API fanotify.

По оценкам авторов, в перспективе они сократят время синхронизации до 100 мс при работе с кодовыми базами в десятки гигабайт. Проект уже привлек внимание резидентов Hacker News, которые запустили на площадке тематический тред. Один из участников дискуссии рассказал, что работает с Mutagen несколько месяцев. По его опыту, инструмент синхронизирует код в восемь раз быстрее, по сравнению с нативными средствами Docker.

Другой участник обсуждения заметил, что Mutagen Compose может стать хорошей заменой Docker для Mac. Дело в том, что у последнего есть проблемы с производительностью. Особенности монтирования разделов в файловой системе osxfs замедляют работу приложений с частыми операциями ввода-вывода, а также нагрузку на железо. Пользователи Mac даже шутят, что из-за Docker компьютер шумит как самолет на взлёте.

Unsplash.com/shawnanggg

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

Кроме того, Mutagen уже используют в продакшн-средах. В частности, авторы инструмента для Kubernetes-разработки Garde применяют его для «горячей» перезагрузки контейнеров.

Кто еще делает что-то подобное

Разумеется, Mutagen не единственный проект, посвящённый удалённой разработке. Существуют другие open source решения, позволяющие синхронизировать код между средой разработки и подами в облаке — например, Syncthing.

Обмен данными в Syncthing реализован через протокол обмена блоками (Block Exchange Protocol). Каждый узел в сети имеет некую локальную модель с метаданными и хэшами блоков. В сумме они формируют модель-эталон, которая содержит последние версии файлов.

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

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

Ещё больше материалов от команды T1 Cloud — в нашем блоге. Подписывайтесь, обсуждайте, делитесь!