DevOps: задачи и инструменты


Автор
Антон
Антон
DevOps-инженер

Development Operations (от англ. development – разработка и operations — эксплуатация) — методология, сочетающая принципы продуктивной разработки IT-решений. Этот подход, описанный в 2009 году, известен многим разработчикам, но на российском рынке еще не получил всеобщего признания. Рассмотрим на примере практики SimbirSoft, в чем роль DevOps-инженера и с какими технологиями он работает.

DevOps-инженер — кто это?

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


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


Задачи DevOps:

  • Доставка кода до стендов, или перенос написанного разработчиком кода на сервера.
  • Обеспечение работоспособности инфраструктуры. DevOps-инженер определяет требования к инфраструктуре, формирует ее, например, заказывает необходимые мощности, если система размещена на облаке. При этом хорошая практика — руководствоваться в своей работе необходимым минимумом:

- минимально необходимые права, чтобы сократить влияние человеческого фактора и риски в области безопасности;

- минимально необходимая инфраструктура для оптимизации расходов.


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

  • Мониторинг и исследование проблем производительности. Для устранения любых сбоев важно их локализовать, и для этого необходима централизованная система мониторинга с дашбордами. Например, зная динамику заполнения жесткого диска, мы можем определить, что место скоро закончится и пора принимать меры, чтобы предотвратить проблемы.
  • Создание и поддержка окружений. Мы в своей практике, как правило, создаем окружения для разработки, тестирования, препрода и продакшна — с последним из них взаимодействуют непосредственно пользователи системы (подробнее об этом мы рассказывали ранее).
  • Автоматизация рутинных процессов. Это широкий спектр задач DevOps: от установки автотестов до настройки непрерывной интеграции и доставки кода на стенды — CI/CD, или Continuous Integration/Continuous Delivery.

Процессы CI/CD включают в себя:


- постоянное слияние рабочей копии в общую основную версию разработки;

- выполнение автоматизированных сборок проекта для скорейшего выявления потенциальных дефектов;

- решение интеграционных проблем.


Таким образом, мы программируем процесс деплоя — перемещения кода на сервер.

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

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

  • автоматизация рутинных процессов и минимизация человеческого фактора;

  • сокращение Тime-to-market;

  • снижение частоты отказов новых релизов.

Наши выводы подтверждает статистика. Так, согласно исследованию Gitlab, DevOps вносит положительные изменения во все процессы создания продукта, например:


Разработка. Почти 83% разработчиков говорят, что после внедрения DevOps релизы происходят быстрее, чем раньше, а 25% отметили 10-кратное увеличение скорости;


Тестирование. 35% участников исследования, использующих DevOps, автоматизировали задачи в значительной степени.

Ключевые подходы в DevOps

1) Новая парадигма администрирования


Многие компании постепенно уходят от старой парадигмы администрирования серверов — ручного деплоя, который, как правило, применяли в работе с монолитными приложениями. При этом системные администраторы вручную устанавливали приложения на сервера: настраивали «железо», самостоятельно отправляли в продакшн готовые проекты и т.д. Такой подход называют Pet, проводя аналогию с обслуживанием домашних питомцев: если их немного, то владелец обычно сам отвозит их в ветеринарную клинику для всех процедур.


DevOps зачастую следует другой парадигме — Cattle, или большое поголовье животных, подобранных для решения определенных задач. Рассмотрим на примере участия лошадей в состязании, в котором нужна высокая скорость. Используя подход «домашнее животное», мы купим новый корм или подковы, чтобы «улучшить» питомца. Однако, используя другой подход, мы будем рассматривать коня как рабочую единицу, которая не отвечает заявленным характеристикам и требует замены. Если применить этот пример к администрированию, в некоторых ситуациях вам выгоднее развернуть новый сервер, а не тратить время на модернизацию старого.


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


Пример: вам нужно заменить путь до того или иного файла сразу на 100 серверах. Для того чтобы сделать это вручную, системному администратору пришлось бы создавать bash-скрипт — файл, в котором прописывают алгоритм команд и программу, выполняющую его. Однако, сейчас мы просто зайдем в репозиторий для хранения данных, изменим там код и развернем его всего в несколько кликов.


2) Logging & Monitoring

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


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


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


Говоря простыми словами, если бы программа была тюрьмой, тогда мониторинг стал бы сигнализацией, а логирование — системой видеонаблюдения. Первая помогает вовремя отреагировать, а вторая — восстановить ход событий, найти причины и внести необходимые изменения.


Технологический стек

В числе популярных инструментов для логирования — ELK stack, Graylog, Splunk. Мы в качестве централизованной системы сбора логов используем ELK stack: Elasticsearch, Logstash и Kibana — для визуализации собранных данных и упрощения их анализа. Также этот стек позволяет настроить алерты (уведомления), которые будут срабатывать при определенном триггере (событии). Например, если сайт недоступен в течение 1 минуты, то система направляет алерт специалисту в заранее выбранный мессенджер.


Для мониторинга используют такие сервисы, как Zabbix, Cacti, Prometheus. Мы в своей работе чаще используем Prometheus — это экосистема, которая включает в себя и другие вспомогательные инструменты, в том числе Alertmanager. Приложение может отправлять уведомления на различные платформы, в частности, в мессенджеры. Таким образом, при выходе собранных метрик за заданные рамки мы оперативно получаем сообщение.


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


Grafana.png

Grafana.png

Grafana

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


3) Clouds, Terraform

Использование облачных серверов позволяет быстро развернуть инфраструктуру проекта, а также обеспечить отказоустойчивость. Так, мы можем заказать серверы в дата-центрах Москвы, Санкт-Петербурга, Новосибирска и других городов. В случае поломки нам не нужно будет срочно искать ее причину, поскольку ответственность за оказание услуги несут специалисты дата-центра: они сами подключат другой сервер или устранят неполадки.


В числе провайдеров можно отметить как мировых гигантов: Google, Amazon и др., так и российские компании: Yandex.Cloud, Selectel Cloud Platform и т.д.


Мы используем Terraform для управления облачной инфраструктурой. Этот инструмент позволяет работать в парадигме Infrastructure as Code. При этом необходимо описать конечный результат, к которому мы хотим привести наш виртуальный сервер, в виде привычного для специалистов языка — кода. Далее Terraform обращается к API облачного провайдера и совершает заданные действия. В итоге инфраструктура разворачивается в короткие сроки, всего за 15-20 минут. Когда нам нужно будет внести изменения, достаточно будет исправить только необходимые фрагменты кода, при этом результат увидит вся команда.


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


Приглашаем узнать подробности о работе наших DevOps-инженеров и услугах технической поддержки!


Почувствуйте наш подход и повторите
успех наших клиентов

Напишите нам
ЕЛЕНА ДОДОНОВА
ЕЛЕНА ДОДОНОВА
МАКСИМ БЕЛЯКОВ
МАКСИМ БЕЛЯКОВ