Документация Общие сведения Что такое DevOps и зачем он нужен


Что такое DevOps?

DevOps - development & operations - это набор методик и инструментов для объединения процессов разработки, тестирования, доставки релизов программного продукта и аспектов его эксплуатации в единые автоматизированные циклы.
Проще говоря, DevOps сокращает дистанцию между разработчиками, которые пишут код, и системными инженерами, которые доставляют этот код в тестовые и продуктовые окружения.


Зачем нужен DevOps?

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

Как это происходит?

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

Какие еще важные слова мне следует узнать?

Еще одни важные понятия: микросервисы и CI/CD - continuous integration & continuous delivery - непрерывная интеграция/непрерывная доставка.
CI/CD pipeline - это стратегия или алгоритм, описывающий итерацию доставки новой версии кода в окружение.
Самый рядовой пример - разработчик производит коммит в git репозиторий, появление коммита служит триггером для создания новой песочницы с нужным ПО, где производтся тестирование, и по результату тестирования новый код доставляется в продуктовое окружение, создание которого тоже может быть автоматизировано.
То есть, можно говорить, что релиз новой версии приложения происходит по кнопке.
Дальше разработчики смотрят метрики и журналы работы приложения, которые тоже являются органичной частью окружения.

Shut up and take my money! Сколько это стоит?

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

Что такое микросервисы?

Микросервисы - это модульный подход к архитектуре программного продукта, когда компоненты архитектуры представляют из себя компактные сервисы, выполняющие элементарные действия, общаясь между собой с использованием легковесных REST или им подобных протоколов.
Ключевые плюсы микросервисных архитектур:
- отдельные компоненты проще обновлять
- архитектура перестает быть привязанной к единым требованиям, например, компоненты могут быть реализованы на разных языках программирования
- масштабировать микросервисы гораздо проще, чем монолитную архитектуру

Хорошо, я понял, а причем тут хостинг?

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

Так же дело обстоит и с разницей между ручным управлением железным или виртуальным сервером(VDS/VPS) и автоматизированным окружением с большим количеством хостов. Если раньше системный администратор каждому серверу давал название по имени персонажа из греческой мифологии, вручную настраивал ПО, то в масштабах десятков и сотен хостов такой ручной подход уже плохо работает.

В контексте такого сравнения также упоминаются Snowflakes vs Phoenixes - уникальные и неповторимые снежинки и фениксы, которые могут быть воссозданы в их прежнем виде.

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

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

А кто такой DevOps инженер?

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

С DevOps подходами разобрались, а какой DevOps инструментарий существует и для чего?

Расскажем о некоторых.
Gitlab - система хранения исходного кода, которая умеет CI/CD автоматизацию и интеграцию с другим DevOps инструментами.
Jenkins - мощный инструмент для реализации CI/CD процессов.
Terraform - популярный инструмент для деплоя и сопровождения окружений, умеет подключения к облачным провайдерам, использует собственный декларативный язык HCL.
Ansible - мощная система централизованного управления конфигурациями серверов, умеет подключаться к облачным хостинг-провайдерам, достаточно легко осваивается, использует синтаксис YAML и Jinja2.
Docker - популярный инструмент для создания и запуска Linux контейнеров, который позволяет обеспечить одинаковую работу контейнеров и на локальном хосте, и в облачном окружении.
Kubernetes - мощная система для оркестрации контейнеров.
Все перечисленные инструменты вы можете установить на нашем хостинге в 1 клик, используя шаблоны окружений, и автоматизировать с их помощью процессы разработки, деплоя и эксплуатации вашего продукта.