Наталья Габрух 20 февраля 2021

∞ Основы методологии DevOps

Раскладываем методологию DevOps по полочкам. Анализируем преимущества и недостатки, вспоминаем основополагающие принципы, идеи, культуру и историю развития DevOps.
∞ Основы методологии DevOps

Что было до DevOps

DevOps (англ. development and operations) – набор практик, который направлен на сокращение жизненного цикла разработки систем и обеспечение непрерывной поставки программного обеспечения высокого качества. Взаимодействие разработчиков и специалистов по информационно-технологическому обслуживанию, а также взаимная интеграция их рабочих процессов, позволяет создавать качественные продукты в короткие сроки.

Разработка (development) и эксплуатация (operations) продолжительное время были изолированными модулями. Код писали программисты, а системные администраторы отвечали за его развертывание и интеграцию. В рамках одного проекта специалисты работали отдельно, поскольку связь между двумя разрозненными хранилищами была ограничена.

Этот метод работал с 1970 года, пока доминировала каскадная модель процесса разработки программного обеспечения, известная как Waterfall. Методика предполагала последовательный переход между этапами без пропусков и возвращений на предыдущие стадии.

Схема методологии Waterfall
Схема методологии Waterfall

Со временем Waterfall была раскритикована за недостаточную гибкость, а ее основная цель – формальное управление проектом, приносила ущерб срокам, стоимости и качеству.

Команды нуждались в гибкости во время разработки программного обеспечения. Необходимость реализации проекта в форме коротких "спринтов" и выпуска более частых (от двух недель, до двух дней) релизов потребовали нового подхода.

В 2001 году на смену Waterfall пришла гибкая методология разработки или Agile. Она включает ряд подходов и практик, основанных на четырех ценностях и 12 принципах «Манифеста гибкой разработки программного обеспечения». Сюда также относят SCRUM, Kanban, Lean, Feature-driven development (FDD) и другие сходные подходы.

Agile применяется к организации работы небольших групп, которые создают продукт короткими итерациями (от двух до четырех недель). Каждая итерация выглядит как программный проект, который включает все типовые задачи: планирование, анализ требований, проектирование, программирование, тестирование, документирование. В конце итерации заказчик получает рабочий продукт.

Схема подхода Agile
Схема подхода Agile

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

Идея и культура DevOps

Методология DevOps получила широкое распространение после организованной бельгийским разработчиком Патриком Дебуа в 2009 году конференции DevOpsDays.
Главная идея DevOps заключается в том, чтобы устранить перекладывание ответственности на других членов команды в больших коллективах. Взаимозависимость между созданием и эксплуатацией программного обеспечения преследовала цель привить команде новую культуру разработки продукта.

Культура DevOps предполагает, что каждый из членов команды ответственен за конечный результат. Базируется она на нескольких основных положениях:

  • Регулярное сотрудничество и общение. Команда должна работать слаженно, понимать потребности и ожидания всех ее членов.
  • Постепенное развертывание. Внедрение постепенного развертывания позволяет группам доставки выпускать продукт, имея возможность вносить обновления и делать откат, если что-то пойдет не так.
  • Общая ответственность. Все члены команды должны двигаться к единой цели и отвечать за проект в равной степени.
  • Решение проблем на ранних этапах. Методология DevOps требует, чтобы в жизненном цикле проекта задачи выполнялись как можно быстрее. Это помогает оперативно решать возникшие проблемы.

Принципы DevOps

В 2010 году Дэймоном Эдвардсом и Джоном Уиллисом была разработана модель CAMS, ключевые идеи которой стали принципами DevOps. Согласно ей, развитие DevOps идет в трех направлениях: люди, процессы и инструменты. При этом важна поддержка каждого пункта на всех этапах развития.

Аббревиатура CAMS расшифровывается следующим образом:

  • культура (culture);
  • автоматизация (automation);
  • измерение (measurement);
  • обмен (sharing).
Схема модели CAMS
Схема модели CAMS

Культура

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

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

Автоматизация

Следуя пути DevOps, код требуется переводить из стадии разработки в производство непрерывно в автоматическом режиме, поэтому автоматизацию можно считать синонимом DevOps.

В идеале автоматизировать нужно почти все:

  • инфраструктуру;
  • выпуски программного обеспечения (software releases);
  • тестирование;
  • развертывание;
  • основные задачи по безопасности;
  • политику соглашений;
  • задачи управления конфигурацией.

Автоматизация упрощает рабочие процессы, сокращает количество сбоев и откатов, уменьшает количество ошибок, которые возникают при ручной настройке. Повышение эффективности, улучшение производительности и польза для конечного потребителя – главные преимущества автоматизации.

Измерение

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

Измерять нужно показатели следующих процессов:

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

DevOps способствует развитию только в том случае, если конкретные показатели собираются и анализируются непрерывно.

Обмен

DevOps подразумевает тесное сотрудничество специалистов по разработке и эксплуатации. Большое внимание уделяется прозрачности и открытости в коллективе. Чем больше знаний распространяется между сотрудниками, тем больше обратной связи они получают – это помогает улучшить их работу в целом.

DevOps и Agile

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

По сути DevOps объединяет две разрозненные команды (разработку и эксплуатацию), чтобы обеспечить быстрые выпуски программного обеспечения. Agile ориентирован на сотрудничество небольших команд друг с другом для быстрого реагирования на изменчивые потребности пользователей.

