Полномасштабный DevOps: греческая трагедия в трёх актах

Траге́дия (от нем.Tragödie из лат. tragoedia от др.-греч. τραγωδία) — жанр художественного произведения, предназначенный для постановки на сцене, в котором сюжет приводит персонажей к катастрофическому исходу.

Большинство трагедий написано стихами. Эта трагедия написана Барухом Садогурским (@jbaruch) и Леонидом Игольником (@ligolnik). Если уж мы говорим о DevOps в большом масштабе, что это, как не трагедия?

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

А теперь заканчиваем играть в Белинского и добро пожаловать под кат! Там и текст, и видео. Заложников не брать!

4bc073ef625bc17e8cadb4e140741d8f.png


Как известно, греки обожали диаграммы Венна. И мы вам покажем целых три — и все про DevOps.

8ba84d023b5cef08fea52c0eb8d9f036.png


Есть традиционное описание DevOps — это пересечение областей Operations, Development и QA. Исторически интересно, что QA добавили туда позже.

cc36fee4b8859f6aa1a6bc4022da8ed8.png


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

Теперь сравните еще две диаграммы:

5c717e51b4a7f81568cca2b4a21d06e3.png


cba6aa6814080dd706d501379fd6b769.png


Иногда так случается.

Pentagon Inc.


Начнем рассказ с мифической компании под названием Pentagon, которая занимается транзакциями по кредитным картам.

960fb1ecd0ab0375d36422b83ea70b1f.png


Акт I — Пожарные


Люди. Компания только начинает свою работу, у нее три инженера. Все трое пришли из одной компании из оборонки. Ребята достаточно толковые, поэтому у них есть все: JavaScript, Node, React, Docker, микросервисы.

680329fa57f5d1312cca1ddabbf07da7.png


Процесс. Как может выглядеть процесс, когда в команде три человека? Kanban: или на доске с бумажками, или в Trello. Ребята толковые и понимают, что QA нужен с самого начала, поэтому TDD, unit & integration tests. Никакого ops, у всех root.

338e62ca813186f9d4f75c9c7850d0d7.png


Инструменты. Соответственно, для трех человек, которые только-только поднимают что-то: JIRA, GitHub, Travis CI и тд.

c381d05f3b696e53eb7605cee236f8a5.png


Поговорим о том, как этим людям живется на этом прекрасном стеке. Во-первых, как в хороших стартапах — мы пилим-пилим продукт и ждем первого клиента.

de6ce33ee2fc31b4976fb34cf35f07d3.png


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

756cf788431c9acbddd0867b410ff7b8.png


Что делает настоящий стартап, получив своего первого клиента? Отмечает! И где-то часа в три ночи, когда все в особом состоянии, звонит клиент и говорит, что ничего не работает.

33acaca34c589fb2f9726b6b786bd456.png


Конечно, в первую очередь, паника!

6c7aad13f38a4334b20aa42e83fb0669.png


Следующий шаг — в бой! Смотрим логи, например.

b921b9e8486af23eac9307a9bc098ade.png


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

Ну кто из нас не заваливал продакшн? Мы не будем винить Васю. Откатываем на предыдущий коммит. Оно не собирается! Почему-то не хватает библиотеки, называется left-pad.

00331d228e5f404fabf9d451f4fcb458.png


Для тех, кто не знает, что произошло с left-pad, — рассказываем. Итак, 23 марта 2016 года сломалось пол-интернета. Вообще модуль left-pad в JavaScript просто вставляет пробелы в левой части строк. И пол-интернета напрямую или транзитивно от этого модуля зависели. Автор left-pad каким-то образом умудрился поссориться с хозяевами центрального репозитория npm, поэтому он просто ушел от них, прихватив все свои разработки. npm — вообще загадочная система: мало того, что они проверяют, когда вы добавляете новый модуль для скачивания, — они еще и проверяют все старые модули.

Таким образом, раз за разом борьба с огнем продолжается. И проблемы все время одни и те же.

9b099e9a4a0c778833a6364e448cf6e1.png


Акт II — Установщики пожарной сигнализации


Новости компании: подняли бабла, нашли инвестора, наняли 27 человек, причем один из них — с ops-бэкграундом. Появилось 100 клиентов и даже техподдержка.

aa38be28050b80d59f5f0a750a51964c.png


Процесс, соответственно, тоже должен получить апргейд. Появился нормальный Scrum, exploratory testing. Поняли, что NoOps не бывает вообще, потому что есть Ops (если архитектура serverless, то сервер все равно есть, он просто не ваш). Так как по ночам будить всю команду неправильно, появился дежурный (developer on call).

7735b24a34ed17aff93056b0b1ba0d06.png


