Контейнери і віртуалізація: швидше, надійніше

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

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

Саме тому, коли наша компанія тільки починала працювати над продуктом, який називається сьогодні Virtuozzo, ми вибрали напрямок, який називають сьогодні «Контейнерами ОС» або «Легкими ВМ». В чому різниця? А різниця в тому, що наші легені ВМ не вимагали і не вимагають запуску окремого ядра для кожної «сутності», що працює на сервері. Замість цього ми беремо готове ядро Linux і пропонуємо йому розділити всі ресурси між різними користувачами. Мова, звичайно, йшла не зовсім про стандартному дистрибутиві Linux, а про модифікованої версії, яка могла ізолювати користувачів між собою, надаючи їм доступ, наприклад, тільки до окремих частин дерева процесів, до окремих мережним адаптерам і так далі. Все це було дуже затребуване, так як працювала в десятки разів швидше, ніж повна віртуалізація.

Але а користувач фактично отримував свій ізольований дистрибутив Linux: при доступі через SSH він бачить певні ресурси, дозволені процеси і не може впливати на інших користувачів. Саме так і склалася модель надання віртуального хостингу на базі контейнерів ОС (або «Легких ВМ») – максимум ефективності при мінімальному навантаженні на сервери.

Прогрес неминучий
З тих пір, як перша версія Virtuozzo була представлена в далекому 1999 році, пройшло багато часу, за яке технології віртуалізації – як контейнерної, так і повної – зазнали серйозні зміни, і намітилися основні вектори пошуку «Святого Грааля» — оптимального за своїми характеристиками рішення для сучасних cloud-native завдань.

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

Що ж, за це час засоби віртуалізації, що дозволяють запускати повні версії гостьових ОС, сильно зробили крок вперед, що, зокрема, видно на продукти VMware. Завдяки тому, що сучасні процесори підтримують ряд оптимізацій для роботи з віртуальними середовищами, кількість процесів, які доводиться емулювати, набагато зменшилася. В результаті гостьове ядро все частіше звертається безпосередньо до обладнання і лише на вимогу запити проходять через гіпервізор.
image
Навіщо емулювати найпростіші інструкції? Наприклад, арифметика або переміщення байтів можуть виконуватися процесором безпосередньо. Те ж саме можна сказати і про функцію ret (повернення результату виконання процедури). Завдяки тому, що за даними не потрібно кожен раз звертатися до гіпервізору, віртуальні середовища стали працювати швидше. І сьогодні виробники процесорів продовжують додавати віртуальний контекст у свої продукти, роблячи системи віртуалізації ще ефективніше.
image
Контейнерні технології теж ставали все досконалішими. Наприклад, у нашій власній версії Virtuozzo Linux була реалізована технологія ReadyKernel, яка дозволяє встановлювати оновлення безпеки без перезавантаження сервісів, а значить – робити це в будь-який час, в тому числі, моментально після їх представлення. Або інший приклад – шифрування дисків контейнерів, щоб уникнути можливості крадіжки даних, коли «Легка ВМ» знаходиться в неактивному стані. Так що поки кошти повної віртуалізації ставали швидше, їх альтернатива у вигляді контейнерів ОС ставала більш захищеною.

Паравиртуализация
image
З іншого боку, самі виробники операційних систем стали допомагати в здійсненні віртуальних ініціатив. Сьогодні і Linux і Windows є паравиртуализированными системами. Це означає, що, працюючи в гостьовому режимі, ОС «свідомо» звертаються не до реального обладнання, а до гіпервізору. Таким чином, вони можуть один раз заявити гіпервізору про серії привілейованих операцій і заощадити масу часу, який раніше йшло на емуляцію. Зокрема, управління пам'яттю і робота з системами введення/виводу стали на порядок краще і швидше, адже фактично із системи був виключений шар «віртуального заліза».

Проксіювання
image
Інша цікава технологія, яка сьогодні тільки набирає обертів і може дати великий поштовх у розвитку саме «Легких ВМ» — це проксіювання. Першими про даному рішенні заявили в компанії Apporeto. Розробники запропонували таку ідею: вони проаналізували базу даних вразливостей і зробили висновок, що уразливості в файлових системах і мережевому стеку знаходять всього 1-2 рази в рік. Але в інтерфейсній частині це відбувається набагато частіше. В результаті було запропоновано використовувати всім клієнтам один і той же шар роботи з мережею, файлами та іншими «глибокими» сервісами ОС, але при цьому винести в гостьові системи все, що пов'язано з інтерфейсами. Таким чином, навіть якщо зловмисник зможе використовувати свіжу вразливість, він не зможе пробратися далі конкретної «Легкої ВМ». На даний момент для реалізації підходу необхідно використовувати спеціальний дистрибутив Linux, але враховуючи перспективність підходу, незабаром ми побачимо реалізацію цього принципу в більшості стандартних дистрибутивів.

З прицілом на програми
Втім, переможний хід Docker визначило ще один дуже цікавий тренд: багатьом хочеться запускати готові микросервисы – окремі додатки. І затівати для цього цілу віртуальну машину, начебто, не має сенсу. У цьому випадку можна надати власнику можливість вибирати, які функції доступні з додатком. І цей підхід став дуже популярний за браком інших готових рішень. Але він підходить тільки для тих додатків, яким не потрібно багато функцій. В іншому випадку доводиться чимось жертвувати, а це – не цікаво.
image
Замість цього стали з'являтися можливості запустити додаток в гипервизоре без ядра, але забезпечити його потрібними бібліотеками. Такі рішення називаються Unikernel. Вони включають в себе модифіковані системні бібліотеки, які спочатку знають, що працюють в гипервизоре. Для гіпервізора гостьова ОС являє собою 1 процес. Так яка різниця? Чому не запустити у вигляді 1 цього процесу наше додаток?

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

Перспективи
Підводячи підсумок сказаному вище, ми хочемо висловити свою впевненість у тому, що технології віртуалізації будуть розвиватися по обох напрямках, поглиблюючи спеціалізацію для вирішення різних завдань. Все більш глибока паравиртуализация і нові методи проксі серверів забезпечать більш високу продуктивність і ефективність використання ресурсів гостьовими ОС в гипервизоре, а додатковий захист «легких ВМ» зробить їх ще більш привабливими для хостерів і корпоративних середовищ. Таким чином, повноцінна віртуальна екосистема вже найближчим часом повинна буде підтримувати і готові гостьові ВМ, і «легкі ВМ», і готові додатки у вигляді Unikernel або Docker-контейнерів.
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.