Основные различия между DevOps и Agile:

  • Разработка, тестирование и развертывание программного обеспечения происходят как в DevOps, так и в Agile. Подход Agile характерен тем, что разработка завершается сразу после развертывания. DevOps же включает операции, которые происходят постоянно, например, мониторинг и модификации программного обеспечения;
  • В Agile разные специалисты несут ответственность за разработку, тестирование и развертывание программного обеспечения. В DevOps за все эти процессы отвечают специально обученные инженеры;
  • Agile выступает за поэтапное развертывание после каждого спринта. Для DevOps характерна непрерывная доставка (до нескольких раз в день).

Жизненный цикл DevOps

Выделим основные этапы проекта, следующего принципам DevOps:

  1. Непрерывное развитие;
  2. Непрерывная интеграция;
  3. Непрерывное тестирование;
  4. Непрерывное развертывание;
  5. Непрерывный мониторинг;
  6. Постоянная обратная связь.
Схема жизненного цикла DevOps
Схема жизненного цикла DevOps

Эти этапы гарантируют оптимизацию всех процессов разработки, от предложения до производства и поставки.

Непрерывное развитие

На первом этапе происходит планирование и кодирование программного обеспечения, а также формируется видение проекта.

Код может быть написан на любом языке, но поддерживается с помощью средств контроля версий. Процесс поддержки называется управлением исходным кодом (SCM). В нем используются следующие инструменты: Git, SVN, Mercurial, CVS и JIRA.

Непрерывная интеграция

На этом этапе чаще всего применяется Jenkins. Когда в репозитории Git происходят изменения, Jenkins извлекает обновленный код и готовит сборку. Упакованный код переходит к следующему этапу и пересылается либо на рабочий, либо на тестовый сервер.

Этап включает в себя не только компиляцию кода, но и проверку, модульное тестирование, интеграционное тестирование и упаковку. Непрерывная интеграция нового кода в существующий исходный код помогает отразить изменения для конечных пользователей.

Непрерывное тестирование

На этапе непрерывного тестирования разрабатываемое программное обеспечение проверяется на наличие ошибок. Автоматическое тестирование позволяет разработчикам экономить силы и время.

Для непрерывного тестирования используются следующие инструменты: Selenium, TestNG, JUnit и т.д. Они позволяют инженерам QA тестировать несколько баз кода параллельно, чтобы гарантировать отсутствие недостатков в функциональности. При этом тестируемое приложение часто запускается в виртуальной среде или контейнерах, например, с помощью Docker.

Автоматическое тестирование выполняет Selenium, а отчеты генерирует TestNG. Весь этап можно автоматизировать с помощью инструмента непрерывной интеграции Jenkins. В конце, протестированный код повторно отправляется на этап непрерывной интеграции для обновления исходного кода.

Непрерывное развертывание

Когда код развертывается на производственных серверах, важно получить корректный результат на всех серверах.

Управление конфигурацией – ключевой процесс на этом этапе. Он обеспечивает точное развертывание приложения и поддерживает согласованность конфигураций на всех серверах.

Ansible, Puppet и Chef – инструменты, которые чаще всего используются в DevOps для быстрого и непрерывного развертывания нового кода.

Не менее важную роль на данном этапе играют инструменты контейнеризации. Vagrant и Docker обеспечивают согласованность в различных средах – от разработки и тестирования, до подготовки и производства.

Непрерывный мониторинг

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

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

Активное участие в непрерывном мониторинге принимают операционные группы. Они наблюдают за действиями пользователей, проверяют системы на предмет необычного поведения и отслеживают наличие ошибок.

Для этого используются следующие популярные инструменты: Prometheus, Splunk, ELK Stack, Nagios и другие. Они обеспечивают полный контроль над производительностью системы, рабочего сервера и приложения.

Постоянная обратная связь

Непрерывная обратная связь – особый этап, на котором анализируются улучшения, сделанные на этапах непрерывного тестирования и непрерывной интеграции.

Чтобы оценить результаты изменений в конечном продукте, необходимо получить обратную связь от клиентов. Процесс разработки приложения обновляется с учетом их отзывов – после этого разработчики начинают вносить изменения в продукт. Когда отзывы становятся положительными, открывается путь для выпуска новых версий, либо для поддержки приложения.

Преимущества и недостатки методологии

Преимущества DevOps:

  • Повышение конкурентоспособности бизнеса за счет быстрой доставки приложения конечному потребителю.
  • Стандартизация и автоматизация процессов в DevOps помогает команде сосредоточиться на основных задачах и не тратить время на тестирование и исправление ошибок.
  • Быстрое тестирование и развертывание позволяет увеличить частоту выпуска приложений.
  • Оперативное повышение качества продукции и уменьшение времени реагирования на возникшие ошибки.
  • Невозможность перекладывания ответственности, поскольку каждый из членов команды отвечает за общий результат.

Недостатки DevOps:

  • Специалисты DevOps должны разбираться в разработке, тестировании, развертывании и поддержке, но эти знания могут быть поверхностными.
  • DevOps – рабочая культура, которую нельзя реализовать, просто следуя жизненному циклу разработки программного обеспечения. Чтобы компания могла влиться в среду DevOps, ей необходимо постоянно соблюдать основные принципы методологии и стремиться к изменениям.
  • Нанять высококвалифицированного инженера DevOps непросто. Эта специализация требует большого набора навыков, опыта и знания широкого стека технологий, поэтому требования достаточно высоки. Кроме того, DevOps – одни из самых высокооплачиваемых специалистов в IТ.

Комментарии

ВАКАНСИИ

Добавить вакансию
Разработчик C++
Москва, по итогам собеседования

ЛУЧШИЕ СТАТЬИ ПО ТЕМЕ