Соответственно, расширился набор инструментов. Как минимум появилась Knowledge Base, так как теперь есть дежурный, и ему надо где-то искать информацию. Еще новинка — JFrog Artifactory: система, позволяющая хранить то, что было задеплоено вчера, чтобы можно было легко откатиться назад (урок с left-pad прошёл не зря), а не перестраивать всё заново. Поставили систему сбора логов и поиска по ним. Добавилась Pingdom — феерическая мониторинг-система: вы даете ей url, и она рассказывает вам, работает он или упал.

2f2f0b7807b5a55f1db5f00334665209.png


Итак, на этом этапе снова подняли денег. Значит, отмечаем. Пятница, три часа ночи, звонит клиент. Кое-что не работает: Visa и MasterCard проходят, а American Express — нет.

9cc126b951fd68f4c8ad149bb35a125a.png


И как в первую очередь реагирует саппорт, когда в три часа ночи звонит клиент? Паника!

Затем звоним дежурному. Угадайте, кто дежурит? Конечно, Вася! Угадайте, в каком состоянии Вася? М-да. Но Вася берет себя в руки, смотрит на то, что ему прислал саппорт, и говорит, что ему все это подозрительно знакомо и он уже такое делал. Поэтому Вася просто берет и чинит. Все идут отсыпаться. В понедельник начинается разбор полетов.

ce837f6c3dc377e624c9a5e36a036a02.png


Вот пример конкретного документа, который мы производим для knowledge base, чтобы если что-либо снова повторилось, это можно было быстро найти. Кроме того, иногда его показывают клиентам:

16f2ffe5b393327e272bbb6ad5e7d382.png
4aac6b3f7865042215beaab302044b54.png
35a999ab3c206c70daf6cf283aea9901.png


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

В случае с Васей у нас по логам переполнение очереди. Нужно ее очистить от транзакций кредитных карт, а кроме того, увеличить ее размер. Например, на 42!

Такой процесс очень хорош для внутреннего continuous improvement и он гарантирует установку тех самых «детекторов дыма». Вторая причина, по которой этот документ важен — это отчет перед клиентом. Некоторые сервисы после того, как они «лежали» какое-то время, публикуют причины этого.

98bf0bf065b0ab0e89f647d1e30a5d02.png


Иногда проблема оказывается настолько катастрофической, что распространяться об этом не стоит.

В GitLab«е в феврале 2017 года какой-то человек удалил базу данных на продакшне. Вот анализ, который выложил GitLab:

86f316cc72fc835ec9c70b4e899578a5.png


Итак, где-то есть бекап, только никто не знает, где. Затем бекапы нашлись, но они оказались пустыми. Да, есть дамп базы. Но он делался в другой версии postgres, поэтому не подходит. У нас есть диск-снепшоты, но на них нет базы данных. Репликация с S3 тоже не сработала из-за отсутствия данных.

Таким образом, пять различных техник для резервного копирования данных не отработали. Мы думаем, что такое публиковать нельзя, так как больше им никто ничего не доверит. Но, в зависимости от того, как про это рассказать, клиент может и простить. Правда, только один раз.

e87a116665920da5ca80aeb50f401ace.png


Кстати говоря, тот парень, который это сделал, получил повышение. Кроме того, он поменял себе статус в twitter на Database (removal) Specialist at GitLab.

Акт III — Кульминация


Итак, что происходит в нашей фирме? Снова подняли денег, наняли кучу народа — теперь у нас пять ops-инженеров и один человек, который занимается performance. Есть главный архитектор. Появилась команда customer success team, покрывающая все отрасли, которым может понадобиться саппорт. Их тормозят, чтобы оставшаяся часть команды могла продолжать работать. Часто в такой команде есть группа, которая может построить отношения с ops или саппортом, а также периодически туда надо закидывать инженеров на scrum, либо на sprint, либо на месяц. Компания выросла, появился юрист, финансовый директор. База клиентов выросла до 1000.

8812ed4076e23ea48b543da6c8e99ca8.png


Так как команда растет, процесс разработки должен поменяться.

Появился SAFE — фреймворк, который объясняет, что делать scrum-ам, когда команд становится много или центров разработки — больше, чем один. Количество процессов, которые присутствуют в Safe, может убить лошадь, но если только все их взять сразу. Если забирать себе только те кусочки, которые требуются на данной стадии развития компании, то все должно быть нормально.

System testing появляется, когда у больших команд возникают определенные нужды или если у вас громадная система, из которой нужно что-то собрать. Индивидуальные scrum-команды могут хорошо оттестировать свои системы, но кто-то должен отвечать за то, что вся система должна собраться в продакшн.

Что можно сказать про Ops Team? Как мы говорили, есть два варианта делать DevOps. Первый — по книжке и по инструкциям Netflix, Google и Twitter. Второй — в реальной жизни, где не всем инженерам можно доверить root в продакшн.

