Что такое неизменяемые серверы?


23

Есть несколько вопросов о неизменных серверах , таких как:

Кажется очевидным, что это связано с серверами (эту часть я получаю). И просто переваривая грамматику неизменяемого , я думаю, что это как-то связано с «невозможно отключить звук ». Если это предположение близко, я бы понятия не имел, что именно нельзя отключить (и я сомневаюсь, что это имеет отношение к звуковым картам или чему-то еще ...).

Мои вопросы :

  • Что такое «неизменяемые серверы» (в контексте DevOps)?
  • Почему они используются?

4
не возможно мутировать
Евгений

3
@Evgeny: ggggggggggggrrrrrrrrrrrrrrrr, я был близок, но совершенно ошибался с моим немым предположением (пожалуйста, не смейтесь надо мной ...).
Pierre.Vriens


Мне очень жаль, что я такой тупой, но был ли простой поиск в Интернете, чтобы определить «неизменный», настолько обременительным? Я понимаю, что вопрос больше этого, но поиск значения слова, а не догадки, возможно, дал бы вам приличный старт.
Адриан,

@ Адриан, нет проблем с тупым (потому что я страдаю ESL, я должен был бы погуглить это, чтобы действительно получить точное значение тупого). Однако мне интересно, знают ли вы об этом meta.SA вопрос ? Кроме того, я бы предпочел учиться у экспертов DevOps, а не альтернатив в Википедии.
Pierre.Vriens

Ответы:


19

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

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

Представьте себе, если в Amazon вы развернете веб-сервис, запечатав его в образ машины (AMI - предварительно созданный экземпляр, который можно повторно повторно предоставлять). Он подключается к серверной базе данных через учетные данные, которые он получает из реестра при запуске. Это сбрасывает журналы в инструмент регистрации, такой как Splunk. Для нормальной повседневной работы у вас нет причин вставлять ssh в это поле. Если вам нужно увеличить этот сервис, вы просто создаете больше экземпляров этого AMI и настраиваете балансировщик нагрузки. Отказ от этого - просто уничтожение экземпляров и балансировщиков нагрузки.

Для повседневной работы в этом поле нет причин для изменения . Мы можем просто запустить больше от AMI.

Что происходит, когда вам нужно предоставить исправление безопасности на уровне ОС? Это когда у вас есть решение сделать ... вы запекаете новый AMI с установленным патчем и повторно развертываете все запущенные экземпляры, или вы используете ssh в существующие образы и обновляете патч? Есть много людей, которые просто вошли бы сюда. Сторонники «неизменной архитектуры» просто кричали на меня за то, что я даже предполагаю, что такая вещь возможна.

Иммутабилисты (если есть такое слово) выступают за выпечку новых ами. Они выступают за устранение всех причин, по которым ssh мог войти в машину. Они выступают за то, чтобы при запуске этой машины возникала какая-либо конкретная конфигурация машины, извлекая сведения о конфигурации из репозитория. Это высшее выражение «скот, а не домашние животные».

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


«закрой старое, воспитывай новое». Или, если ваша архитектура это позволяет, откройте новое, настройте балансировщик нагрузки, выключите старое. Таким образом, вы можете сделать это в любое время, даже в самый разгар сезона. :)
Тим Мэлоун

Неизменность: если исходить из функционального программирования (1960-е годы), то теперь стало понятно, что он не только уменьшает количество ошибок (что часто не заботится), но также помогает с параллелизмом.
Ctrl-Alt-Delor

Я действительно был бы заинтересован в любом дополнении к этому фантастическому ответу о том, как агенты мониторинга или дополнительное программное обеспечение, которое может быть трудно внедрить в оригинал, могут сыграть здесь. Например, программное обеспечение для мониторинга APM, которое должно определять новое машинное окружение после создания и изменения параметров. Я изучаю SSM и автоматизацию для развертывания этого в AWS, но очень мало обсуждаю неизменность с AMI / образами при работе с дополнительными агентами, которые могут быть установлены позднее.
SheldonH

10

Облачные технологии сместили границу между аппаратным и программным обеспечением, так что многие технические операции, ранее являвшиеся эксклюзивными гражданами мира аппаратного обеспечения, также являются субъектами программного обеспечения. Совместно используемые вычислительные среды могут быть такими же старыми, как и сами компьютеры 1, но облачные технологии могут популяризировать их, предлагая удобные и знакомые метафоры для взаимодействия с ними: пользователи облака резервируют экземпляр, полный компьютер или имитатор, в то время как в старых общих вычислительных средах есть все возможные наборы. с громоздкими ограничениями и «ваша программа должна быть загружена на этот FTP-сервер, она будет работать в среде X (обычно с 10-летней версией любого программного обеспечения, которое вы хотите использовать), в течение не более 60 минут» может показаться знакомым для бывших или реальных пользователей вычислительных центров.

