Що таке незмінні сервери?


23

Є кілька запитань щодо незмінних серверів , таких як:

Здається очевидним, що це стосується серверів (ту частину, яку я отримую). І лише перетравлюючи граматику незмінного , я думаю, що це має щось спільне з "неможливим приглушити ". Якщо ця здогадка близька, я б не мав поняття, що саме не можна вимкнути (і я сумніваюся, це стосується звукових карт чи чогось іншого).

Мої запитання :

  • Що насправді є "незмінними серверами" (в контексті DevOps)?
  • Для чого вони використовуються?

4
неможливо мутувати
Євген

3
@Evgeny: ggggggggggggrrrrrrrrrrrrrrrrr, я був поруч, але зовсім не так з моїм приглушеним припущенням (будь ласка, не смійся з мене ...).
Pierre.Vriens


Вибачте, що настільки тупий, але чи був простий пошук в Інтернеті, щоб визначити "непорушний" цей обтяжливий? Я розумію, що питання більше, ніж це, але пошук значення цього слова, а не здогадки, міг би дати вам гідний початок.
Адріан

@ Adrian жодних проблем не сприймає тупість (оскільки я страждаю ESL, мені доведеться погуглювати це, щоб дійсно отримати точне пом'якшення тупи). Однак мені цікаво, чи знаєте ви про це питання мета.SA ? Крім цього, я хотів би скоріше навчитися у експертів DevOps, а не у подібних альтернатив у Вікіпедії.
Pierre.Vriens

Відповіді:


19

Незмінюваність - термін, який часто використовується в колах інформатики, який, як правило, зводиться до "неможливо змінити після створення". Зазвичай він використовується для посилань на паралелізм, паралельність та безпеку ниток.

Обговорення цієї теми є захоплюючим, але, як правило, їх можна знайти в іншому місці переповнення стека . Я протистояю бажанню зануритися тут. Ключова концепція - "неможливо змінити після створення".

Уявіть, якщо на Amazon ви розгортаєте веб-сервіс, вкладаючи його в машинне зображення (AMI - попередньо створений екземпляр, який ви можете повторно надавати). Він підключається до резервної бази даних за допомогою облікових даних, які виходить з реєстру при запуску. Він скидає журнали в інструмент для ведення журналів, як Splunk. Для звичайної щоденної роботи у вас немає причин забивати це поле. Якщо вам потрібно розширити масштаб цієї служби, ви просто створіть більше примірників цього AMI і налаштуйте балансир навантаження. Скручування його - це просто руйнування екземплярів та балансирів навантаження.

Для щоденної експлуатації це поле не має підстав змінюватись . Ми можемо просто розпалити AMI.

Що відбувається, коли вам потрібно забезпечити патч безпеки на рівні ОС? Це коли у вас є рішення прийняти ... чи ви запікаєте новий AMI з встановленим патчем і перерозподілите всі запущені екземпляри, або ви сш в існуючі зображення та оновите виправлення? Є багато людей, які просто б'ються. Прихильники "непорушної архітектури" просто кричали на мене, навіть припускаючи, що таке можливо.

Імутабілісти (якщо є таке слово) виступають за випікання нових амі. Вони виступають за усунення будь-яких причин, щоб коли-небудь потрапити в машину. Вони відзначають, що будь-яка конкретна конфігурація машини повинна відбуватися під час запуску цієї машини, витягуючи деталі конфігурації із сховища. Це виразний вираз "великої рогатої худоби, а не домашніх тварин".

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


"закрити старе, піднести нове". Або якщо ваша архітектура дозволяє, піднесіть нове, налаштуйте балансир навантаження, вимкніть старе. Таким чином, ви можете робити це в будь-який час, навіть якщо посеред піку. :)
Тім Малоун

Незмінність, якщо з функціонального програмування (1960-ті роки) тепер зрозуміло, що це не тільки зменшує помилки (те, про що часто не хвилюється), але й допомагає з одночасністю.
ctrl-alt-delor

