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