Что такое DevOps / Skillbox Media
Почему полезно работать с DevOps, где применять эту технологию и какие существуют инструменты. Объясняет Алексей Климин из компании «Атвинта».
Содержание:
Бесплатный курс по Python ➞ Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе.
Узнать больше
Фронтенд, Бэкэнд, Админ, DevOps. Обожаю все оптимизировать и автоматизировать. Постоянно ищу новые технологии и способы их внедрения.
Ссылки
Сама по себе тема DevOps довольно объемная. Это автоматизация процессов подготовки инфраструктуры как для разработки, так и для тестирования приложения, а также для его эксплуатации. Сюда же входят автоматизация деплоя и мониторинг.
Наиболее ярко DevOps раскрывается при разработке приложения с применением микросервисной архитектуры1.
Рассмотрим на примере заказной разработки веб-приложений, с какими проблемами сталкиваются разработчики и как их устранить с DevOps-подходом.
Проблемы при работе без DevOps
До попадания к пользователям программный продукт проходит несколько этапов. Разработчик пишет код, его тестирует QA, после чего системный администратор заливает приложение на боевой сервер.
Разработчик устанавливает у себя на машине все необходимое: язык программирования, на котором будет вестись разработка, например PHP 7.0, базу данных, MySQL 5.7 и веб-сервер, Apache. Какая операционная система и какие версии библиотек и зависимостей будут установлены на сервере, неизвестно.
После того как нужная функциональность приложения реализована, требуется ее протестировать.
Программист упаковывает в архив свой код, копию базы данных, информацию о требуемом ПО и инструкцию по установке всего необходимого для запуска и работы приложения. После этого он передает архив тестировщику.
QA-специалист устанавливает все необходимое на тестовый стенд, разворачивает приложение и принимается тестировать.
Если в процессе тестирования появляется новая версия разработки, то приходится повторять процедуру. Разработчику нужно снова создать архив, передать тестировщику; а тому, в свою очередь, снова развернуть приложение.
В результате таких многократно повторяющихся процедур ошибки наслаиваются, и QA- специалисту приходится дважды перепроверять одни и те же баги.
После того как ручное тестирование прошло удачно и решено переносить приложение на боевой сервер, системный администратор подготавливает новый или уже существующий сервер. Программист заливает туда приложение, и тут начинаются проблемы.
Версия языка программирования может отличаться от той, на которой велась разработка. Могут различаться версии базы данных. И даже сама система управления базами данных может быть другой. И это не говоря о том, что пути до файлов и каталогов в коде самого приложения различаются, так как приложение на боевом сервере находится совершенно в другом месте, нежели на машине разработчика.
В итоге при использовании на продакшне другого веб-сервера приходится настраивать приложение заново. А это дополнительное время.
Как DevOps улучшает процесс разработки
У нас в digital-агентстве «Атвинта» я настроил процессы таким образом, что сборка проекта, запуск автотестов и деплой на тестовый сервер происходят автоматически, а на продакшн — полуавтоматически. Если какой-либо из этапов завершился неудачно, разработчик получит оповещение.
Эти технологии подходят при разработке веб-приложений, закрытых сервисов вроде корпоративных порталов и сервисов учета сделок для интернет-магазинов.
Для подготовки серверов используются инструменты наподобие Ansible. Они позволяют быстро настроить окружение, в котором приложение будет работать в автоматическом режиме. На это тратится несколько минут, а не несколько часов.
Для единообразия окружения используем инструмент Docker.
После того как разработчик сделал определенный функционал, он отправляет код в репозиторий. Там вступает в работу процесс, называемый Continuous Integration/Continuous Delivery — непрерывная интеграция и непрерывная доставка (далее CI/CD).
Если процесс сборки и автоматического тестирования прошел успешно, приложение разворачивается на тестовом сервере (staging server), где специалист по QA проводит ручное тестирование либо тестирование с применением инструментов вроде Selenium — для автоматизации действий веб-браузера в случае веб-приложения.
Даже если во время ручного тестирования возникли какие-либо ошибки, разработчик быстро вносит правки и выкатывает обновление. Даже если нужно повторять процедуру, это происходит быстро.
После успешного тестирования принимается решение о релизе, после чего достаточно нажать одну кнопку, чтобы выпустить новый релиз в продакшн.
DevOps-инженер также проводит работы по так называемому незаметному деплою, когда конечные пользователи даже не подозревают о том, что вышла новая версия.
Инструментарий для DevOps
Разнообразие инструментов DevOps невероятно велико, так что я перечислю лишь некоторые из них, которые применяю в своей работе.
- Управление конфигурацией серверов: Ansible, Chef, Puppet.
- Для непрерывной интеграции и доставки (CI/CD): GitLab, Jenkins, TeamCity, Drone.
- Сбор данных для мониторинга: Prometheus, Telegraf, LogStash.
- Для отображения собранных данных: Grafana, Kibana, Zabbix.
- Мониторинг ошибок: Sentry, Rollbar.
Cистема управления конфигурациями, написанная на Python с использованием декларативного языка разметки (yaml) для описания конфигураций.
Была выбрана за низкий порог вхождения. Уже через пару часов можно написать рабочую конфигурацию.
Cистема контроля версий со встроенной CI/CD.
Выбрана, потому что можно развернуть на своем сервере и использовать бесплатно. Имеет большой функционал и интеграцию со множеством сторонних сервисов.
Для мониторинга нагрузки серверов используется довольно популярный стек: Grafana + InfluxDB + Telegraf.
Это платформа с открытым исходным кодом для визуализации, мониторинга и анализа данных.
InfluxDB — база данных для хранения собранной статистики.
Telegraf — агент, который устанавливается на сервер и пересылает метрики, а также логи в базу InfluxDB.