Мені б дуже цікаво будь-яке доповнення до цієї фантастичної відповіді про те, як тут можуть грати агенти моніторингу чи додаткове програмне забезпечення, яке може бути важким для оригіналу. Наприклад, програмне забезпечення для моніторингу APM, яке має виявляти нове машинне середовище після створення та зміни параметрів. Я досліджую SSM та автоматизацію для розгортання цього в AWS, але знайшов дуже мало, щоб обговорити незмінне з AMI / образами при роботі з додатковими агентами, які можуть бути встановлені пізніше.
ШелдонH

10

Хмарні технології змістили кордон між апаратним та програмним забезпеченням, так що багато технічних операцій, які раніше були ексклюзивними громадянами світу апаратних засобів, також є предметом сфери програмного забезпечення. Спільні обчислювальні середовища можуть бути такими ж старими, як і самі комп’ютери 1, але хмарні технології можуть популяризувати їх, пропонуючи зручні та звичні метафори для взаємодії з ними: користувачі хмари резервують екземпляр, повний комп’ютер або міміку, тоді як для старих спільних обчислювальних середовищ є все можливе непростих обмежень, і "ваша програма повинна бути завантажена на цей FTP-сервер, вона працюватиме в середовищі X (як правило, зі старою версією 10 років будь-якого програмного забезпечення, яке ви хочете використовувати), щонайменше 60 хвилин" може здатися знайомим колишнім або фактичним користувачам обчислювальних центрів.

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

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

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

Незважаючи на те, що загальна ідея незмінного шаблону сервера є цілком зрозумілою, існує багато нюансів реалізації. Наприклад, деякі підходи пропонують взагалі не оновлювати сервери, а систематично замінювати сервери. Це пояснюється тим, що оновлення результатів виходу, коли розгортання складається з серверів, запущених у декілька різних моментів і пройшли декілька чітких процесів оновлення, що передбачає неоднорідний набір серверів і може призвести до тонких відмінностей у тому, як сервери виконують свої завдання. Другим популярним варіантом є дисципліна щодо віддаленого доступу до серверів. Дехто любить вимкнути повністю віддалений адміністративний доступ до серверів, щоб гарантувати, що технічне обслуговування ніколи не відбудеться.

Примітка історії

Наскільки мені відомо, термін «незмінний сервер» був популяризований Кіефом Моррісом, але сама ідея набагато старша. У 1999 році в'язниці FreeBSD вже популяризували ідею повністю автоматизувати конфігурацію одноразових обчислювальних середовищ, саме так я почав реалізовувати схему "незмінного сервера" багато років, перш ніж почути це ім'я для опису цієї методики.

Незмінність під виглядом фізичної непорушності на основі компакт-дисків також була популярним заходом для виробництва надійних обчислювальних систем. Це не помиляється з незмінним шаблоном сервера.


1 Якщо ми не зараховуємо автоматичні таблиці ткацьких верстатів або роликові органи як комп'ютери.


1
Ух, ще одне цікаве пояснення, мерсі! Зараз мені справді важко вирішити, яку відповідь відмітити як прийняту (терпіння щодо цього, будь ласка, знайте, що я можу позначити лише 1 максимум, хоча в цей час я зовсім не вирішував, який саме .. .).
Pierre.Vriens

1
Avec plaisir! - Я думаю, що корисно почекати кілька днів, щоб прийняти відповідь, це збільшує шанси користувачів написати більше відповідей.
Michael Le Barbier Grünewald

9

Незмінні сервери - це сервери, на яких не можна вносити жодних змін (крім оновлень та патчів безпеки). Замість того, щоб змінювати програмне забезпечення на сервері, ви розгортаєте новий сервер із потрібним програмним забезпеченням, а потім скасовуєте старіший.

