DevOps

DevOps (DEVelopment OPeration) девопс

DevOps (DEVelopment OPeration) – это набор практик для повышения эффективности процессов разработки (Development) и эксплуатации (Operation) программного обеспечения (ПО) за счет их непрерывной интеграции и активного взаимодействия профильных специалистов с помощью инструментов автоматизации. Девопс позиционируется как Agile-подход для устранения организационных и временных барьеров между командами разработчиков и других участников жизненного цикла ПО (тестировщиками, администраторами, техподдержкой), чтобы они могли быстрее и надежнее собирать, тестировать и выпускать релизы программных продуктов [1]

История появления

Термин «DevOps» был популяризован серией встреч «DevOps Days», прошедших в 2009 году в Бельгии [2]. Одной из наиболее важных теоретических работ по DevOps считается книга Патрика Дюбуа, Джина Ким, Джеза Хамбл и Джона Уиллис «Руководство по DevOps. Как добиться гибкости, надежности и безопасности мирового уровня в технологических компаниях», впервые опубликованная на английском языке в 2016 году. К этому основателей нескольких софтверных компаний и независимых ИТ-консультантов подтолкнул накопленный опыт работы в крупных проектах [1]

Однако само понятие DevOps зародилось в начале 2000-х годов, когда в ИТ-мире больших корпораций возникла проблема рассогласования рабочих процессов, при которой нормальная работа программного продукта нарушена из-за функционального и организационного разделения тех, кто пишет код, и тех, кто выполняет его развертывание и поддержку. У разработчиков и специалистов по эксплуатации продукта часто бывают разные и даже противоречащие друг другу цели, руководители подразделений и ключевые показатели эффективности. Рабочие места разнопрофильных участников жизненного цикла ПО зачастую располагаются в разных локациях. Такая разрозненность и нарушение коммуникации внутри компании приводит к удлинению сроков решения задач, сверхурочной работе, сорванным релизам и недовольству клиентов [1].

Концепция DevOps предлагает решать эту проблему с помощью приложения принципов Agile не только к разработке и тестированию, но и к процессам эксплуатации ПО, т.е. к развертыванию и поддержке. Таим образом, популярность DevOps возникла, в том числе благодаря распространению Agile-практик, ориентированных на ускорение процессов поставки готового продукта и увеличение количества выпускаемых версий. Кроме того, дополнительным драйвером развития девопс стала микросервисная архитектура, когда система состоит из набора отдельных слабосвязанных модулей, реализация каждого из которых находится в зоне ответственности одного человека, который разрабатывает, тестирует и развертывает ПО. Благодаря небольшому размеру каждого модуля (сервиса), его архитектура может создаваться путем непрерывного рефакторинга, что уменьшает трудоемкость предварительного проектирования и позволяет постоянно выпускать новые релизы программного продукта [2].

DevOps пересечение разработки, эксплуатации и тестирования
Концепция DevOps как пересечение разработки, эксплуатации и тестирования

Процессы и объекты девопс

DevOps, как и другие Agile-практики, ориентирован на командную работу, где рассматриваются все аспекты жизненного цикла ПО, от программного кода до эксплуатации продукта конечным пользователем [2]:

  1. Code (Код) – разработка и анализ, контроль версий и слияния кода;
  2. Build (Сборка) – непрерывная интеграция различных сборок;
  3. Test (Тест) – непрерывное тестирование, обеспечивающее обратную связь по бизнес-рискам;
  4. Operate (Работа с пакетами) – репозиторий артефактов, предварительная установка приложения;
  5. Release (Выпуск) – управление изменениями, официальное утверждение выпуска, автоматизация выпуска;
  6. Deploy (Развертывание конфигурации) – управление инфраструктурой как кодом;
  7. Monitor (Мониторинг) – мониторинг производительности приложений, опыт работы с конечным пользователем.
Процессы DevOps: Development Operations
Процессы DevOps: Development Operations

Цели и задачи DevOps

Поскольку процессы девопс охватывают весь цикл поставки ПО, выделяют несколько основных целей этого подхода [2]:

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

Эти цели достигаются через решение следующих задач:

  • согласование процессов разработки и поставки ПО с эксплуатацией;
  • автоматизация процессов разработки, тестирования и развертывания;
  • непрерывное тестирование качества приложений;
  • управление ИТ-инфраструктурой как кодом;
  • управление изменениями;
  • непрерывный мониторинг производительности приложений и состояния инфраструктуры.

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

Этапы задачи инструменты девопс
Этапы девопс

Главные принципы DevOps

Рассматривая DevOps как масштабирование Agile-подхода на весь процесс разработки, внедрения и сопровождение ПО, можно выделить 5 основных принципов (CALMS) его реализации с целью увеличения частоты релизов и повышения ответственности команды за продукт [1]:

  • Культура (Culture) – кросс-функциональное сотрудничество разнопрофильных специалистов и команд за счет единого информационного пространства проектного контента, открытых каналов коммуникаций и постоянного общения всех участников;
  • Автоматизация (Automatization) – использование инструментов непрерывной поставки с прогоном каждой правки кода через серию автоматизированных тестов, часто использующих облачную инфраструктуру, и последующую упаковку успешных сборок с дальнейшим перемещением на рабочий сервер с помощью автоматизированных развертываний и управления инфраструктурой как кодом через конфигурации саморазвертываемых сред;
  • Бережливость (Lean) – устранение действий с низкой полезностью и ускорение процессов, непрерывное совершенствование через регулярный ретроспективный анализ, раздельное тестирование различных инструментов, принятие поражений, возможности быстрого обнаружения проблем и их незамедлительного решения;
  • Измерения (Measurement) производительности, например, продолжительность работы пользователей с продуктом, частота появления в логах сообщений о критических ошибках – необходимы ясные и четкие критерии оценки работы, показатели эффективности процессов;
  • Обмен (Sharing) – совместная ответственность и разделение успехов, выпуск и обеспечение работы приложения осуществляются теми же людьми, что выполняли его сборку, т.е. разработчики (Developers) и операторы (Operators) взаимодействуют на каждом этапе жизненного цикла приложения.
