Я уже рассказал вам об идее разрушения вещей для создания более устойчивых систем. Путем умышленного и контролируемого активизирования ошибок, мы получаем уверенность в том, что наши системы смогут справиться с теми ошибками прежде, чем они проявятся в конечном продукте.
Современные комплексные веб системы очень трудно управляемые. Они состоят из движущихся частей (веб серверы, базы данных, балансировщих загрузок, CDN, маршрутизаторы и многое другое) совместно работающих для формировании единого целого. Трудно, если почти невозможно, полностью понять, как все кусочки и частички взаимодействуют друг с другом при разных условиях. Именно поэтому нам нужно быть готовыми к обучению на своих ошибках.
В Gremlin мы считаем, что неудачный опыт – это предпосылка для создания устойчивых систем. А для нас идеальным воплощением данной идеи является Chaos Engineering. Этот пост запускает целую серию, созданную для представления вам Chaos Engineering. Сегодня мы начнем с основ, а позже исследуем лучшие наработки для их оптимального использования.
Определение Chaos Engineering
Что же такое Chaos Engineering?
Проще говоря, Chaos Engineering — это определенный подход к «умышленному взламыванию вещей», целью которого является научить нас чему-то новому о системах, производя эксперименты на них. Безусловно, наша цель заключается в необходимости выявить скрытые проблемы, которые могут возникнуть в производстве. Только тогда мы сможем реагировать на слабые стороны системы и делать ее устойчивой к ошибкам.
Chaos Engineering выходит за рамки традиционного тестирования (ошибки) в том, что он не только подтверждает предположения. Он также помогает нам в исследовании многих непредсказуемых вещей, которые могли бы произойти, и открыть новые свойства наших изначально хаотичных системах.
Хотя упомянутые концепции не являются новыми, первым, кто изначально легализировал Chaos Engineering как дисциплину, стал Netflix. (Netflix, как оказалось, — что-то большее, чем сервис видео трансляции. Компания, стоящая за сервисом — родоначальник в сфере автоматизированного тестирования ошибок, который разработал такие утилиты, как известный Chaos Monkey, который иногда прерывает инстансы EC2 в AWS.)
В принципах Chaos Engineering Netflix дало дисциплине следующее определение:
Chaos Engineering — дисциплина, экспериментирующая на распределенной системе, с целью создать уверенность в способности системы выдержать турбулентные условия в производстве.
В качестве Chaos-инженера вы тестируете способность системы справляться с событиями реального мира — ошибки сервера, прыжки трафика, поврежденные сообщения и т.д. — в серии контролируемых экспериментов. В соответствие с принципами эти «хаотичные» эксперименты обычно включают в себя 4 ступени:
- Определите нормальное поведение системы — ее стабильное состояние — основанное на измеримом выходе, таком как общая пропускная способность, частота ошибок, латентность и т. д.
- Постройте гипотезу об установившемся состоянии экспериментальной группы в сравнении со стабильной контрольной группой. (С практической точки зрения обе группы могут содержать одну и ту же систему, но в разный промежуток времени, т.е. до или во время эксперимента).
- Предложите экспериментальной группе моделировать события реального мира, такие как сбои сервера, искаженные ответы или всплески трафика.
Проверьте гипотезы сопоставляя устойчивое состояние контрольной и экспериментальной групп. Чем меньше разница, тем увереннее мы можем быть в том, что наша система устойчива. - Не стоит говорить, что решение любых проблем, выявленных таким способом — хорошая идея. Смысл симулирования потенциальных катастрофических событий снова и снова заключается в необходимости сделать их «мыльными пузырями» — неважными для нашей инфраструктуры и ее операторов.
Даже штурмовики имеют дело с Chaos Engineering.
Пример реальной жизни
В качестве базового примера, скажем, что вы хотите знать, что происходит, если по какой-то причине ваша база данных MySQL не доступна. Намеренное введение в систему ошибок так, что отдельные частицы вашей инфраструктуры становятся недоступными, является отличным способом узнать, как система взаимодействует. Кроме этого, это вполне реально может произойти в производственном процессе.
Предосторожность: вы никогда не должны проводить хаос-эксперимент в продакшене, если вы наверняка знаете, что он нанесет серьезный вред, вероятно при этом оказывая влияние на заказчиков — а вместе с ними и на вашу репутацию. Всегда первым делом попытайтесь исправить известные проблемы! Chaos Engineering требует начальный уровень устойчивости.
Возвращаясь к эксперименту. Вы предполагаете, что при отсутствии базы данных, ваше веб-приложение перестанет управлять запросами, немедленно возвращая ошибку. Чтобы сымитировать событие, вам нужно заблокировать доступ к серверу базы данных. Существует несколько способов достичь этого. Например, вы могли бы добавить правило iptable для переноса трафика на порт 3306 или соответствующим образом изменить группы безопасности облачного провайдера. (Или же вы можете использовать Gremlin, наш продукт, который поддерживает различные сетевые атаки, для воздействия трафика на ваше приложение и безопасно восстанавливает все по окончанию.)
Однако во время эксперимента что-то неожиданное случается: кажется, что веб-приложение отвечает сто лет. Ваши системные метрики подтверждают подозрение, что что-то не так. После некоторого исследования, вы найдете причину — неверно настроенный тайм-аут клиента — и исправите ее за считанные секунды.
Итак, ваши первоначальные гипотезы оказались неправильными. К счастью, это хорошая проблема, потому что вы только что обнаружили новую способность вашей системы — недостаток, на самом деле — о котором вы не знали до эксперимента! Дешевле решить эти проблемы сейчас, чем ждать, пока они выявятся в реальном рабочем процессе.
Исходя из нашего опыта, существует множество «низко висящих фруктов», которые вы можете «сорвать», когда вы начинаете работать с Chaos Engineering. Вы удивитесь, как много можно изучить из хаоса в общем и ошибки в частности.
Лучшие практики
В течение следующей пары недель мы продолжим нашу серию о Chaos Engineering, подробнее изучая некоторые лучшие наработки — автоматизация экспериментов, запуск их в продукции, уменьшение риска и т.д. — которые позволяют вам проводить лучшие эксперименты.
Мы надеемся, что вам понравилось наше представление Chaos Engineering — мощный подход к созданию устойчивых систем. Как всегда, лучший способ усвоить новые концепции — это практика. Начните сегодня и запустите ваш первые хаос-эксперимент.
About The Author
Виктор Карабедянц
ИТ директор (CIO), руководитель нескольких DevOps команд. Профессиональный руководитель проектов по внедрению, поддержке ИТ систем и обслуживанию пользователей.