Переиздано из Середина .
В конце долгого дня я наткнулся на Развертывание катастрофы в Gitlab в Твиттере. Они по ошибке удалили производственную базу данных, теряя часы проблем, пользователей, комментариев и многого другого. Я сразу же почувствовал себя сердца для их команды: это очень специфическое ощущение, когда вы удаляете важные производственные данные, а затем обнаруживаете, что ваши системы резервного копирования вас не спасли. Под ногами нет пола, нет кнопки отмены, чтобы изменить время, просто великолепное чувство ужаса.
Реакция на потерянные данные производства имеет тенденцию следовать схеме поведения. Сначала пришли попытки восстановления и обычно частичный успех, поскольку команда находит альтернативные де -факто резервные копии (QA -серверы, неполные наборы данных). Во -вторых, период стабилизации, когда команда считает, что, если что -то на самом деле исчезло. После этого вскрытие (которая должна быть безупречный для любого, кто учится и движется вперед) должен извлечь обучение из инцидента и заполнить более полную историю с точки зрения каждого актера.
Команды, участвующие в посмертном порядке, придумают работу по восстановлению, направленные на предотвращение того, что такого рода провалы снова произойдут. Каждый, у кого сжигали пальцы, будут очень мотивированы определить эту работу и сделать это. Команда хочет закончить этот период обновленным чувством безопасности.
Но всегда есть ноющий вопрос, тот же тип заботы, который выдвигается из царства безопасности и прижимается к плечам инженеров: чего нам не хватает? Где произойдет следующая неудача? Что мы делаем — или не делаем — прямо сейчас это укусит нас через шесть месяцев?
Посмертные события должны быть поучительными событиями, но они также по определению в ответ на определенную неудачу. Трудно найти границы посмертного анализа, чтобы вы могли указать за пределы и спросить: «Но как насчет это вещь Мы еще не думаем? Нам нужна дополнительная практика, которая может произвести больше неудач, то есть больше обучения — в контролируемой среде.
Более крупные инженерные организации с распределенными системами могут реализовать такие системы, как Netflix’s Хаос обезьяна , которое является применением, которое полупроизвольно убивает другие серверы в вашей системе. Это заставляет инженеров разработать устойчивое программное обеспечение, так что услуги могут продолжать работать по мере сбоя отдельных машин. На практике преимущества управления увеличением обезьян хаоса по мере роста развертывания и размеров команды. Меньшие организации с более простыми, менее распределенными системами не выигрывают от подхода об обезьяне.
У Dosomething была собственная катастрофа с потерей файлов летом 2016 года. Общее резюме слишком знакомо, особенно после прочтения об этом инциденте с Гитлабом: один из нас перезапустил процесс передачи файлов в производстве, поздно вечером. Процесс начался с неправильной конфигурации (тщательно пройдите с любым инструментом, который имеет «разрушительный режим»), и старательно удалил сотни тысяч файлов, прежде чем мы смогли идентифицировать и остановить его. Гораздо хуже, мы обнаружили, что наш основной процесс резервного копирования в течение некоторого времени не провалился. В конечном итоге нам удалось восстановить 94% файлов из старых резервных копий и других источников, но боль в восстановлении, не говоря уже о невозможных 6%, осталась с нами.
Во время последствий, мудрый подруг технического директора, CJ Rayhill из Публичная библиотека науки , предложил мне посмотреть на пожарные упражнения. Ее опыт консультации в высокорегулируемых отраслях продемонстрировал ей ценность управления ИТ -командами посредством сценариев полного разрушения. Они найдут очевидные изменения, такие как улучшение доступа к резервным копиям данных. Они также раскрывают более неясные неудачи, например, когда никто не знал, как изменить корпоративную голосовую почту, чтобы обновить исходящее сообщение.
Характер пожарных тренировок, конечно, будет варьироваться среди команд и отраслей. Для нас пожарные упражнения начались с двух основных проблем: потерянные или поврежденные наборы данных и потерянные развернутые системы (серверы и сети). Огненные упражнения, в основном, включают в себя коммуникацию, документацию и другие человеческие факторы в их масштабе, в то время как инженерная инженерия в стиле обезьяны ограничивает его объем дизайна программного обеспечения.
Наша команда по инфраструктуре поставила перед собой цель пробежать два -три пожарных упражнения в квартал. Чтобы определить, с чего начать, мы выбрали систему, которая была критической, но довольно автономной. Сначала мы хотели сосредоточиться на механике и логистике запуска пожарной деятельности в первый раз. Нам нужно было пройти через некоторые основные вопросы: как это выглядит? Кто вовлечен? Кто отвечает? Сколько времени это занимает? Как вы определяете катастрофу? Как записать, что происходит? Что вы делаете, когда все закончится? И так далее.
Наша команда запустила их достаточно, чтобы определить некоторые требования и практики:
Напишите лечение
Мы стремимся к определенному уровню правдоподобия, с листом персонажей и четкими границами вокруг действия. Итак, мы начали с своего рода лечения фильма:
Система X регистрируется как недоступная в новой реликвии. Когда мы смотрим на AWS, мы видим, что весь VPC был уничтожен: серверы приложений, кэш Redis и кластер MongoDB все исчезли. Регион AWS и зона доступности все еще доступны.
Это резюме сюжета. Обратите внимание, что это также определяет, что в сфере масштаба, а что нет: В этом случае сама AWS выходит за рамки упражнения.
Для актеров персонажей мы хотели указать не только тех, кто был вовлечен, но и в каких ролях они должны играть. Это служит частью нашей институциональной памяти. Это также позволяет нам играть с изменением некоторых параметров или расширяющим объем проблемы в последующих тренировках против той же системы.
Создать матрицу RACI
Raci это полезный инструмент для того, чтобы убедиться, что товарищи по команде в проекте общаются, не наступая на пальцы друг друга. Raci определяет роли, которые люди играют в проекте: ответственный, ответственный, консультируемый и информированный.
В огненной тренировке для организации нашего размера (то есть персонал 60) имело смысл для нас, чтобы один человек принимал важные решения (это A ). Более одного человека мог выполнять работу ( r ). Другие должны дать обратную связь и предоставить институциональную память, особенно если мы пытаемся воссоздать систему с неполной документацией ( CS ). И некоторым другим просто нужно знать, когда начинается тренировка, как все идет, и когда все закончится ( это ).
На практике это может быть просто: четыре R, a, c, i Пулене точки на вершине доктора. Но Решение, кто участвует, и как важно обеспечить ясность в запутанной ситуации. Одна из самых дорогостоящих проблем в чрезвычайной ситуации — это не знать, кому нужно принимать критические вызовы.
Укажите критерии принятия
Как мы узнаем, когда вернули систему? Мы интегрируем эту систему в более широкое развертывание, чтобы доказать, что она работает нормально, или запустить набор тестов против нее? Подобно определению Agile Team «Готово», этот шаг рассказывает команде, как выглядит успех, чтобы они могли закончить пожарную дрель.
Делать предсказания
Мы используем искусство пожарной дрели, чтобы сделать некоторые ставки о том, как мы отреагируем. Как мы думаем, что мы восстановим системы? Что нас беспокоит? Мы можем сравнить этот анализ с тем, что на самом деле происходит, и извлечь важную информацию из отклонений между планом и реальностью.
Не каждая команда может сделать этот шаг, так как они могут хотеть, чтобы тест включал, насколько хорошо команда анализирует ситуацию, и создает путь разрешения в жару на данный момент.
Райхилл подчеркивает «подлинность тренировки (ы)…. Возможность имитации реальной тренировки с реальными актерами и реальными последствиями — единственный способ бросить вызов вашей организации настолько готовой, насколько это возможно ».
Установите ограничение по времени
Допустим, система идет вниз, и резервные копии недоступны — другими словами, фактический инцидент, который разбирался в июле 2016 года. Как долго должна продолжаться пожарная деятельность? Говорят ли команда в течение двадцати четырех часов, или называется ее увольнением после восьми? Особенно важно установить ограничение по времени, когда тренировки идут не так, чтобы это не стало деморализующей практикой.
В случае абсолютной неспособности восстановить, положить конец пожарной деятельности, исправить проблемы со смертельным исходом и перенести тренировку.
Держи журнал
В тот момент мы можем предпринять серию неудачных попыток или рассмотреть вопрос о подходах, которые мы вскоре отказались. Мы хотим записать их в качестве временной шкалы для просмотра позже. Это серия событий, которые мы можем изучить позже, чтобы найти дыры в наших решениях, системах и документации.
Важно документировать именно то, что произошло, а затем просмотреть его в своем посмертном порядке, чтобы сделать постепенные улучшения. — CJ Rayhill
На DoSomething мы, вероятно, координируем ответ как обычно в Slack, но мы, как правило, хранят заметки в общем документе Google, чтобы каждый мог внести свой вклад и просмотреть. Как институциональная память, эти ноты — золото: сохраните их и держите их организовываться.
Запустите посмертное
После мероприятия проанализируйте как фактический инцидент. Посмотрите на временную шкалу и все артефакты, включая восстановленную систему. Мы вернули его обратно и бегают? Где были интересные пробелы? Если мы не получили систему, чтобы сдать наши критерии принятия, какие самые важные вещи должны встать на место, прежде чем мы повторно затронули пожарную деятельность?
Закройте пробелы
Мы снимаем простое правило: мы должны рассмотреть решающие пробелы, обнаруженные одним пожарным упражнением, прежде чем мы начнем еще. Это помогает нам не допустить те же ошибки в двух последующих пожарных учениях. Это также смягчает против команды, ошеломленной своей отставанием.
Другие команды могут принять решение не обеспечить соблюдение этого сериализации лекарств и последующих тренировок. Rayhill позволяет, чтобы «лекарство от определенной проблемы может быть дорогостоящим для организации. Если бы ее команда определила, что стоимость была слишком высокой, они все равно «документировали наши рассуждения, чтобы она была доступна для аудиторов».
Подчеркнуть обучение
Основным принципом пожарных упражнений является использование лабораторной среды для создания как можно большего количества информации о сбоях. Используйте упражнения, чтобы обнаружить слабые места, а затем выбить на эти слабые места, пока они не станут сильнее. Ваши слабые стороны могут быть связаны с общением и принятием решений, свежестью и доступностью резервных копий, оповещений и мониторинга, документации, ненужной сложности или автоматизации.
Когда я … начал этот процесс с одной организацией, мы даже не могли пройти через первые 3 шага, когда мы запустили тренировку! Но мы исправили то, что пошло не так, и продолжали это, пока не смогли закончить целое упражнение. — CJ Rayhill
Скорее всего, команды, которые управляют пожарными учениями, обнаруживают неудачи по ряду категорий. Каждое из этих открытий должно вызвать празднование, потому что команда, которая находит проблему в лаборатории, может исправить его, прежде чем она кусает их в дикой природе.
Дальнейшее чтение и спасибо
Google запускает эти упражнения в масштабе через практику под названием Грязь: аварийное испытание на восстановление Анкет
Netflix-стиль Chaos Engineering имеет оба онлайн -сообщество и Объяснение принципов Анкет
Джесси Роббинс из Opscode Институтные мероприятия Gameday имитировать бедствия. Команда Обамы 2012 управляла ими в Десять тревожных ароматов Анкет
Спасибо за Прис Насрат Для ее тщательного чтения, заметок и ссылок и CJ Rayhill за ее руководство и мудрость.
Оригинал: «https://dev.to/dosomething/fire-drills-for-software-teams»