Всем привет!

Мы допечатали книгу «Философия DevOps», а также планируем делать и новую книгу на эту тему.


Немало копий сломано по поводу того, чем является и чем не является DevOps, а также о соотношении DevOps и непрерывной интеграции. Поэтому мы просим вас максимально объективно высказаться, разделяете ли вы точку зрения сегодняшнего автора Адама Маккея (Adam Mackay) относительно сути DevOps — либо, на ваш взгляд, предложенная им картина в чем-то неполна или ангажирована?

Читаем и комментируем!

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

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



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

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

У нас в компании прослеживается несколько ключевых DevOps-тем: ценности, принципы, методы, практики и инструменты.



Ценности

Любой инженер заточен на поиск решения, и такая устремленность порой выливается в неприятие новых технологий, нежелание экспериментировать с новыми вещами, что выражается по-разному: от синдрома «неприятия чужой разработки» до контрпродуктивных попыток защищать свою нишу. Чтобы по-настоящему перейти на DevOps, эти предубеждения нужно сначала признать, а затем преодолеть. Ни одна технология, ни Docker, Kubernetes или Amazon Web Services не решит ваших проблем, если вы не понимаете, в чем заключается ценностное предложение.



«Возьмемся за руки, друзья!» Снимок пользователя rawpixel с сайта Unsplash

Принципы

Принципы нашей компании основаны на модели Трех Путей. Ее разработали Джин Ким, автор “Visible Ops” и “The Phoenix Project” и Майк Орзен, автор “Lean IT.” Рекомендуем выстраивать такую среду, в которой стимулируется системное мышление, усиливаются циклы обратной связи, прививается культура непрерывного экспериментирования и обучения.
Постоянно думайте обо всей системе целиком. Спросите себя: «Как наладить еще больше циклов обратной связи?» Мониторинг, метрики и логирование – вот три таких цикла, которые помогают администраторам участвовать в проектировании. В здоровой DevOps-среде стимулируются процессы, способствующие созданию коротких и эффективных циклов обратной связи, примеры таких процессов – управление инцидентами, объективный анализ постмортемов, обеспечение прозрачности…



“Рукопожатие перед MacBook Pro”, снимок пользователя rawpixel с сайта Unsplash

Методы

Гибкое управление

Гибко = просто. Подразделяйте ваш проект на небольшие участки работы, ведите сборку, ограничивая незавершенность работы (progress limit), внедряйте циклы обратной связи и добивайтесь визуализации. Это – мой любимый элемент любого проекта; гибкие приемы управления дают более результативный выход, в том числе, улучшают пропускную способность и стабильность системы; сотрудники испытывают на работе не такой сильный стресс, получают больше удовлетворения от работы.

Сначала люди, затем процессы, затем инструменты

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

Непрерывная доставка

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

Управление изменениями



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

Инфраструктура в коде (Конфигурация в коде… Все в коде)

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

Практики

Во всех предыдущих IT-организациях, где мне доводилось работать, подход к проектам был таким: «давайте что-нибудь напишем… а потом поручим кому-нибудь это тестировать и развертывать». Такой метод плохо согласуется с планами Сроки сдвигаются, а когда команда разработчиков переходит к следующему проекту, эксплуатационные издержки становятся неподъемными.



“Американские горки под голубым небом и белыми облаками”, снимок пользователя Priscilla Du Preez с сайта Unsplash

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

Инструменты

Мы любим наши инструменты! Они помогают инженеру программировать, собирать, тестировать, упаковывать, выпускать, конфигурировать и отслеживать как системы, так и приложения. Мы мастерски владеем нашими инструментами и знаем весь спектр интересующих нас решений – как опенсорсных, так и коммерческих. До того, как начала развиваться парадигма DevOps, инновации и инструментарий пребывали в стагнации. Я долго пользовался тем же самым инструментарием, что и в самом начале карьеры (программирую с 2000 года). Многие инструменты, применяемые в DevOps, поразительно многофункциональны и помогают совершенно по-новому организовать жизненный цикл сервиса.



“Всевозможные столярные инструменты в мастерской” из подборки Barn Images с сайта Unsplash

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

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

Что дальше…