Escalation path — важный концепт, который позволяет решать любую проблему в заданное время, потому что в конце escalation path есть мобильный телефон генерального директора, после звонка которому все проблемы исчезают за 5 часов 58 минут.

SOC II — набор стандартов, которые вендор предоставляет клиенту. Эти стандарты подтверждают, что у фирмы есть определенные решения в безопасности, подходы к разделению работы.

Backlog — список проблем, которые нужно решать для улучшения системы. Обычно backlog manager«ом становится chief architect, который должен посмотреть на нужды системы и нужды продукта и расставить приоритеты по этим задачам.

59180a96eb47b9e670d3f955f3f7a96d.png


Инструменты, естественно, тоже совершенствуются.

5cf835982ba36b2da678259f31e96e38.png


Есть еще новости. Васю повысили. Он теперь VP of Engineering.  

Проходит пятница, суббота, воскресенье — ничего не приходит. Все работает. Все сами в шоке. Наступает понедельник, приходит к Васе юрист и говорит, что был на конференции юристов и услышал там про LGPL 2.2. Вася понятия не имеет есть ли у них LGPL 2.2.

3e5e0a559cb9b199778572bae3a04a34.png


Люди работали долго, а потом нашли LGPL 2.2. Нужно выпиливать. Но это выпиливается здоровым куском системы, а релиз завтра никто не отменял. Ну ничего, справились с этим.

b551bff304f35ed67eea7416b69f2fa3.png


Приходит финдиректор к Васе:

  • Сколько нужно денег для серверов и продакшн? Делаем бюджет на следующий год…
  • 42 —  говорит Вася.


Решили и эту проблему.

562af8242f72cf1094aa4cf5a51f8612.png


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

465452f5152eb464a0909aa9e689b17b.png


Но так как у нас в обязательном порядке должен быть happy end, к греческой трагедии мы приделали и его.

Эпилог — Proactive Improvement


Теперь расскажем про последнюю стадию масштабирования DevOps — Proactive Improvement. Это о предотвращении пожаров.

С людьми никаких изменений не происходит. А вот с процессом — очень даже.

3841047d2285ebd11985c3849f2bf4ab.png


Так как у нас есть Performance Engineer, то он должен как-то следить за системой. Появился License and security management. Proactive Performance — теперь мы внимательно смотрим за тем, куда движутся ключевые индикаторы, и чиним вещи до того, как начнется громадный пожар. Желательно при масштабировании продукта иметь что-то, что говорит: если вы хотите иметь микросервис, то у него как минимум должен быть стандартный мониторинг, логи и прочее.

Соответственно, есть инструменты, которые все это поддерживают. Например, инструмент для license and security мониторинга — JFrog Xray. Blazemeter — так как теперь есть proactive performance, то надо как-то генерировать load. Появляются такие вещи, как Service Virtualization, который позволяет применять mock-объекты для удаленных API, потому что не каждый вендор, с которым вы работаете, может предоставлять тестовый API.

e922ce7fc772e3669f6840179a293499.png


Разбор


Разберем некоторые события из предыдущих актов.

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

7a797e6591707a52e9d2bd8f5a9dd2ee.png

Мы ошибочно думали, что тратим 80% на Big Feature A — на самом деле на нее уходит только 13%. При этом целых 34% уходит на Keep the lights on — вещи, которые надо делать в продуктах: чинить баги, обновлять библиотеки и тд.

На самом деле существует только одна объективная метрика качества продукта: удовлетворенность клиента, которая выражается в обращениях к саппорту.

Второй пример. Разбили все дефекты по критичности:

a77f9cb3f22211d467de577bd4c47209.png


65% тикетов относятся к первым уровням критичности. Это же кошмар?

Теперь возьмем те же самые данные и посмотрим на них под другим углом.

a02a54fd40fbb3b87a3b9671a88b54e7.png


Теперь диаграмма отражает ситуацию после разбора полетов. Оказалось, что 52% тикетов были закрыты инженером при помощи information provided, то есть он отписал в саппорт то, чего они не знали. Только около 20% тикетов были закрыты при помощи какого-то изменения кода. Таким образом получается, что виноват совсем не R&D. Виноват даже не саппорт. На самом деле нам не хватало обучения — и Вася, как VP  of engineering, посмотрев, сколько он тратит время на всякие глупости, отправил кучу инженеров обучать саппорт.

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

Выводы


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

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

f781d97fb6978069d544cde85c341586.png


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

И не забывайте два основополагающих принципа DevOps:

  • You build it — you own it.
  • Pain is instructional.


Уже в следующее воскресенье Барух и Леонид выступят с докладом »#DataDrivenDevOps» на DevOops 2018 в Петербурге. Приходите, будет много интересного: вот доклады, вот Джон Уиллис, а вот вечеринка с BoF-ами и караоке. Ждем вас!

© Habrahabr.ru