Ця концепція допомагає гарантувати, що ваш тест, розробка та сервер якості якості однакові, що важливо з кількох причин поза сферою цього питання. Ще одна перевага незмінних серверів - це можливість відкатати додаток на більш старий сервер. Наприклад, мені потрібно змінити K на виробничому сервері 1, тому я розгорнув сервер 2 і зміну K. Тепер через 10 хвилин я помічаю, що K зламав щось із моєю програмою, а не одразу виправляти це, що може зайняти години і потенційно може спричинити простої для моїх клієнтів, я перенаправляю трафік назад на сервер 1, тоді як я з'ясовую, що не так з 2.


Гм, цікаво ... Мені потрібен певний час, щоб далі переварити це ... Знайте приказку на кшталт "1 відповідь на запитання викликає 10 нових запитань?" ...
Pierre.Vriens

1
Таку практику швидкого "відкоту" часто називають "синьою / зеленою розгортанням" (також червоний / чорний, залежить від того, хто виконує дзвінки).
Євгеній

@ Євген і, що ще гірше, також можна назвати розгортання A / B, розмиваючи лінію за допомогою експериментів A / B. (і ще гірше, коли цей тип розгортання, декілька версій одного і того ж додатка,
підлягає

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

Так. Ви можете обмінятись серверами, контейнерами, програмами та ін. І все ще називати це Blue / Green . Я думаю, що це заслуговує на власне запитання та відповіді. Просто хотілося зазначити, що те, як ви пояснили відкат у своїй відповіді, досить часто називається B / G.
Євгеній

6

Найкраще пояснення можна знайти (як завжди) у статті про Матіна Фаулера про Immutable Servers .

Сервер, будь то апаратний або віртуальний сервер у хмарі, зазвичай має на ньому операційну систему та додаток.

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

Коли ви вважаєте, що будь-яка зміна є мутацією щодо стану сервера, термін immutableпочинає мати більше сенсу. Це означає, що на такому сервері не допускаються мутації .

Часто буває, коли люди беруть участь у зміні стану сервера - будь то розгортання версії, зміна конфігурації чи шлях безпеки. Результат - сервер, який більше не працює, як очікувалося. Наприклад, програма може не працювати зараз через неправильну конфігурацію тощо.

Ось чому встановлена ​​практика створення незмінних серверів. На незмінних серверах створюється зображення сервера з усією конфігурацією, виправленнями, версіями додатків. Зображення сервера можна використовувати для створення серверів у різних середовищах.

Перше середовище, де використовується таке зображення , було б середовищем, де зображення можна перевірити на роботу. Будь-які відхилення виявляються, і лише тоді таке зображення можна перенести у виробниче середовище, щоб замінити там сервери новою версією (яка, як відомо, працює добре).

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

Часто незмінні сервери навіть не включають жодного способу "ввести" їх, наприклад, наприклад, відсутній ssh-сервер. У цьому випадку також часто буває так, що вся метрологія сервера (метрики, журнали) надсилається до систем поза межами, таких як база даних метрик або служба агрегації журналів.

З контейнерами (див. Докер ) також відбувається процес створення зображень, а потім їх нереститься в запущені контейнери. Вони досить часто замінюються новими контейнерами на основі оновлених зображень і ніколи не змінюються. Це означає, що жодна людина не заходить у контейнер, щоб "щось виправити", ввівши зміну.


Цікаве пояснення, може бути , ви хочете , щоб мутувати це дуже небагато, якщо ви можете, і якщо це має сенс докладно зупинятися на чому - то , який я вважаю яким - то чином пов'язаний, тобто, «топити» систему. Я думаю, що ви дозволяєте (більш-менш) комусь «гратися» з чимось, і попереджаєте їх вперед, що (наприклад) щовечора відбувається якийсь перехід до якогось початкового стану. Звучить, що вхід для такого скидання - це ... е-е ... що я збирався сказати ... правильно: така непорушна річ, яку можна використовувати для цього.
Pierre.Vriens

2
Запуск сервісу, який повертає сервер у відомий стан (наприклад, шеф-кухар / лялька / відповідь / тощо), просто означає, що ви не використовуєте незмінний сервер. 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.