Открытый исходный код генератора хаоса от Netflix, Chaos Monkey

Netflix демонстрирует, что компаниям, которые думают о переходе на облачную инфраструктуру, необходимо построить свои системы, чтобы они потерпели неудачу.

Фраза создан для неудач не вселяет уверенности, так как говорит о том, что продукт находится в нескольких шагах от взрыва.

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

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

В настоящее время технологические организации внедряют современные автоматизированные способы тщательного и полного тестирования программного обеспечения.

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

Одна из таких концепций, представленных Netflix, - это инженерия хаоса.

Chaos Engineering: тестирование инфраструктуры на уровне Netflix

Инжиниринг хаоса был представлен Netflix, одним из крупнейших сервисов подписки на медиа с около 150 миллионами платных подписок по всему миру.

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

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

  • Среда разработки: где программа разрабатывается / кодируется.
  • Тестовая среда: где продукт копируется и тщательно тестируется, чтобы обеспечить ожидаемую работу.
  • Среда приемочного тестирования: где клиент тестирует систему и проверяет, соответствует ли она ожиданиям или нет.
  • Производственная среда: рабочая среда, в которую попадает продукт после прохождения приемочных испытаний.

Что такое Chaos Engineering?

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

Вслед за этими преимуществами следует срочный вопрос: «Насколько мы можем быть уверены в сложных системах, которые мы запускаем в производство?»

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

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

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

Потребность в инженерии хаоса

Вот несколько моментов, которые оправдывают создание хаоса:

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

Разница между Chaos Engineering и тестированием

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

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

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

Вход Netflix в область Chaos Engineering

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

Команда инженерных инструментов Netflix предложила новаторскую идею тестирования отказоустойчивости системы без какого-либо влияния на обслуживание клиентов.

Они создали инструмент Обезьяна Хаоса, вдохновленный идеей обезьяны, которая входит на ферму и случайным образом уничтожает предметы.

Из блога Netflix Technology:

«Chaos Monkey - это инструмент, который случайным образом отключает наши производственные экземпляры, чтобы убедиться, что мы сможем пережить этот распространенный тип сбоя без какого-либо воздействия на клиента».

В отличие от физической среды предполагается, что облачный переход Netflix имеет больше сбоев, поскольку он абстрактен и распределен по своей природе. Причина запуска инструмента Chaos Monkey в системе Netflix проста:

Главное в облаке - избыточность и отказоустойчивость. Поскольку ни один компонент не может гарантировать 100% безотказной работы (и даже самое дорогое оборудование в конечном итоге выходит из строя), мы должны разработать облачную архитектуру, в которой отдельные компоненты могут выходить из строя, не влияя на доступность всей системы. По сути, мы должны быть сильнее, чем наше самое слабое звено. - Технический блог Netflix

После успеха инструмента Chaos Monkey команда Netflix создала набор инструментов, поддерживающих принципы разработки хаоса, и назвала его Simian Army, чтобы проверить надежность и отказоустойчивость инфраструктуры AWS.

Прямо сейчас проект ушел в отставку, и новый проект - это только Chaos Monkey.

Список инструментов, разработанных Netflix

  • Обезьяна хаоса
  • Обезьяна с задержкой
  • Доктор Обезьяна
  • Соответствие Обезьяна
  • Дворник Обезьяна
  • Обезьяна безопасности
  • Хаос Горилла
  • 10–18 Обезьяна

Все это инструменты хаоса, которые постоянно тестируют систему на предмет всевозможных сбоев, повышая уровень уверенности в способности системы выжить.

Как можно использовать Chaos Engineering в облачной инфраструктуре?

Вы можете сказать: «Мы не Netflix, и у нас нет такой крупномасштабной системы или огромной клиентской базы, как Netflix».

Это правда. Но со временем он эволюционировал и не ограничивается одной организацией или цифровой компанией, такой как Netflix.

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

Четыре основных шага к реализации Хаос-Инжиниринга

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

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

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

При обнаружении слабых мест команда устраняет эти проблемы до того, как они станут общесистемными.

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

Конечная цель Chaos Engineering: откройте для себя сценарий «Что, если»

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

Это очень подходящая практика в современных подходах к разработке программного обеспечения, таких как DevOps и архитектура микросервисов.

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

Компании, использующие инструменты хаоса

  • Facebook
  • Google
  • Microsoft
  • Амазонка
  • Twilio
  • LinkedIn

Chaos Engineering и DevOps: лучше разбирайтесь в своей системе во время частых выпусков

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

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

За последние несколько лет мы стали свидетелями радикальных изменений в структурах и методах разработки программного обеспечения. На смену монолитной архитектуре пришла облачная и микросервисная архитектура для быстрого создания программного обеспечения.

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

Chaos Engineering: больше, чем превентивный механизм

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

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

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