Что такое неизменяемая инфраструктура?

В традиционной – изменяемой – серверной инфраструктуре серверы постоянно обновляются и модифицируются. Инженеры и администраторы, работающие с такой инфраструктурой, могут подключаться к серверам по SSH, обновлять или откатывать пакеты вручную, настраивать конфигурационные файлы на серверах по отдельности и разворачивать новый код. Другими словами, эти серверы изменяемы: они могут модифицироваться после их создания. Инфраструктура, состоящая из изменяемых серверов, и называется изменяемой, или традиционной (грубо говоря – кустарной).

Неизменяемая инфраструктура – это другая парадигма развития, в которой серверы никогда не изменяются после их развертывания. Если что-то необходимо обновить, исправить или изменить, создаются новые серверы с соответствующими изменениями, которые заменяют старые серверы. После тестирования они будут использоваться в инфраструктуре, а старые серверы будут списаны.

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

Эта статья:

  • Объясняет концептуальные и практические различия между изменяемой и неизменяемой инфраструктурой.
  • Описывает преимущества использования неизменяемой инфраструктуры и перечисляет сложности реализации.
  • Предоставляет подробный обзор деталей реализации и необходимых компонентов для неизменяемой инфраструктуры.

Разница между изменяемой и неизменяемой инфраструктурой

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

Существуют как практические, так и концептуальные различия между изменяемой и неизменяемой инфраструктурой на основе сервера.

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

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

Практические различия

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

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

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

Читайте также:

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

Концептуальные различия

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

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

Серверы в традиционных инфраструктурах были незаменимыми, уникальными системами, которым нужно было постоянно работать. В этом они были похожи на домашних животных: единственные в своем роде, неповторимые (также такие серверы сравнивают со снежинками). Потеря такого сервера может быть разрушительной для инфраструктуры. С другой стороны, серверы в неизменяемых инфраструктурах являются одноразовыми и легко реплицируемыми или масштабируемыми с помощью автоматизированных инструментов. Таким образом, они похожи на крупный рогатый скот: сервер – один из многих в стаде, где много ему подобных, и ни один не является уникальным или незаменимым (также такие серверы сравнивают с фениксом).

Преимущества неизменяемой инфраструктуры

Чтобы понять преимущества неизменяемых инфраструктур, необходимо контекстуализировать недостатки изменяемых инфраструктур.

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

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

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

Известное состояние сервера и снижение количества отказов

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

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

Это делает развертывание гораздо более надежным, а также гарантирует, что состояние каждого сервера в инфраструктуре будет всегда известно. Кроме того, этот процесс упрощает реализацию развертывания blue-green или rolling release, что означает отсутствие простоев.

Никаких сдвигов в конфигурациях

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

Это предотвращает сложные или трудновоспроизводимые конфигурации, устраняя риск появления серверов-снежинок и сдвигов в конфигурации. Также это предотвращает ситуации, в которых необходимо изменить плохо читаемые настройки сервера в производстве: при этом сервер подвергается высокому риску, а ошибки приводят к простою или непредсказуемому поведению.

Согласованные промежуточные среды и простое горизонтальное масштабирование

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

Простота отката и восстановления

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

Реализация неизменяемой инфраструктуры

Неизменяемая инфраструктура имеет некоторые требования и нюансы в реализации (особенно по сравнению с традиционными изменяемыми инфраструктурами).

Технически внедрить неизменяемую инфраструктуру, независимую от любых принципов автоматизации, оркестровки или разработки программного обеспечения возможно, просто придерживаясь ключевого принципа – неизменяемости. Тем не менее, настоятельно рекомендуется использовать следующие компоненты (они перечислены в порядке приоритета).

  • Серверы в среде облачных вычислений или другой виртуальной среде (например, можно использовать контейнеры, но это повлияет на некоторые другие требования, приведенные ниже). Ключевым моментом здесь является наличие изолированных экземпляров с быстрым предоставлением пользовательских образов, а также автоматическое управление серверами с помощью API.
  • Полная автоматизация развертывания (в идеале с проверкой образа после создания). Настройка автоматизации значительно увеличивает первоначальные затраты на реализацию этой инфраструктуры, но это одноразовый платеж, который быстро окупается.
  • Сервис-ориентированная архитектура, разделяющая инфраструктуру на модульные логические единицы, которые обмениваются данными по сети. Это позволяет в полной мере использовать сервис-ориентированные функции облачных вычислений (например, IaaS, PaaS).
  • Уровень непостоянных данных, а также уровень постоянных данных, который должен включать в себя:
    • Централизованное логирование с дополнительной информацией о развертывании сервера. Поскольку серверы являются одноразовыми (и часто удаляются), хранение логов и метрик позволяет отлаживать инфраструктуру, даже после уничтожения сервера или если доступ к оболочке ограничен.
    • Внешние хранилища данных. Нельзя полагаться на локальное хранилище, если серверы нестабильны, поэтому нужно хранить все данные в другом месте.
  • Также важна заинтересованность сотрудников в реализации такой инфраструктуры. При всей простоте конечного продукта в неизменяемой инфраструктуре много подвижных компонентов, и ни один сотрудник не будет знать их все. Кроме того, некоторые аспекты работы в рамках этой инфраструктуры могут быть новыми или неудобными (например, отладка или выполнение одноразовых задач без доступа к оболочке).

Существует много разных способов реализации каждого из этих компонентов. Выбор во многом зависит от личных предпочтений и возможностей каждого.

Инструменты непрерывной интеграции и доставки могут стать хорошим средством для автоматизации конвейеров; Compose – средство для DBaaS; rsyslog и ELK – популярный стек централизованного логирования;

Приложение Chaos Monkey, которое случайным образом убивает серверы в производственной среде – отличное испытание вашей окончательной настройки.

Заключение

Один из способов перейти к неизменяемой инфраструктуре – реализовать в изменяющейся среде некоторые из методов, рекомендованных в этой статье, например, настроить управление конфигурацией. Это упростит переход к неизменяемой инфраструктуре в будущем.

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

Tags: ,