Мутабельная vs. Иммутабельная инфраструктура
Оглавление
- Фундаментальная концепция
- Мутабельный подход (Mutable Approach)
- Иммутабельный подход (Immutable Approach)
- Проблема данных и состояния (State)
- Итоговое сравнение
Фундаментальная концепция
- Иммутабельность (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), создается абсолютно новый сервер.
- Рабочий процесс:
- Создание сервера v1 (например, с Apache).
- Создание снимка (snapshot) образа.
- При необходимости обновления до v2 создается новая VM с новым ПО (например, Nginx).
- Если создание v2 успешно и проверено — трафик переключается на нее.
- Старая инфраструктура (v1) выводится из эксплуатации или уничтожается.
Преимущества
- Низкий риск: Отсутствие неопределенных промежуточных состояний; система либо в версии 1, либо в версии 2.
- Снижение сложности: Проще анализировать инфраструктуру (например, через гистограммы: 50 машин v1, 20 машин v2), так как версии дискретны.
Проблема данных и состояния (State)
Иммутабельный подход требует особого внимания к данным, так как удаление машины означает удаление ее диска.
- Экстернализация данных: Чтобы избежать потери данных, их необходимо выносить за пределы конкретного сервера (на внешнюю общую базу данных или сетевое хранилище).
- Гибридный подход:
- Для баз данных может применяться мутабельный подход, так как они обновляются редко, а миграция данных сложна.
- Облачный метод: Использование мутабельных дисков (например, AWS EBS) с иммутабельными вычислительными узлами. VM уничтожается, но новый инстанс с новой версией ПО просто подключается к тому же самому внешнему диску.
Итоговое сравнение
| Характеристика | Мутабельная | Иммутабельная |
|---|---|---|
| Изменения | Модификация на месте (In-place) | Создание нового, удаление старого |
| Риск | Высокий (дрейф конфигураций, ошибки 1.56) | Низкий (дискретные версии) |
| Тестируемость | Сложная (нельзя протестировать все сбои) | Высокая (тестируется готовый образ) |
| Данные | Хранятся локально | Должны быть внешними (Externalized) |
Фундаментальный принцип: После создания объект остается неизменным. Это снижает сложность и повышает предсказуемость систем.