Почему Nix и NixOS становятся популярнее? Золото в мире конфигурационного менеджмента

в 11:40, , рубрики: nixos, selectel, конфигурационный менеджмент
Почему Nix и NixOS становятся популярнее? Золото в мире конфигурационного менеджмента - 1

Бросьте в меня тапком те, кто не сталкивался с ситуацией из разряда «А локально оно нормально работает» или «На проде ошибка, но на стейдже такого не было». Эти фразы стали мемами, но от этого не перестали быть болью для разработчиков и админов. И вот здесь на сцену выходит Nix — инструмент, который обещает революционизировать конфигурационный менеджмент. Полная воспроизводимость окружений, устранение дрейфа конфигураций и предсказуемость на всех этапах — звучит хорошо, не так ли? Давайте разберемся, почему Nix и NixOS набирают популярность в DevOps.

Парадокс: простота через сложность


В мире конфигурационного менеджмента Nix и NixOS воплощают принцип «простота через сложность», который лежит в основе их растущей популярности. На первый взгляд, эти инструменты могут показаться сложными, но в долгосрочной перспективе они значительно упрощают жизнь разработчиков и системных администраторов.

Философия Nix

Nix основан на принципах функционального программирования и декларативного подхода к управлению конфигурациями. Вместо последовательности команд для установки и настройки ПО, вы описываете желаемое состояние системы в виде конфигурационных файлов. Удобно? Вроде удобно.

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

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

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

Актуальность

Результаты ежегодного опроса сообщества Nix показывают, что больше половины юзеров используют его не более двух лет. А 39% — так и вовсе менее года. Кажется, плюсы для новичков, которые я назвал выше, вполне себе имеют место.

Почему Nix и NixOS становятся популярнее? Золото в мире конфигурационного менеджмента - 2

Источник.

Другой примечательный факт — 90% пользователей Nix также используют NixOS. Это указывает на тесную связь между инструментом управления пакетами и операционной системой, построенной на его принципах. Что касается опыта программирования, данные показывают небольшой перевес в сторону опытных разработчиков: более 51% респондентов программируют более 10 лет и только 3,2% вообще никогда не программировали. Делаю вывод, что Nix хоть и может быть дружелюбен к новичкам (но это не всегда так, ниже разберемся подробнее), все же привлекает больше специалистов со значительным опытом.

Почему Nix и NixOS становятся популярнее? Золото в мире конфигурационного менеджмента - 3

Источник.

Кстати, NixOS — штука точно не для всех, но если вы разработчик или настраиваете серверы, то эта ОС может стать вашим лучшим другом. Например, установка Emacs через Nix на Ubuntu позволяет пользователям легко выбирать конкретные версии и зависимости без риска конфликтов. С помощью команды nix-shell можно создать изолированную среду для каждого проекта, что особенно удобно, когда разные проекты требуют разные версии библиотек.

Мини-иллюстрация: сценарий миграции базы данных

Рассмотрим пример миграции базы данных с использованием традиционного подхода и Nix.

Традиционный подход выглядит так:

  1. установка инструмента миграции (например, Flyway),
  2. написание SQL-скриптов миграции,
  3. настройка окружения (переменные среды, конфигурационные файлы),
  4. выполнение миграции,
  5. обновление документации о текущем состоянии схемы.

Подход с использованием Nix:

{ config, pkgs, ... }:
{
  services.postgresql = {
    enable = true;
    package = pkgs.postgresql_14;
    ensureDatabases = [ "myapp" ];
    ensureUsers = [
      { name = "myapp";
        ensurePermissions = {
          "DATABASE myapp" = "ALL PRIVILEGES";
        };
      }
    ];
  };
  systemd.services.db-migration = {
    description = "Database migration for MyApp";
    after = [ "postgresql.service" ];
    wantedBy = [ "multi-user.target" ];
    environment = {
      PGUSER = "myapp";
      PGDATABASE = "myapp";
    };
    script = ''
      ${pkgs.flyway}/bin/flyway migrate
    '';
  };
}

Этот пример показывает, как можно собрать все аспекты развертывания PostgreSQL, включая создание базы данных, пользователя и миграции через Flyway, в едином, лаконичном файле. Никакой возни с настройками вручную или случайными «оно работало у меня на локалке». Одна команда — и вся система настроена. Удобно? Еще как.

Но в этом и есть парадокс Nix: да, порог входа выше, и первые шаги потребуют времени. Однако награда — это упрощение рутины, стабильность и уверенность в том, что все корректно развернется.

Почему Nix и NixOS становятся популярнее? Золото в мире конфигурационного менеджмента - 4


Как работает магия Nix


Nix основан на принципах неизменяемости и декларативности. Давайте углубимся в основные концепции.

