Навіщо потрібний DevOps і хто такі DevOps-фахівці

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

Які практики входять у поняття DevOps та навіщо вони потрібні? Чим займаються DevOps-інженери і що вони мають вміти? На ці та інші питання відповідають експерти з EPAM: Кирило Сергєєв, системний інженер та DevOps-євангеліст, та Ігор Бойко, провідний системний інженер та координатор однієї з DevOps-команд компанії.

Навіщо потрібний DevOps і хто такі DevOps-фахівці

Навіщо потрібний DevOps?

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

Що таке DevOps?

Питання хороше – і спірне: остаточно у світі про це поки що не домовилися. В ЕРАМ вважають, що DevOps поєднує в собі технології, процеси та культуру взаємодії всередині команди. Це об'єднання має на меті безперервну доставку цінностей кінцевим користувачам.

Кирило Сергєєв: «Розробники пишуть код, тестувальники його перевіряють, а адміністратори встановлюють фінальний продукт на виробниче оточення Довгий час ці частини команди були дещо розрізнені, а потім з'явилася ідея об'єднати їх спільним процесом. Так з'явилися DevOps-практики».

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

Навіщо потрібний DevOps і хто такі DevOps-фахівці

У чому полягає суть DevOps-культури?

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

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

Які бувають DevOps-практики?

DevOps-практики покривають усі етапи життєвого циклу ПЗ.

Ігор Бойко: «Ідеальний випадок – коли ми починаємо використовувати DevOps-практики безпосередньо під час ініціації проекту. Разом з архітекторами ми плануємо, який у додатку буде архітектурний ландшафт, де він розташовуватиметься і як масштабуватиметься, вибираємо платформу. Зараз у моді мікросервісна архітектура – ​​для неї ми вибираємо систему оркестрації: потрібно вміти керувати кожним елементом програми окремо та оновлювати її незалежно від інших. Ще одна практика - це "інфраструктура як код". Так називають підхід, при якому інфраструктура проекту створюється та керується за допомогою коду, а не через пряму взаємодію із серверами.

Далі ми переходимо на етап розробки. Тут одна з найбільших практик – побудова CI/CD: потрібно допомогти розробникам інтегрувати зміни в продукт швидко, дрібними порціями, частіше та безболісніше. CI/CD покриває і перевірку коду, і заливання майстра в кодову базу, і розгортання програми на тестових та продуктивних середовищах.

На етапах CI/CD код проходить через quality gates. З їх допомогою перевіряють, щоб код, який вийшов із робочої станції розробника, відповідав заданим критеріям якості. Тут додається юніт- та UI-тестування. Для швидкого, безболісного та фокусованого розгортання продукту можна вибрати відповідний тип деплойменту.

DevOps-практики мають місце і на стадії підтримки готового продукту. Їх застосовують для моніторингу, зворотний зв'язок, безпеки, впровадження змін. На ці завдання DevOps дивиться з погляду постійних поліпшень. Ми зводимо до мінімуму операції, що повторюються, автоматизуємо їх. Сюди ж належать міграції, розширення програми, підтримка працездатності».

Чим корисні DevOps-практики?

Якби ми писали підручник із сучасних практик DevOps, на його першій сторінці значилися б три пункти: автоматизація, прискорення релізу та швидкий зворотний зв'язок від користувачів.

Кирило Сергєєв: «Перше – це автоматизація Усі взаємодії у команді ми можемо автоматизувати: написали код – викотили – перевірили – встановили – зібрали фідбек – повернулися на початок. Все це – автоматично.

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

Третє – це прискорення зворотний зв'язок від користувача. Якщо він має зауваження, ми можемо відразу ж вносити коригування і відразу оновлювати додаток».

Навіщо потрібний DevOps і хто такі DevOps-фахівці

Як співвідносяться поняття «системний інженер», «білд-інженер» та «DevOps-інженер»?

Вони перетинаються, але відносяться до дещо різних сфер.

Системний інженер у ЕРАМ – це посада. Вони бувають різних рівнів: від джуніора до chief-фахівця.

Білд-інженер – це радше роль, яку можна виконувати на проекті. Наразі так називають людей, відповідальних за CI/CD.

DevOps-інженером називають спеціаліста, який запроваджує на проекті DevOps-практики.

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

Чим саме займається DevOps-інженер?

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

Ми багато говорили про автоматизацію – нею DevOps-інженери займаються насамперед. Це дуже великий пункт, до якого, окрім іншого, входить підготовка оточення.

Кирило Сергєєв: «Перш ніж впроваджувати оновлення у продукт, їх потрібно протестувати на сторонньому оточенні. Його готують DevOps-інженери. Вони ж насаджують на проекті DevOps-культуру загалом: впроваджують DevOps-практики на всіх прошарках своїх проектів. Ці три принципи: автоматизація, спрощення, прискорення – вони привносять усюди, куди можуть дістатись».

Що повинен знати DevOps-інженер?

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

1. Мови програмування

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

DevOps-інженер може вивчити одну або кілька з цих мов: Python, Groovy, Bash, Powershell, Ruby, Go. Знати їх на глибинному рівні не потрібно - достатньо основ синтаксису, принципів ОВП, уміння писати нескладні скрипти для автоматизації.

2. Операційні системи

DevOps-інженер повинен розуміти, на якому сервері буде встановлений продукт, в якому середовищі запускатиметься, з якими сервісами взаємодіятиме. Можна вибрати спеціалізацію на Windows або Linux-родині.

3. Системи контролю версій

Без знання системи контролю версій DevOps-інженеру нікуди. Git – одна з найпопулярніших систем зараз.

4. Хмарні провайдери

AWS, Google, Azure – особливо якщо ми говоримо про Windows-напрямок.

Кирило Сергєєв: «Хмарні провайдери надають нам віртуальні сервери, які чудово лягають на рейки CI/CD.

Установка десяти фізичних серверів потребує порядку ста ручних операцій. Кожен сервер потрібно вручну запустити, встановити і налаштувати потрібну операційну систему, встановити наш додаток на цих десяти серверах, а потім десять разів все перевірити ще раз. Хмарні сервіси замінюють цю процедуру на десять рядків коду, і хороший DevOps-інженер повинен вміти ними оперувати. Так він заощаджує час, сили та гроші – і для замовника, і для компанії».

5. Системи оркестрації: Docker та Kubernetes

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

Раніше кожною програмою займався окремий сервер - будь-які зміни в його роботі могли вплинути на справність програми. Завдяки контейнерам додатки стають ізольованими та запускаються окремо – кожен на своїй віртуальній машині. Якщо відбувається збій, не потрібно витрачати час на пошук причини. Простіше знищити старий контейнер і додати новий».

6. Системи конфігурацій: Chef, Ansible, Puppet

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

Яку кар'єру може збудувати DevOps-інженер?

Розвиватись можна і горизонтально, і вертикально.

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

Можна стати системним архітектором, якщо співробітнику цікаво розібратися, як працює програма на всіх етапах свого життєвого циклу – від розробки до підтримки».

Як стати DevOps-інженером?

  1. Прочитайте книги «Проект Фенікс» та DevOps Handbook. Це справжні стовпи філософії DevOps, причому перша – художній роман.
  2. Вивчайте технології зі списку вище: самостійно чи на онлайн-курсах.
  3. Приєднайтесь як DevOps-інженер на опенсорс-проект.
  4. Практикуйте та пропонуйте DevOps-практики на своїх особистих та робочих проектах.

Джерело: habr.com

Додати коментар або відгук