Мутабельная vs. Иммутабельная инфраструктура


Оглавление

  1. Фундаментальная концепция
  2. Мутабельный подход (Mutable Approach)
  3. Иммутабельный подход (Immutable Approach)
  4. Проблема данных и состояния (State)
  5. Итоговое сравнение

Фундаментальная концепция

  • Иммутабельность (Immutability) — это идея о том, что как только объект создан, он никогда не изменяется после создания.
  • Ключевой вопрос выбора: Модернизируем ли мы существующую инфраструктуру на месте (in-place) или создаем новую с нуля, уничтожая старую?.

Мутабельный подход (Mutable Approach)

Определение и процесс

  • Суть: Модификация существующего сервера (VM или bare metal) в реальном времени для перехода к новой конфигурации.
  • Инструментарий: Обычно реализуется через системы управления конфигурациями, такие как Chef, Puppet или Ansible.
  • Пример: Обновление веб-сервера с Apache 2.4 на Nginx прямо на работающей машине.

Преимущества и риски

  • Плюсы:
    • Использование уже существующих серверов.
    • Отсутствие необходимости перемещать локальные данные на другие машины.
  • Риски и недостатки:
    • Частичные обновления: Риск “зависнуть” в неопределенном состоянии (например, версия 1.56), когда часть изменений применилась, а часть — нет из-за сбоев сети или DNS.
    • Сложность тестирования: Состояния промежуточных ошибок (вроде 1.56) никогда не тестируются в QA, что делает поведение системы непредсказуемым.
    • Эффект масштаба: На флоте из тысяч машин возникают разные вариации ошибок, которые крайне сложно отлаживать (проблема «1 из 10 запросов медленный или с ошибкой»).

Иммутабельный подход (Immutable Approach)

Определение и процесс

  • Суть: Мы никогда не пытаемся обновить сервер в процессе работы. Если нужно изменить версию (v1 -> v2), создается абсолютно новый сервер.
  • Рабочий процесс:
    1. Создание сервера v1 (например, с Apache).
    2. Создание снимка (snapshot) образа.
    3. При необходимости обновления до v2 создается новая VM с новым ПО (например, Nginx).
    4. Если создание v2 успешно и проверено — трафик переключается на нее.
    5. Старая инфраструктура (v1) выводится из эксплуатации или уничтожается.

Преимущества

  • Низкий риск: Отсутствие неопределенных промежуточных состояний; система либо в версии 1, либо в версии 2.
  • Снижение сложности: Проще анализировать инфраструктуру (например, через гистограммы: 50 машин v1, 20 машин v2), так как версии дискретны.

Проблема данных и состояния (State)

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

  • Экстернализация данных: Чтобы избежать потери данных, их необходимо выносить за пределы конкретного сервера (на внешнюю общую базу данных или сетевое хранилище).
  • Гибридный подход:
    • Для баз данных может применяться мутабельный подход, так как они обновляются редко, а миграция данных сложна.
    • Облачный метод: Использование мутабельных дисков (например, AWS EBS) с иммутабельными вычислительными узлами. VM уничтожается, но новый инстанс с новой версией ПО просто подключается к тому же самому внешнему диску.

Итоговое сравнение

Характеристика Мутабельная Иммутабельная
Изменения Модификация на месте (In-place) Создание нового, удаление старого
Риск Высокий (дрейф конфигураций, ошибки 1.56) Низкий (дискретные версии)
Тестируемость Сложная (нельзя протестировать все сбои) Высокая (тестируется готовый образ)
Данные Хранятся локально Должны быть внешними (Externalized)

Фундаментальный принцип: После создания объект остается неизменным. Это снижает сложность и повышает предсказуемость систем.