Центральный элемент архитектуры Nix — Nix Store. Это специальная директория, обычно расположенная в /nix/store. Она играет роль своеобразной базы данных графов, где каждый элемент представляет собой пакет или артефакт сборки.

После записи в Nix Store содержимое элемента никогда не изменяется. Каждый элемент имеет уникальный идентификатор, основанный на хеше его входных данных. А новые версии пакетов устанавливаются рядом со старыми, что обеспечивает атомарность обновлений и возможность мгновенного отката.

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

Однако не все пакеты в Nixpkgs являются битово-идентичными при повторной сборке из-за источников недетерминизма. Ими могут оказаться порядок элементов в структурах данных или порядок чтения файлов с диска. Кажется, что это незначительная деталь. Но поверьте, как только дело дойдет до сложных CI/CD-пайплайнов или (тьфу-тьфу-тьфу) воспроизведении окружений для аудита, такие мелочи вызовут ту еще головную боль.

Мини-туториал: создание простого окружения

Для начала вот туториал по установке и настройке Nix. А теперь создадим простое окружение разработки.

Первым дело нужно создать файл default.nix со следующим содержимым:

with import <nixpkgs> {};
mkShell {
  buildInputs = [
    python3
    nodejs
    git
  ];
  shellHook = ''
    echo "Добро пожаловать в окружение разработки!"
    echo "Доступные инструменты: Python, Node.js, Git"
  '';
}

Запустите окружение командой:

bash
nix-shell

Теперь у вас есть изолированное окружение разработки, в котором Python, Node.js и Git готовы к работе.

Реальные кейсы использования Nix


Рассмотрим три примера компаний, которые успешно внедрили Nix в процессы разработки и инфраструктуру.

Tweag

Это консалтинговая компания в области разработки ПО. Она использует Nix для управления зависимостями в проектах клиентов, разработала ряд инструментов на основе Nix, включая Nixpkgs-update, и применяет Nix для создания воспроизводимых сред разработки.

Почему Nix и NixOS становятся популярнее? Золото в мире конфигурационного менеджмента - 5

Диаграмма демонстрирует, как Nix интегрируется с операционной системой, используя файлы как входные и выходные данные для построения конфигураций. Источник.

По словам Андреаса Херрмана, руководителя команды Scalable Build в Tweag, Nix применяет дисциплину управления памятью к развертыванию программного обеспечения. Пакеты разделены в файловой системе. Можно отслеживать ссылки между ними, выполнять сборку мусора, гарантировать, что установка никогда не будет в несогласованном состоянии.

Serokell

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

Почему Nix и NixOS становятся популярнее? Золото в мире конфигурационного менеджмента - 6

Источник.

Как заявляет сама команда, развертывание новых ML-моделей получилось ускорить на 30%.

Mattermost

Это разработчик популярной платформы для командной коммуникации, который внедрил Nix в свой CI/CD для создания воспроизводимых сред сборки. Дополнительно в компании интегрировали Nix с Jenkins для автоматизации процесса CI/CD, а также применили Nix для управления зависимостями в проектах.

Команда Mattermost отмечает, что Nix позволяет явно указать все программные предпосылки, гарантируя, что приложения создаются и запускаются в согласованной среде независимо от того, где используется Nix.

Но не все так идеально


Хотя Nix и NixOS прям-таки на хайпе, у них есть свои подводные камни. Например, декларативный подход Nix к управлению конфигурациями и пакетами значительно отличается от традиционных систем Linux. Это требует от пользователей переосмысления привычных концепций управления системой. Проще говоря, новичкам может быть сложно.

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

Или новичков может сбить с толку наличие множества дополнительных инструментов, таких как Home-manager и Nix Flakes. Неясность в том, какие инструменты необходимы и как их правильно использовать, создает дополнительные барьеры для входа.

Несмотря на большой репозиторий пакетов, некоторое проприетарное или нишевое ПО может быть недоступно или плохо поддерживаться в Nix. Так что получить универсальный инструмент для всех-всех сценариев пока, увы, нельзя.

Наконец, подход Nix к изоляции пакетов может приводить к увеличению использования дискового пространства и некоторому снижению производительности по сравнению с более привычными системами управления пакетами.

Будущее Nix


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

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

Сообщество работает над улучшением документации, появляются user-friendly интерфейсы, а интеграции с CI/CD и контейнерными технологиями расширяются. Например, NixOS 24.05 показал серьезный прогресс: поддержка x86_64 и ARM64, установочные образы с KDE и GNOME, быстрый откат системы и установка индивидуальных пакетов.

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

Готовы ли вы инвестировать время в изучение Nix? Делитесь мнением в комментариях!

Автор: techno_mot

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js