Еще одна система инициализации? Познакомьтесь с Nitro, новым взглядом на системное управление процессами
Первый публичный релиз Nitro добавляет еще один вариант в мир систем инициализации, предлагая минималистский супервизор процессов для сред Linux.
Разнообразие и бесконечные возможности в экосистеме Linux являются одной из ее сильнейших черт (или основной преградой для ее широкого принятия) — в зависимости от того, кого вы спросите. Но это не основная тема сегодняшнего обсуждения. Вместо этого мы посмотрим на что-то совершенно новое, что касается одной из самых фундаментальных частей любой системы: процесса загрузки.
Новая система инициализации под названием Nitro достигла своего первого публичного релиза, добавив еще одну опцию к уже разнообразной экосистеме процессных супервизоров для Linux, в настоящее время доминируемой systemd. Главной движущей силой за этим является Лия Нойкирхен, куратор Void Linux, свободного от systemd дистрибутива, который делает ставку на runit в качестве своей системы инициализации.
Она разработала Nitro таким образом, чтобы он был крошечным, гибким и простым в настройке, сосредоточив внимание на основных функциях того, что должно делать init-система: запускать службы, поддерживать их работоспособность и перезапускать их в случае сбоя. В отличие от более крупных альтернатив, таких как systemd, Nitro придерживается простой модели наблюдения за процессами, оставаясь при этом достаточно компактным, чтобы его можно было собрать и запустить как статический бинарный файл.
В его дизайне особое внимание уделяется:
- Только RAM-состояние – хранят все состояние в памяти, что позволяет ему корректно работать на файловых системах с только для чтения.
- Событийно-ориентированный – Работает без опроса, используя эффективную модель событийного управления.
- Детерминированное время выполнения – отсутствие распределений памяти после начала работы, что позволяет избежать фрагментации и неожиданных ситуаций во время выполнения.
- Безопасное использование ресурсов – Гарантирует отсутствие неограниченного роста дескрипторов файлов во время выполнения.
- Минимальный след – Распространяется в виде одного самодостаточного бинарного файла, с одним необязательным вспомогательным инструментом для управления системой.
- Простая конфигурация – Не требуется сборка или компиляция; сервисы просто директории с скриптами.
- Надежный аудит – Поддерживает автоматическое и надежное перезапускание сервисов при сбое.
- Гибкость ведения журналов – Предлагает ведение журналов по каждой службе, настройки по умолчанию и даже цепочки, распределенные между несколькими службами.
- Независимость от времени – Работает без необходимости в правильно настроенных системных часах.
- Кроссплатформенный – Также может работать на FreeBSD через “/etc/ttys,” автоматически обрабатывая стандартные файловые дескрипторы.
- Крошечный статический бинарник – Особенно мал, когда собран с использованием musl libc.
На практике Nitro делает то, что должны делать все системы инициализации: находиться на PID 1 и обеспечивать запуск остальных компонентов системы и их работу. Тем не менее, его отличие заключается в акценте на компактность, возможность сценарного управления и гибкость без добавления дополнительных слоев функциональности. Хорошо, но что на самом деле отличает его от других легковесных систем инициализации, таких как runit или s6, например?
Короче говоря, в то время как runit и s6 уже покрывают легкие потребности в инициализации и супервизии, Nitro занимает свою нишу, сосредоточившись на детерминированной, безопросной работе с минимальными накладными расходами в процессе выполнения. В то время как s6 добавляет модульную сложность, а runit принимает практичный трехступенчатый дизайн инициализации, Nitro стремится к еще меньшему объему с надежностью, встроенной в систему.
Итак, на мой взгляд, этот новый проект в области систем инициализации не предназначен для того, чтобы бросать вызов таким сложным гигантам, как systemd, в распространенных дистрибутивах Linux. Вместо этого он вписывается в специализированные случаи использования: легковесные контейнеры, встроенные системы и минимальные окружения, где предпочтительны небольшие, детерминированные двоичные файлы, а не крупные, насыщенные функциями фреймворки.
Сможет ли это действительно набрать реальную мощь — это покажет только время, но мы определенно будем следить за тем, как развивается этот новый проект.
Первый релиз Nitro теперь доступен на GitHub, где вы также можете найти подробную техническую информацию о нем.


Добавить комментарий