Журнал / польза

Что такое DevOps и зачем он нужен разработчикам

Введение в методологию и советы по тому, как начать её применять.

DevOps позволяет существенно ускорить процессы разработки и снизить их стоимость, а также оптимизировать все процессы от проектирования до поддержки работающего продукта. Алексей Шарапов, Head of DevOps в компании ЦРПТ и автор курса «DevOps для эксплуатации и разработки» в Яндекс.Практикуме, рассказал, в чем суть этой методологии и зачем ее изучать. 

Что такое DevOps

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

Термин DevOps — это комбинация слов «разработка» (development) и «эксплуатация» (operations), которая отражает процесс интеграции этих дисциплин в единый непрерывный процесс. Разработчики и тестировщики отвечают за Development, а администраторы — за Operations. 

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

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

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

Одна из практик DevOps — непрерывная интеграция и доставка (Continuous integration и Continuous delivery или CI/CD) — это методы, которые автоматизируют процесс выпуска программного обеспечения, начиная от сборки и вплоть до развертывания. CI/CD помогает свести к минимуму ошибки, повысить темпы сборки и качество разрабатываемого продукта за счет автоматизации. 

Netflix — отличный пример того, как культура DevOps помогла подняться в топ технологических компаний. Сейчас сервис внедряет инновации с невероятно быстрой скоростью, потому что разработчики не ставят на первое место время безотказной работы: в стриминге нулевое время простоя не так важно, как в здравоохранении или банковской сфере. Кроме того, компания разработала инструмент Chaos Monkey, который случайным образом «убивает» процессы или серверы. Это нужно чтобы убедиться, что сервис переживет критическую ситуацию без неудобств для клиента. 

Что DevOps дает команде

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

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

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

Повышенная надежность и безопасность приложений. Среди DevOps-инструментов есть те, которые анализируют исходный код программного обеспечения, чтобы определить, есть ли в нем недостатки безопасности. Еще есть приложение, которое сканирование сервисы на наличие в них уязвимостей — OWASP (Open Web Application Security Project). 

Как внедрить DevOps в свою работу

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

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

Читайте статьи о DevOps. Много полезного можно найти на Хабре — вот несколько примеров: 

— «Зачем нужен DevOps и кто такие DevOps-специалисты»,

— «DevOps — что это, зачем, и насколько востребовано?»,

— «Путь (Microsoft) DevOps».

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

На курсе «DevOps для эксплуатации и разработки» студенты изучают инструменты DevOps-стека, которые можно использовать в ежедневной работе разработчика или тестировщика. Он будет полезен всем от джуна до тимлида, а также тестировщикам и системным администраторами, которые хотят изменить область применения своих знаний.

Что необходимо для начального уровня DevOps-разработки:

— владеть скилами разработки на распространённых языках, например, Python или Go

— понимать работу инструментов и оркестрации Kubernetes OpenShift, чтобы запускать приложения в облачной инфраструктуре

— использовать Docker для автоматизации развертывания и управлениями приложениями

— использовать Vagrant для автоматизации локальной разработки. знать Ansible, чтобы понимать, что вообще происходит :)

— базово понимать Linux-системы

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

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

Хорошее понимание процессов, через которые проходит код, позволяет его оптимизировать.

DevOps — это инженер, который следит, чтобы код собирался быстро и не было отказов. Также он строит вокруг всего этого правильную инфраструктуру, например, прописывает, откуда берутся артефакты и куда уходят docker images. Еще DevOps пишет правила деплоя в Kubernetes. В общем, он делает работу более гибкой, быстрой и удобной. 

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

Что почитать и посмотреть 

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

DevOps-решения: ускорить запуск продуктов и сэкономить. Можно узнать про подходы и инструменты, которые уже проверили на себе крупные стартапы и компании. 

Джин Ким, Патрик Дебуа, Джон Уиллис и Джез Хамбл «Руководство по DevOps». Книга рассказывает о трех путях DevOps: принципе потока, принципе обратной связи и принципе непрерывного обучения. Она дает базовое понимание о методологии с помощью структурированной информации и практических примеров. 

Джон Арундел и Джастин Домингус «Kubernetes для DevOps». В ней рассказывается о работе Kubernetes — одном из основных DevOps-инструментов, а также о проверенных решениях повседневных проблем. К концу книги можно создать свое облачно-ориентированное приложение и инфраструктуру для его поддержки. 

Марко Лукша «Kubernetes в действии». Это книга-проводник, которая учит использовать Kubernetes для развертывания распределенных контейнеризированных приложений. Она рассчитана на новичков и помогает разобраться с такими принципами работы контейнеров, как мониторинг, настройка и масштабирование.