DevOps набуває все більшої популярності як метод розробки та впровадження програмного забезпечення, що, своєю чергою, зумовлює зростання попиту на фахівців у цій галузі.
У цій статті ми розглянемо низку поширених запитань, які можуть виникнути на співбесіді щодо DevOps, та запропонуємо варіанти відповідей. Використовуючи ці питання як основу для підготовки, ви можете підвищити свої шанси на успішне проходження співбесіди. Якщо ж ви є рекрутером, ці матеріали допоможуть вам у процесі відбору кандидатів.
Поширені запитання на співбесіді щодо DevOps та можливі відповіді
Що для вас означає DevOps?
DevOps – це методологічний підхід, націлений на оптимізацію робочого процесу протягом усього циклу розробки програмного забезпечення. Цей процес часто зображують як безперервний цикл, що включає такі етапи: планування, написання коду, збірка, тестування, випуск, розгортання, експлуатація та моніторинг.
DevOps впливає на кожну фазу життєвого циклу програми: від етапу планування до розробки, доставки та експлуатації. Усі ці фази взаємозалежні, і жодна з них не є закріплена за певною роллю. У середовищі, де справді практикують DevOps, кожен учасник процесу певною мірою долучається до кожного з етапів.
Чому DevOps є важливим?
Команди, які використовують DevOps, як правило, завершують проєкти швидше. Такий підхід допомагає уникнути непорозумінь і сприяє оперативному внесенню необхідних покращень та змін. DevOps заохочує тісну взаємодію між командами розробників та операційників, оскільки їхні цілі стають більш узгодженими. Серед основних переваг DevOps можна виділити:
- Покращення комунікації
- Підвищення командної роботи та згуртованості
- Поглиблення співпраці
- Прискорення випуску якісних продуктів
- Зменшення складності та оперативне вирішення проблем
- Розширені можливості масштабування та гнучкість при додаванні нового коду
- Більш стабільне робоче середовище
- Підвищена автоматизація процесів
- Зниження витрат та більш ефективне використання ресурсів
- Посилення безпеки завдяки інтегрованим інструментам автоматизації
Які щоденні обов’язки спеціаліста DevOps?
Серед щоденних задач, які ви можете згадати, є:
- Забезпечення безперервної інтеграції та розгортання
- Постановка задач та відстеження їх виконання
- Розробка та впровадження протоколів тестування
- Моніторинг та аналіз показників інфраструктури та додатків
- Аналіз результатів на кожному етапі розробки
- Зменшення кількості помилок та часу на їх відновлення
- Скорочення часу доставки продукту
Як DevOps допомагає розробникам?
При впровадженні методології DevOps, розробникам більше не потрібно очікувати на зворотний зв’язок від операційної команди для виправлення помилок у коді. Тепер вони можуть вирішувати ці проблеми швидше, оскільки отримують оперативний відгук про свій код.
Що таке контроль версій?
Контроль версій – це практика відстеження змін, які вносяться до файлу або набору файлів з часом, що дозволяє в подальшому повернутися до певних версій. Інструмент контролю версій дозволяє нам легко відстежувати хід розробки та зберігати різні версії вихідного коду, щоб мати змогу повернутися до попередньої, якщо це буде потрібно. Git є одним з найпоширеніших інструментів на цьому етапі розробки програмного забезпечення.
Що таке CI/CD і які його переваги?
Безперервна інтеграція (CI)
CI об’єднує інструменти та практики, які спрощують створення високоякісного та швидкопрацюючого програмного забезпечення. Таким чином, усуваються вузькі місця і запобігаються технічні проблеми на етапах запуску.
Безперервна доставка (CD)
Ця практика автоматизує доставку змін коду, забезпечуючи швидке впровадження коду у виробництво та належну роботу програм.
Безперервне розгортання (CD)
На відміну від безперервної доставки, метою цієї практики є відсутність ручного втручання при розгортанні програмного забезпечення у виробництво. Публікація нового або зміненого коду в робочій версії відбувається автоматично.
CI/CD впроваджує принципи DevOps протягом усього життєвого циклу програми. Ці методи допомагають підвищити продуктивність на різних етапах розробки програмного забезпечення шляхом їх оптимізації та автоматизації.
Що таке безперервний моніторинг?
Безперервний моніторинг — це практика DevOps, яка передбачає відстеження, оповіщення та вжиття заходів щодо коду та інфраструктури. Таким чином, проблема, яка може виникнути під час впровадження, швидко виявляється та ідентифікується, скорочуючи час на її вирішення.
Чому безперервне тестування важливе?
Безперервне тестування автоматизує тести на ранній стадії, поступово та відповідним чином у процесі розробки. Це важливо, оскільки дозволяє забезпечити якість коду. Помилки виявляються на ранній стадії, а зворотний зв’язок щодо коду виконується швидше.
Поясніть кілька типів тестів, які використовуються в DevOps.
Модульні тести
Вони тестують певний фрагмент коду окремо. Модульні тести не повинні підключатися до бази даних, використовувати файлову систему, спілкуватися із зовнішніми системами або взаємодіяти з іншими компонентами системи. Це дозволяє їм працювати швидко, і ви отримуєте оперативний відгук, якщо зміни порушили наявні функції.
Тести компонентів
Вони перевіряють великі групи функцій, щоб виявити схожі проблеми. Зазвичай вони повільніші, вимагають складнішої конфігурації та більшої кількості вводів/виводів при підключенні до бази даних, файлової системи чи інших систем.
Тести розгортання
Такі тести перевіряють, чи розгортання відбулося успішно, тобто чи правильно встановлено та налаштовано програму, чи має вона доступ до необхідних сервісів та чи відповідає заданим вимогам.
Окрім цього, існують також тести на експлуатацію та зручність використання. Щоб дізнатися більше про тестування, перегляньте статтю про типи тестування програм.
Що таке архітектура мікросервісів і чим вона відрізняється від традиційної архітектури?
Традиційний метод розробки програмного забезпечення є монолітним. Це означає, що всі функції програми зібрані в єдиний блок. У разі виявлення помилки або необхідності оновлення, необхідно аналізувати весь код, що керує продуктом.
Це може призвести до зупинок або навіть збоїв, і створює значний ризик для цілісності коду. Для клієнтів це означає втрати та незручності.
В архітектурі мікросервісів кожна функція програми є незалежно розробленою та інтегрованою службою. Компоненти є окремими, але працюють разом для виконання пов’язаних завдань.
Таким чином, кожна незалежна служба працює без перешкоджання іншим, що також стосується випадків збою. Якщо якась функція виходить з ладу, її можна налагодити, не завдаючи шкоди роботі всієї програми.
Мікросервіси з’явилися, щоб зробити DevOps ще більш гнучким та ефективним, прискорюючи розробку та підвищуючи масштабованість програм.
Що таке інфраструктура як код?
Інфраструктура як код – це підхід до визначення обчислювальної та мережевої інфраструктури, який використовує методи керування вихідним кодом і розглядає інфраструктуру як частину програмного забезпечення.
Цей код може зберігатися в системі управління джерелами, щоб забезпечити прозорість та відтворюваність структури, за умови дотримання практики тестування та принципів безперервної доставки.
Інфраструктура як код базується на кількох практиках:
- Використання файлів визначення
- Самодокументовані системи та процеси
- Контроль версій для всіх елементів
- Постійне тестування систем та процесів
- Внесення невеликих змін замість великих партій
- Забезпечення безперервної доступності послуг
Інструменти автоматизації збірки визначають, як має створюватися програмне забезпечення (які кроки потрібно виконати та в якій послідовності) і які залежності необхідні (яке інше програмне забезпечення має бути встановлено для успішної збірки).
Деякі інструменти краще підходять для проектів на певних мовах програмування, наприклад Maven та Apache’s Ant, які, хоча їх можна використовувати з іншими мовами, частіше застосовуються у проектах Java. Інші інструменти, такі як Hudson або Jenkins, можна використовувати більш широко у різних проектах.
Що таке конвеєр DevOps?
Конвеєр DevOps — це процес, що включає кілька етапів перед випуском нового програмного забезпечення. Він може застосовуватися на всіх етапах проекту, від інтеграції та тестування до доставки та розгортання. Загалом, він проходить наступні етапи та залучає такі команди:
- Бачення продукту: визначення характеристик продукту;
- Команда розробників: ітеративна та поступова розробка;
- Операційна команда: впровадження та підтримка стабільного середовища;
- Моніторинг та зворотний зв’язок: забезпечення цінності та використання продукту клієнтом.
Які різні етапи конвеєра CI/CD?
Кроки, з яких складається конвеєр CI/CD, – це кілька згрупованих завдань, які називаються етапом конвеєра. Коротко кажучи, це:
- Компіляція: етап, на якому відбувається компіляція програми;
- Тестування: етап, на якому тестується код. Тут автоматизація заощаджує час та зусилля;
- Запуск: коли програма відправляється в репозиторій;
- Розгортання: код розгортається у виробничому середовищі;
- Перевірка та відповідність: можна використовувати інструменти перевірки безпеки зображень, такі як Clair, щоб перевірити якість зображень, порівнюючи їх з відомими вразливостями (CVE).
Це найпоширеніші етапи конвеєра DevOps. Однак, кожна компанія має свої специфічні потреби та відповідно конфігурований конвеєр.
Що означає віртуалізація платформи та які її переваги?
Віртуалізація платформи – це імітація цілої комп’ютерної системи для одночасного запуску кількох екземплярів операційних систем на одній фізичній машині.
У цій конфігурації монітор віртуальної машини (VMM) або гіпервізор має повний контроль над апаратними ресурсами фізичної машини. Гостьові операційні системи працюють на віртуальних машинах, якими керує VMM. Віртуалізація середовища передбачає створення однієї або декількох віртуальних машин та мережевих з’єднань між ними.
Віртуалізація допомагає скоротити час на розгортання та зменшити ризики, пов’язані з цим процесом, різними способами. Використання віртуальних машин під час розгортання є значною допомогою у досягненні ефективного вертикального та горизонтального управління конфігураціями систем.
Зокрема, віртуалізація дає такі переваги:
- Швидка реакція на мінливі вимоги
- Консолідація ресурсів
- Стандартизація процесів
- Легкість підтримки базових конфігурацій
Яка різниця між контейнерами та віртуальними машинами?
І контейнери, і віртуальні машини працюють з віртуалізацією та ізоляцією середовищ для забезпечення обробки незалежно від програм. Однак, контейнери створюють ізольоване середовище, де різні програми можуть працювати одночасно, оскільки поділ відбувається на рівні доступних ресурсів, таких як пам’ять та обробка. З іншого боку, віртуальна машина дозволяє фізичній машині розміщувати інші машини з різними операційними системами, жорсткими дисками та апаратним забезпеченням, незалежними від оригінальних.
У чому головна відмінність між Docker та Kubernetes?
Docker є одним із найпоширеніших інструментів контейнеризації DevOps. Він зосереджений на переносності додатків, розміщуючи їх у технологічних контейнерах та забезпечуючи їх переміщення між різними платформами.
Kubernetes, в свою чергу, є інструментом оркестровки контейнерів, який може групувати контейнери за логічною категоризацією. Його можна розгортати на кількох комп’ютерах з автоматичним розподілом.
Дізнайтеся більше про Kubernetes Vs. Docker.
Які метрики телеметрії використовуються в DevOps?
- Бізнес-рівень: наприклад, кількість транзакцій продажу, дохід від транзакцій продажу, реєстрації користувачів, рівень відтоку та результати A/B-тестів.
- Рівень програми: наприклад, час транзакцій, час відповіді користувача та збої програм.
- Рівень інфраструктури: наприклад, трафік веб-сервера, навантаження ЦП та використання диска.
- Рівень клієнтського програмного забезпечення: приклади включають помилки програми, збої та час транзакцій, виміряний користувачем.
- Рівень конвеєра розгортання: приклади включають статус конвеєра збірки (успішний або невдалий для різних наборів автоматизованих тестів), зміну кінцевих термінів розгортання, частоту розгортань, рекламні середовища тестування та їх статус.
Які технології ви використовуєте для DevOps?
Це питання має на меті дізнатися, які технології можна застосовувати для впровадження культури DevOps в організації. Деякі з найпоширеніших технологій, що використовуються в DevOps:
- Постійна розробка: Git, SVN, Mercurial, CVS, Jira
- Безперервна інтеграція: Jenkins, Bamboo, Hudson
- Безперервна доставка: Nexus, Archive, Tomcat
- Безперервне розгортання: Puppet, Chef, Docker
- Безперервний моніторинг: Splunk, ELK Stack, Continuous Nagios
- Тестування: Selenium, Katalon Studio
Розкажіть нам про свій досвід управління проектами DevOps.
Навички DevOps — це не тільки технічні знання, а й навички управління, які часто зустрічаються серед менеджерів, програмних директорів та керівників проектів.
Важливо знати, як керувати змінами та підтримувати їх, створювати шлюз для передачі нових версій коду операційній команді, оцінювати та контролювати різні платформи та інструменти для вимірювання продуктивності, а також аналізувати та поширювати результати для покращення майбутніх поставок. та інше.
Підійдіть до цього питання методологічно та поясніть свій підхід до вирішення складних задач. Як ви плануєте покращити функціонування інфраструктури? Як ви плануєте співпрацювати з розробниками фронтенду, бекенду та проміжного шару? Якими інструментами моніторингу ви володієте? Також можете розповісти про свій досвід розв’язання конфліктів у вашій команді.
Щоб дізнатися більше, ви можете записатися на один із цих курсів DevOps.