принципы девопс
CALMS: главные принципы DevOps 

Достоинства девопс

Благодаря стандартизации и автоматизации процессов разработки и внедрения, DevOps дает следующие преимущества в управлении выпуском ПО [2]:

  • события, документированные процессы управления и подробные отчеты легко отслеживать;
  • разработчики имеют больше контроля над средой, предоставляя инфраструктуре более прикладное понимание продукта и процессов его эксплуатации;
  • значительное сокращение времени выхода на рынок за счет «бесшовного» цикла разработки и внедрения;
  • улучшение удовлетворенности клиентов;
  • повышение качества и надежности продукции;
  • увеличение производительности и эффективности;
  • быстрота реагирования и высокая скорость экспериментов;
  • расширение компетенций и ответственности разработчиков – программисты участвуют в настройке серверов и поиске ошибок, пишут автоматизированные тесты, сглаживая возможные инфраструктурные уязвимости в коде. Это сокращает количество ошибок при развертке приложения примерно в 5 раз [3].
Continious DevOps бизнес-процессы
Расширение концепции DevOps на все бизнес-процессы

Критика и недостатки DevOps

При всех достоинствах этого подхода, можно выделить следующие недостатки:

  • Неполнота цикла – за бортом процессов девопс остаются важные этапы жизни ПО, как разработка и анализ требований, а также проектирование архитектуры. Также возможно упущение ручного тестирование, что может быть критично в некоторых случаях [3]. Например, если разработчики недостаточно качественно проанализировали требования и протестировали продукт, рассматривая его с точки зрения «идеального» кода, а не с позиции пользователей, результат может быть неудобным в эксплуатации [4].
  • Недостаточный профессионализм участников, которые разбираются во всем (разработка, тестирование, развертывание, поддержка), но поверхностно.
  • Высокая нагрузка на менеджмент – если у разработчиков и операторов нет общих целей, в этом виноваты менеджеры, не организовавшие эффективное взаимодействие между командами разнопрофильных специалистов. Для решения этой проблемы нужна новая система оценки менеджеров на основе отзывов от подчиненных [3].

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

компоненты
Успех Devops зависит от людей, процессов и технологий

Методы и средства реализации: как работает DevOps

Методологически девопс поддерживает принципы Agile и Continuous delivery – непрерывной поставки ПО. Для организации процессов могут быть использованы такие методы Agile, как Scrum, Kanban и их варианты.

В плане инструментов для автоматизации процессов разработки, тестирования и развертывания используются следующие технологии и популярные средства их реализации:

  • Распределенный контроль версий (Git, Mercurial, Subversion, CVS);
  • Контейнеризация (Docker, Rocket, Kubernetes);
  • Непрерывная интеграция – сборка и тестирование конечного продукта (Jenkins, TeamCity, Bamboo);
  • Управление инфраструктурой как кодом (Puppet, Chef, Ansible);
  • Виртуализация (Vagrant);
  • Балансировка облачных ресурсов (VMware DRS).

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

Поскольку DevOps-инженер совмещает множество профессий (администратора, разработчика, тестировщика и менеджера), то он должен иметь опыт администрирования различных операционных систем и облачных платформ. Также необходимы знания сетевых технологий и умения писать скрипты и код на нескольких языках программирования [5]. Как эти компетенции разделяются с другими участниками Agile-команды, мы рассмотрели здесь.

Devops tools
Инструменты Devops

Кто и где используется DevOps и сколько за это стоит

DevOps может быть полезен практически любой организации, связанной с разработкой приложений или управлением большим количеством серверов. Крупные ИТ-гиганты вовсю нанимают (Amazon, Adobe, Google, Facebook и т.д.) и технологичные предприятия других сфер (Netflix, Walmart, Etsy и пр.) вовсю нанимают DevOps-инженеров. В России девопс также активно используется в банковской (Сбербанк, Альфабанк, Тинькофф-Банк), телекоммуникационной и ИТ-отраслях (Билайн, МТС, Mail.ru, Яндекс).

Мелкий бизнес и стартапы, цель которых – быстрее выпустить на рынок минимально жизнеспособный продукт, чтобы проверить новую идею, пока обходятся без девопс-инженеров. Что обусловлено, помимо организационных и методологических факторов, также и финансовой стороной вопросы: DevOps-инженеры зарабатывают больше всех в отрасли. На июль 2019 года зарплата таких специалистов колеблется в районе $71 тысяча долларов в год за рубежом [6], что составляет около 350 тысяч рублей в месяц, и 130-400 тысяч рублей в месяц в РФ [7].

DevOps - continuous innovation
DevOps — continuous innovation — непрерывное улучшение всех процессов

Источники

  1. https://ru.atlassian.com/devops
  2. https://ru.wikipedia.org/wiki/DevOps
  3. https://vc.ru/hr/50165-chto-takoe-metodologiya-devops-i-komu-ona-nuzhna
  4. https://habr.com/ru/post/349796/
  5. https://habr.com/ru/company/itglobalcom/blog/447742/
  6. https://insights.stackoverflow.com/survey/2019
  7. https://yandex.ru/company/researches/2019/it-jobs

Related Entries