Разбираемся с Snowflake Phoenix Immutable серверами
По ходу работы необходимо заниматься поднятием различного вида серверов\превью\стейдж решил немного прибраться в мыслях и немного их структурировать на тему видов серверов.
Snowflake server
Обычно система с конкретной конфигурацией, часто конфигурация и аппаратная часть настроены друг под друга. Вся конфигурация производится в ручную.
Преимущества:
- Заранее готов к тому, что будет запущено на сервере
- Как правило высокий uptime за счет сатичности настроек
- Имеет гибкость и возможность настроиться под конкретные кейсы не боясь за другие процессы.
Недостатки:
- Обновления могут оставлять неиспользуемые файлы, очистка может быть сложной
- Применение обновлений на нескольких машинах отнимает много времени
- Ничего не мешает незарегестрированным изменениям
- В случае падения ОС, повторная настройка отнимает много времени
- Растущая сложность настройки с 0 со временем
Phoenix server
Полностью автоматизированная настройка сервера за счет инструментов автоматизации.
Преимущества:
- Настройки опеределны кодом
- В следствие п.1 конфигурирование может иметь версионирование
- Легко собирается в любой момент
- Легкая репликация
- При генерации из кода конфигурация всегда задокументирована и не может быть забыта
Недостатки:
- Обновления и генерация могут оставлять неиспользуемые файлы, поддержка консистентности файлов может быть сложной
- Настройки системы могут быть ограничены возможностями отдельно взятой библотеки
- Необходимость иметь ручную настройку может сломать всю парадигму автоматизации
- Поддержка внешних библиотек и инструментов лежит на совести внештатных разработчиков
Immutable server
Неизменный сервер, как правило это собранный заранее контейнер или виртуальная машина
Преимущества:
- Конфигурация определена кодом, доступно версионирование
- Легко реплицируется
- Более безопастный доступ за счет обертки в виде контейнера\виртуальной машины
- Фиксированная конфигурация и окружение, вариации с разными версиями ОС на разных стойках в ДЦ исключены
Недостатки:
- Обновления и генерация могут оставлять неиспользуемые файлы, поддержка консистентности файлов может быть сложной
- Далеко не все модели приложений хорошо вписываются в парадигму одного контейнера или виртуальной машины
- Дополнительная сложность в настройках интерфейса общения между железом и виртуализацией