МегаполОС

Всем привет.

Сегодня мы хотим анонсировать проект, которым занимались последние полгода – МегаполОС.

Что такое МегаполОС? Подобно тому, как лозунгом гита было «Система контроля версий, какой она должна была быть», идея МегаполОСа в том, что «DevOps, каким он должен быть».

Что мы имеем в виду?

Цель, которую, на наш взгляд, должен достигать DevOps – это автоматизация ПО на всех этапах его жизненного цикла. То есть и разработка, и тестирование, и развертывание, и обслуживание, и масштабирование, и свертывание – все это должно быть полностью автоматизировано.

Но что мы видимо в реальности? DevOps – это куча разного ПО вроде докера, кубернетеса, гитлаба, ансибля, терраформа, и все это надо по отдельности настраивать и как-то пытаться интегрировать. Как говорится, «Чтобы внедрить девопс, наймите трех девопс-инженеров, которые будут писать конфиги».

Что еще хуже, существующее DevOps-ПО плохо работает в режиме runtime и плохо умеет работать с состояниями. Что имеется в виду? Обычно различные devops инструменты запускаются ко коммиту, «инфраструктура как код», что называется. Но инфраструктура не работает по коммиту. Инфраструктура работает постоянно и в ней постоянно что-то происходит. То же самое и с состояниями. В описании докера и кубернетеса написано, что они создавались прежде всего для работы stateless-микросервисов. Но простите, в реальном мире приложения крайне редко бывают stateless. Всегда есть данные, с которыми вы работаете и которые где-то сохраняются.

Итак, что тогда предлагает МегаполОС?

МегаполОС – это, по-сути, система управления сервером/кластером и система интеграции других devops-инструментов в единую систему обслуживания жизненного цикла ПО.

МегаполОС запускается на сервере или массиве серверов и берет их под контроль. Мы называем это «Операционная система второго порядка».

Что это означает? Это означает что мы работает с контейнерами как с приложениями, а с инфраструктурой как с устройствами. Причем под инфраструктурой мы подразумеваем в первую очередь такой софт как веб-сервера, базы данных, репозитории и системы сборки.

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

Вообще, наша цель – это чтобы все происходит по одной кнопке, а лучше по нулю кнопок. Мы исходим из того, что МегаполОС работает постоянно, отслеживает все события, которые происходят как на серверах, так и на инфраструктуре разработчиков (например, в репозиториях) и автоматически реагирует на это все. Наш идеал - «Никогда не писать конфигов и никогда не заходить в консоль».

МегаполОС на данный момент состоит из ядра, веб-GUI и драйверов.

Ядро – это приложение, которое запускается на каждом сервере и совершает управление всем остальным. Оно управляет контейнерами и всей остальной серверной инфраструктурой.

Веб-GUI – это, естественно, интерфейс для управления МегаполОСом.

Драйвера – это самое интересное. Как мы ранее говорили, мы относимся к серверной инфраструктуре, причем в первую очередь к программной, как к «устройствам». Например, PostgreSQL – это устройство. А для управления устройствами нужен слой абстрагирования устройств (HAL) и драйвера.

То есть с точки зрения ядра СУБД – это абстрактная сущность, у которой есть функции «создать БД», «удалить БД», «создать бэкап», «восстановить бэкап». Как конкретно СУБД это делает – задача драйвера. Драйвер – это просто одно из контейнерных приложений с дополнительными привилегиями, которое занимается управлением своим «устройством». На данный момент мы написали несколько драйверов для популярных устройств, вроде mongodb, nginx, gitlab, certbot.

Еще раз подчеркнем то, что МегаполОС работает в реальном времени и постоянно отслеживает ситуацию и дает команды для ее изменения. Это в частности означает то, что связь между ядром и приложениями – двусторонняя. У контейнерных приложений есть доступ к API ядра, а у ядра есть доступ к приложениям.

Теперь о технической части.

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

Стэк МегаполОСа – это rqlite + node.js + React+ GraphQL + Docker.

  • rqlite – это распредленный sqlite. Мы специально искали распредленную реляционную СУБД, поскольку у нас очень строгие взаимоотношения между сущностями. Планируется переход на более полноценную распределенную реляционную СУБД
  • node.js – на нем написаны ядро и драйвера. Для не очень часто происходящих действий этого может быть достаточно. Высокопроизводительные части мы планируем переписывать на go. Мы выбрали этот стэк, потому что у нас происходит много параллельных и асинхронных процессов.
  • React – на нем написан GUI
  • GraphQL – это язык API, через который происходит взаимодействие с ядром и драйверами. Мы выбрали это API, потому что оно типизировано
  • Docker – управление контейнерами. В будущем планируем перейти на containerd.

Лицензия МегаполОСа – Apache 2.0.

Исходные коды: https://gitlab.com/megapolos

Чат сообщества - https://t.me/megapolos

Мы разрабатываем этот проект уже полгода своими силами. Хотите ускорить процесс и быстрее получить готовый продукт? Поддержите нас:

2200 2407 5706 1466 (банк ВТБ)

151 views