Скачайте образ docker и начинайте экспериментировать. Сделайте форк чужого кода и начинайте его надстраивать. Раскрутите сервер или кластер серверов при помощи Kubernetes. Вот вы и делаете DevOps. Начинайте на собственном компьютере, а затем переходите в облако.



“Мальчик, стоящий на лестнице и дотягивающийся до облаков”, снимок Samuel Zeller с сайта Unsplash

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

Комментарии (20)


  1. Me1ram
    20.11.2018 15:43

    Читал эту книгу. Там в основном только философия и теория. Очень мало примеров.
    Хотя пища для размышлений тоже есть.


  1. former_cartman
    20.11.2018 15:43

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


    Опять про тушь, увеличивающую ресницы на 350%))
    как же удавалось ОС, СУБД и другие, по-настоящему сложные, продукты создавать?


    1. vowantuz
      20.11.2018 16:19

      Опять когда говорят про DevOps, то говорят про всё что угодно кроме подробного объяснения того чем DevOps занимается конкретно и методов его работы. У меня создаётся ощущение того, что в половине случаев DevOps это про что-то мифическое о связи управленческих и инженерных должностей в обход (или в дополнение?) руководителей отделов и групп. Из чего рождается вопрос о том, а зачем это нужно если уже есть люди которые занимаются близкими вопросами (этим самые руководители)?
      Поясните, пожалуйста, запутавшемуся мне, как глупому и неразумеющему инженеру, за DevOps.


      1. former_cartman
        20.11.2018 16:28

        девопс получает в два раза больше сисадмина. Это единственное известное мне отличие.


      1. zunzon
        20.11.2018 16:57

        Работаю девопсом, прочитал статью и ничего не понял. Совсем.
        В моем понимании на проекте девопс должен реализовать:
        1. Инфраструктуру проекта. Подразумевается возможность работы с контейнеризацией и микросервисной архитектурой.
        2. Непрерывную интеграцию, тестирование. Каждый коммит билдится, тестируется и деплоится в зависимости от требований проекта.
        3. Сбор логов и статистики. С девопсом у вас явно больше 1 сервера, но логи и health сервисов всегда лучше смотреть в одном месте.
        4. Гибкость проекта к нагрузкам. Автоскейлинг, даунскейлинг, алертинг и т.д.


        1. mayorovp
          20.11.2018 17:02

          Вы не можете работать девопсом, потому что DevOps-это методология, а не должность.


          1. zunzon
            20.11.2018 17:05

            Вам придется смириться с тем, что на IT рынке присутствует должность DevOps Engineer.


            1. mayorovp
              20.11.2018 17:09

              А вам придется смириться с тем, что название этой должности к DevOps отношения не имеет…


              1. Cenzo
                22.11.2018 00:18

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


              1. aleXoid
                22.11.2018 20:54

                Не знаю, почему Вас заминусовали. Определенно, отрасль во многих местах настолько нахваталась модных неологизмов, что зачастую ее участники перестали понимать, что DevOps — это философия разработки и доставки, HR — это не рекрутинг, а Architect — про архитектуру, а не когда Senior BE нужно зарплату повысить за выслугу лет.

                За последние пару лет провёл технические интервью с толпой “DevOps Engineer” — чаще всего они понимают свою специальность как опыт с одним из облаков, умеют какой-нить оркестратор и парочку инструментов от HashiCorp. Никакого понимания о выстраивании процессов непрерывной доставки и философии вокруг этого. Тупо хайповые админы с небольшой специализацией в облачные вычисления.


      1. NeoPhix
        20.11.2018 17:00

        Мне кажется, что вы путаете DevOps и какую-то смесь Project-manager'а, Team-lead'а и эникейщика в одном лице :) Попробую пояснить, как я понимаю, кто такие DevOps, ни разу не претендуя на истину в последней инстанции:

        Со времени возникновения IT до его текущего состояния прошел очень большой период:

        От голых языков программирования с бедными стандартными библиотеками мы пришли к вееру библиотек, сред исполнения, операционных систем, платформ (включая веб, мобильные платформы, серверы, IoT и другие), виртуализации, распределнным по кластерам вычислениям, кроссплатформенной разработке, частому деплою и т.д… Сложность IT-инфраструктуры, необходимой для разработки и выпуска конечного продукта возросла многократно. Если раньше достаточно было написать игру/приложение под Windows, скомпилировать все это msvc-компилятором, протестировать, записать на диск и спокойно продавать, то сейчас для создания какой-нибудь простенькой Веселой фермы с возможностью играть в нее с телефона и из браузера придется развернуть:

        1. Окружение для кроссплаформенной разработки (Android, iOS, браузер), с библиотеками для связи с БД, поддержкой API соц. сетей, графикой, нативными библиотеками на устройства и т.д.
        2. Систему CI/CD с автоматической пересборкой, автотестами, какой-нибудь распределенной системой контроля версий, типа git'а, чтобы обеспечить работоспособность продукта как на стадии разработки, так и в продакшне.
        3. Функционирование всего этого в облаке (как минимум БД + браузерная версия на каком-нибудь популярном фреймворке).

        Если речь идет о чем-нибудь более сложном, чем веселая ферма (например, о каком-нибудь крутом вычислительном кластере или сервисе поиска, типа Яндекса, который разрабатывают тысячи людей по всему миру), то все становится еще сложнее.

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


        1. razielvamp
          21.11.2018 07:27

          А если компания экономит на специалистах и я один поддерживаю всю инфраструктуру включая AWS, программируемые маршрутизаторы и виртуальные сервера в офисе, иногда Active Directory, если в ней что-то ломается, готовлю сервера для программистов, которые так далеко от того, на чем кончается их код, что не особо понимают почему после?chmod +x?программа начинает запускаться, то я DevOps?


          1. NeoPhix
            21.11.2018 09:01

            Очевидно, да


            1. razielvamp
              22.11.2018 13:29

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


              А еще девопс должен быть подкован в ООП?


        1. khanid
          21.11.2018 14:53

          Эникей ver. 2.0.


  1. maslyaev
    20.11.2018 17:45

    До того, как начала развиваться парадигма DevOps, инновации и инструментарий пребывали в стагнации
    Да ну! Серьёзно?


  1. ajankovsky
    20.11.2018 18:00

    Бывают случаи в настоящее время, когда на прямой вопрос к человеку, представляющему какой бы то ни было программный продукт: «Какая у тебя роль в проекте?» — отвечает «Я DevOps»… И что бы то ни было другое, он пояснить не в состоянии…
    В связи с этим, считаю, что подобная методология все же считается не более чем трендом нынешнего мира.
    Универсальные солдаты всегда в почете, но рожденный летать — плавать не сможет. Как то так)))


  1. ggo
    21.11.2018 10:08

    Ценности

    Любой инженер заточен на поиск решения, и такая устремленность порой выливается в неприятие новых технологий, нежелание экспериментировать с новыми вещами, что выражается по-разному: от синдрома «неприятия чужой разработки» до контрпродуктивных попыток защищать свою нишу. Чтобы по-настоящему перейти на DevOps, эти предубеждения нужно сначала признать, а затем преодолеть. Ни одна технология, ни Docker, Kubernetes или Amazon Web Services не решит ваших проблем, если вы не понимаете, в чем заключается ценностное предложение.


    Так в чем ценности то? так и не прозвучало.

    И не увидел про цели.
    Увидел про управление изменениями, blablabla-as-code, быструю доставку, и прочее.
    Про цели — ни слова.


  1. VMichael
    21.11.2018 14:45

    Работаю сейчас в компании где увлечены сейчас DevOps-ом. Проходят встречи, обсуждаются книги. Надуваются щеки. Все, что угодно, кроме организации самой работы.
    Нет тестового сервера. Нет контроля версий кода. Нет системы управления проектами (даже простенького трекера нет). Есть Exel файл с перечнем задач, в очереди около 500 задач и очередь растет.
    Зато руководству интересно обсуждать коммуникации между заказчиками и ИТ, построение «прозрачного ИТ» и DevOps.
    Меня это не парит, я сижу в своей песочнице, занимаясь удаленным обслуживанием БД, но наблюдать со стороны забавно :)
    Пока что DevOps-а какого то здравомыслящего не встречал.
    Все что в упомянутых в статье книгах, называется здравый смысл и команды выстраивали это и без DevOps-ов. Просто новые модные слова.


  1. teemour
    22.11.2018 12:52

    постоянно думаю как наладить больше циклов обратной связи