Всем привет! Я давно планировал написать цикл статей на тему Chaos Engineering,
чтобы рассказать о том, как его запускать, пилотировать и, конечно, масштабировать.
Я обладаю большим опытом и знаниями, которые помогут запустить эту практику в
«жестком» и сложном Enterprise, когда у нас идут релизы, а команд десятки. Частично
мы с Максимом Козловым уже делились этой информацией на конференциях CodeFest, ArchDays, DevOops Сonf, TechLead Сonf.

Начало

Направление Chaos Engineering у нас в стране пока еще только набирает популярность. Однако во всем мире пик интереса уже давно прошел, и сейчас Chaos Engineering используется во многих крупных компаниях.

Тренды в направлении DevOps и Cloud от компании InfoQ за 2023 год
Тренды в направлении DevOps и Cloud от компании InfoQ за 2023 год

Многие уже читали про Chaos Engineering, например, на Хабре есть более десяти
статей про историю его возникновения. Многие знают что эта практика появилась в
Netflix.

В связи с этим мы не будем глубоко вдаваться в историю, а лишь дополним ее
несколькими фактами. На самом деле прародителем Chaos Engineering в Netflix
является программа, которую еще 10 лет назад открыли в Amazon. В 2000-х гг.
Amazon пригласил Jesse Robbins ,бывшего пожарного, проводить так называемые
Game Days в своих Cloud-полигонах. Его прозвали "Master of Disaster", он должен был
отвечать за Website Availability.

Как раз он и организовал практику учений, которые были у пожарных в IT. Спустя
7-10 лет, когда Netflix начал мигрировать свою платформу в Amazone Cloud, эта практика пришлась очень кстати. Именно тогда в ходе проведения испытаний
команда Netflix создала продукт Chaos Monkey, который в скором времени стал
синонимом самой практики Chaos Engineering.

Нужно отметить, что практика появилась прежде всего при тестировании Legacy-
приложений, которые переходят в Cloud для проверки отказоустойчивости.

Далее Netflix начал раскачивать “качели” новой практики, и она постепенно стала
популярной.

Чуть позже выходцы из Netflix поняли, что на практике Chaos Engineering можно
заработать, и создали известную в узких кругах PaaS платформу Gremlin

При этом стоит сказать, что утилита-эталон практики Chaos Monkey постепенно
теряет актуальность, и на текущий день очень плохо развивается (в год выходит по
3-5 поддерживающих на плаву коммитов https://github.com/Netflix/chaosmonkey/
commits/master).

На фоне развития практики совершенствуются и утилиты, а также сами платформы.

Примерно в 2018-2019 гг. The Cloud Native Computing Foundation (CNCF) решает официально открыть отдельный раздел инструментов Chaos Engineering, который сейчас выглядит вот так:

The Cloud Native Computing Foundation (CNCF). Инструменты для проведения Chaos Engineering испытаний.
The Cloud Native Computing Foundation (CNCF). Инструменты для проведения Chaos Engineering испытаний.

Далее мы детально познакомимся с утилитами, но прежде давайте поговорим о типах испытаний.

Chaos и другие типы испытаний

На старте запуска практики в компании обычно возникает вопрос, который входит в ТОП-10 вопросов от бизнеса/инженерных команд:

Chaos Engineering − это ведь то же, что и аварийные учения, проверка DRP-планов, разновидность нагрузочного тестирования или Penetration testing? Так зачем нам еще и он?

У меня есть предположение, что такое мнение часто возникает по двум причинам: 

  • Из названия не совсем ясно,  о чем идет речь. Понятно, что Load testing − это  про нагрузку, Pinetration testing − про проникновение в Cyber Security.  Chaos же  никак не получится  перевести корректно. Практику надо было практику назвать Fail tolerance capability engineering, но это очень длинно. 

  • Chaos Engineering стоит на стыке разных методик и включает в себя кусочки других практик. Из аварийных учений и DRP сюда включены  проверки переключения кластеров и отказы инфраструктуры. Из Load Testing здесь взята нагрузка как таковая, потому как в ненагруженной системе тестировать нечего.

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

Уровни абстракций vs Типы практик
Уровни абстракций vs Типы практик

В данной таблице каждому уровню соответствует набор практик, которые позволяют его  проверить. Нагрузочные и интеграционные придумывались,  прежде всего, для того,  чтобы проверить уровень приложений, Аварийные учения и RDP  в целом акцентированы на более низких слоях стека. Сложно представить,  что интеграционными тестами мы будем проверять, а сделана ли корректная настройка системного времени c NTP-сервером. Скорее здесь мы обратимся к практике аварийных учений или Chaos Engineering. 

За счет наличия определенных сценариев на каждом слое Chaos Engineering часто путают с другими типами тестирования. 

Мы с  командой обычно показываем данную таблицу тем, кто задает вопросы о необходимости  Chaos Engineering. После этого все возражения о целесообразности ее использования снимаются.   

Value и работа с будущим, которое еще не случилось

Далее возникает вопрос −  как же нам показать Value от использования данной практики? 

По нашему опыту, он входит в ТОП-10 популярных вопросов практики, так как Chaos Engineering позволяет найти потенциальные уязвимости в автоматизированной системе. Но проявят они себя или нет - это уже что-то из теории вероятности, которая, как известно, относительна.  

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

Решением данного вопроса занимались многие игроки рынка, алгоритм расчета одновременно и прост, и сложен: 

  1. Выбираем испытуемую систему;

  2. Считаем общий downtime системы на похожие инциденты;

  3. Смотрим, как давно были такие инциденты;

  4. Сколько прибыли/пользователей было потеряно за период инцидента;

  5. Как много инженеров работало над тушением пожара во время инцидента и выработке костыля после инцидента;

  6. Другие затраты на фиксацию инцидента. 

В следующих частях поговорим об эволюции испытаний в Enterprise.

Автор: Дмитрий Якубовский

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