Практическим следствием этого сдвига является то, что процедуры развертывания теперь могут быть представлены программными артефактами. (Процедуры развертывания - это инструкции, в которых рассказывается, как настроить инфраструктуру с базами данных, веб-серверами или чем-либо, принадлежащим этой инфраструктуре, а также с сетью, в которой они работают.) Благодаря этим новым объективам ручное обслуживание серверов выглядит примерно ручное исправление производственного кода - что только в очень редких случаях желательно. Ручное обслуживание может привести к несоответствиям между системами, фактически работающими в производстве, и кодом, описывающим эти системы, что, в свою очередь, означает невоспроизводимое поведение и невозможный анализ ошибок, двойное исправление ошибок и другие бедствия.

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

Реализация ароматов

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

Историческая справка

Насколько мне известно, термин «неизменный сервер» популяризировался Кифом Моррисом, но сама идея намного старше. В 1999 году тюрьмы FreeBSD уже популяризировали идею полной автоматизации конфигурации одноразовых вычислительных сред. Именно так я начал внедрять шаблон «неизменный сервер» за много лет до того, как услышал это название для описания этой техники.

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


1 Если мы не считаем автоматические столы станков или роликовые органы компьютерами.


1
Вау, еще одно интересное объяснение, мерси! Теперь у меня действительно возникают проблемы, чтобы решить, какой ответ пометить как принятый (пожалуйста, наберитесь терпения, и, пожалуйста, знайте, что я могу пометить только 1 в максимуме, хотя в настоящее время я не решаю, какой именно). .).
Pierre.Vriens

1
Авек плезир! - Я думаю, что это хорошая идея, чтобы подождать несколько дней, чтобы принять ответ, это увеличивает шансы пользователей писать больше ответов.
Михаэль Ле Барбье Грюневальд,

9

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

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


Хм, интересно ... Мне нужно время, чтобы переварить это ... Знаешь, как "1 ответ на вопрос запускает 10 новых вопросов?" ...
Pierre.Vriens

1
Эту практику быстрого «отката» часто называют «синим / зеленым развертыванием» (также красным / черным, зависит от того, кто выполняет вызов).
Евгений

@ Евгений и, что еще хуже, можно назвать также развертыванием A / B, что подрывает линию экспериментов A / B. (и еще хуже, когда этот тип развертывания, кратный версии одного и того же приложения, предназначен для проведения экспериментов A / B вместо флагов функций)
Tensibai

Мне всегда говорили, что Blue / Green Deployments предназначены для развертывания обновления в существующем приложении, а не на самом сервере. @Evgeny
Черепаха

Да. Вы можете поменять местами серверы, контейнеры, приложения и все такое, и все еще называть это Blue / Green . Я думаю, что здесь есть свои вопросы и ответы. Просто хотел отметить, что способ, которым вы объяснили откат в своем ответе, довольно часто называется B / G.
Евгений

6

Наилучшее объяснение можно найти (как всегда) в статье Мартина Фаулера «bliki» о неизменных серверах .

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

Часто приложения и компоненты операционной системы требуют настройки и требуют внесения изменений. Например, исправления безопасности, развертывание новых версий приложения и изменения конфигурации.

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

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

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

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

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

Часто неизменяемые серверы даже не включают в себя какой-либо способ их «ввода», например, отсутствует ssh-сервер. В этом случае также часто бывает так, что вся метрология сервера (метрики, журналы) отправляется в системы за пределами, такие как база данных метрик или служба агрегации журналов.

С контейнерами (см .: Docker ) также существует процесс создания изображений, а затем их создания в работающих контейнерах. Они часто заменяются новыми контейнерами, основанными на обновленных изображениях, и никогда не видоизменяются. Это означает, что ни один человек не входит в контейнер, чтобы «что-то исправить» путем внесения изменений.


Интересное объяснение, может быть , вы хотите , чтобы мутировать это очень немного, если вы можете, и если это имеет смысл подробно останавливаться на чем - то , который я считаю каким - то образом связан, то есть, «топить» систему. Я думаю, что вы позволяете (более или менее) кому-либо «играть» с чем-то и предупреждаете его заранее, что (например) каждую ночь происходит какой-то сброс в исходное состояние. Кажется, что вход для такого сброса ... э-э-э ... что я собирался сказать ... правильно: такая неизменная вещь, которая может быть использована для этого.
Pierre.Vriens

2
Запуск службы, которая возвращает сервер в известное состояние (например, Chef / Puppet / Ansible / etc ...), просто означает, что вы не используете неизменный сервер. en.wikipedia.org/wiki/Promise_theory - это здорово, но martinfowler.com/bliki/ImmutableServer.html еще лучше.
Евгений

Вы дразните меня, я верю, или это скорее "вызов мне" (чтобы попытаться определить дневной лимит вопросов). Есть ли где-нибудь SE-правило, которое гласит: «Вы можете задать только 50 вопросов за 30 дней»?
Pierre.Vriens

0

Давайте начнем с обратного, что такое изменчивый сервер?

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

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

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.