Как я упоминал во вводной статье этого цикла, технический директор Amazon.com Вернер Фогельс следует простому принципу: «Всё то и дело отказывает» (Everything fails, all the time). Я часто говорю, что когда речь идет о программном обеспечении, ничего нельзя принимать на веру. У тех, кто постоянно готов к отказу любых ресурсов, которыми он управляет — будь то оборудование или программное обеспечение, — больше шансов на успех. Этот парадокс лежит в основе различных инструментов, которые случайным образом отключают или нарушают производственные ресурсы в целях проверки и гарантии того, что механизмы автоматического восстановления являются неотъемлемой частью инфраструктуры.
Наиболее известный из таких инструментов ― Chaos Monkey (см. ссылки на этот и другие инструменты в разделе Ресурсы), разработанный технической группой компании Netflix и выпущенный в этом году как ПО с открытым исходным кодом. В этой статье я познакомлю читателя с принципами и шагами по включению Chaos Monkey в инфраструктуру для гарантии того, что она сможет справиться с неизбежным будущим отказом.
Такие инструменты, как Chaos Monkey, стали результатом эволюции в направлении эфемерных сред (они обсуждались в предыдущем выпуске), вызванной товаризацией инфраструктуры, виртуализацией и облачными вычислениями. Раньше инфраструктура — с ее физическими машинами, сетевыми коммутаторами, межсетевыми экранами, балансировщиками нагрузки, серверами и другими ресурсами — представляла собой то, что инженеры группы однажды установили вручную. Затем они следили за ее использованием, постоянно внося ручные настройки для изменения конфигурации, повышения производительности и выполнения других действий. Такая практика уже не считается хорошей и становится просто невозможной для инфраструктуры любого нетривиального масштаба. Инструменты типа Chaos Monkey осуществляют контроль, диагностику, рандомизацию и разрушение инфраструктуры, чтобы обеспечить применение инженерами автоматизации для ограничения влияния на работу пользователей серьезной проблемы, когда она возникнет.
Вот общий список шагов, которые составляют процесс создания условий для непрерывного тестирования инфраструктуры.
- Запуск экземпляров: запускаются некоторые экземпляры вычислительных систем.
- Создание автономной инфраструктуры: настраивается инфраструктура, которая обнаруживает нездоровые экземпляры и запускает новые (основанные на одном и том же шаблоне ― см. ссылку в разделе Ресурсы на портал IBM, посвященный автономным вычислениям).
- Применение автоматического тестирования для гарантии автоматического восстановления: выполняются тесты в то время, когда инженеры готовы отреагировать и что-то поправить.
- Обучение и профилактика: реагирование на отказы и предотвращение их повторения.
Основой для инфраструктуры непрерывного тестирования и самовосстановления служит убеждение, что:
- инфраструктура обязательно откажет;
- эти отказы нужно изучать в производственных условиях, когда инженеры находятся на своих местах;
- когда отказ повторится, инфраструктура должна восстановиться автоматически, незаметно для пользователей.
Во многих отношениях это идеальное техническое воплощение организации, действительно стремящейся к непрерывному совершенствованию, или kaizen (см. радел Ресурсы).
Итак, этот новый вид инструментов обеспечения эластичности и сопутствующей им инфраструктуры имеет следующие особенности:
- мониторинг: постоянно запускаются процессы-демоны для диагностики ошибок;
- диагностика: в рамках системы мониторинга запускаются диагностические инструменты;
- нарушение: инфраструктура намеренно нарушается путем выключения экземпляров и других подрывных действий;
- рандомизация: для предотвращения ожидаемых результатов и предсказуемого поведения нарушения вносятся в инфраструктуру случайным образом;
- самовосстанавливаемая инфраструктура: хотя это и не входит в инструмент обеспечения эластичности, ожидаемое эластичное поведение заключается в том, что группа продолжает применять и совершенствовать автоматическую инфраструктуру, способную восстанавливаться после отказов незаметно для пользователей.
Компания Netflix интенсивно использует облачную инфраструктуру для потокового распространения видеофильмов среди пользователей и для решения других задач. В июле 2012 года сообщалось, что за июнь пользователи Netflix просмотрели более 1 миллиарда часов потокового видео. Иными словами, Netflix ― не тривиальный пользователей облака; компания эксплуатирует его в массовом масштабе.
В кратком руководстве на GitHub (см. "Краткое руководство по Chaos Monkey" в разделе Ресурсы) техническая группа Netflix описывает шаги по установке и эксплуатации Chaos Monkey. Следующий список содержит подробную информацию об инструментах, используемых Chaos Monkey. Не забудьте выполнить указанные в руководстве команды для удаления любых неиспользуемых ресурсов, иначе вам придется постоянно платить за них.
- Автоматическое масштабирование: Auto Scaling ― это специальная функция Amazon Web Services, которая позволяет наращивать и сокращать вычислительную мощность в зависимости от спроса — по определяемым пользователем правилам. Это специальная функция AWS, но подобную масштабируемую среду можно создать с помощью любой — частной или общедоступной — облачной инфраструктуры. Auto Scaling состоит из двух ключевых компонентов: пусковой конфигурации и Auto Scaling Group. Пусковая конфигурация определяет, как запускается экземпляр в составе Auto Scaling Group. Auto Scaling Group ― это набор экземпляров, к которым применяется конкретная конфигурация запуска.
- SimpleDB: SimpleDB — это база данных NoSQL, которую можно использовать для хранения данных. Необходимо определить домен SimpleDB. Chaos Monkey использует его для хранения состояния.
- Gradle: Gradle ― это инструмент сборки. Он используется для сборки Chaos Monkey и запуска контейнера приложения Jetty.
- Файл свойств: в файле simianarmy.properties нужно указать учетные данные и другие сведения о конфигурации.
- Jetty: резидентный сервер Jetty запускает Chaos Monkey, который нарушает инфраструктуру случайным образом.
Chaos Monkey ― это первый продукт технической группы Netflix из серии Simian Army. В таблице 1 приведен список других инструментов, которые Netflix намерена предложить в составе этой серии (см. раздел Ресурсы).
Таблица 1. Simian Army
| Наименование | Описание |
|---|---|
| Chaos Gorilla | Моделирует отключение всей зоны доступности |
| Conformity Monkey | Отключает экземпляры, которые не соответствуют практическим рекомендациям |
| Doctor Monkey | Выполняет проверку состояния (например, ЦП) |
| Janitor Monkey | Ищет неиспользуемые ресурсы и ликвидирует их |
| Latency Monkey | Создает искусственные задержки связи между клиентом и сервером |
| Security Monkey | Находит уязвимости, например, неправильно настроенные группы безопасности |
Это лишь несколько идей. Число других возможных способов применения сочетания мониторинга, диагностики, тестирования и преднамеренного разрушения в облачной производственной среде бесконечно.
В этой статье показано, как реально приступить к созданию автономной инфраструктуры, способной к самоисцелению, с помощью таких инструментов, как Chaos Monkey и облачная среда.
В следующей статье говорится об инфраструктуре, управляемой тестами. Читатель узнает, как применить к своей инфраструктуре методы разработки, управляемой тестами — обычно используемые разработчиками при программировании приложений — с помощью таких инструментов, как Cucumber.
Научиться
- Оригинал статьи: Agile DevOps: Unleash the Chaos Monkey.
-
Automation for the people: Continuous testing (Paul Duvall, developerWorks, март 2007 г.): статья о запуске автоматических тестов при каждом изменении в базе кода.
-
Failure as a Service (Haryadi S. Gunawi et al., University of California at Berkeley Technical Report, июль 2011 г.): статья о регулярном создании крупномасштабных учебных аварийных ситуаций в реальных установках.
-
Netflix streaming tops 1 billion hours in month for first time (Rachel King, CNET, июль 2012 г.): служба цифровой потоковой рассылки Netflix недавно преодолела важный рубеж: 1 миллиард часов видеопотока за месяц.
-
Краткое руководство по Chaos Monkey: руководство по эксплуатации Chaos Monkey в вашей среде (EN).
-
Kaizen: статья в Википедии с описанием этого подхода к непрерывному совершенствованию процессов, который возник в Японии.
-
Chaos Monkey Released Into The Wild (Cory Bennett and Ariel Tseitlin, Netflix, июль 2012 г.): анонс официального выпуска Chaos Monkey с открытым исходным кодом на GitHub.
Получить продукты и технологии
-
Simian Army: семейство Netflix Simian Army. Chaos Monkey входит в состав этого набора инструментов с открытым исходным кодом.
-
Bees with machine guns: утилита для снаряжения (создания) множества "пчел" (микроэкземпляров EC2) для атак (нагрузочных тестов) на цели (Web-приложения).
-
IBM Tivoli Provisioning Manager: Tivoli Provisioning Manager позволяет создавать динамическую инфраструктуру, автоматизируя управление физическими серверами, виртуальными серверами, программным обеспечением, системами хранения данных и сетью.
-
IBM Tivoli System Automation for Multiplatforms: Tivoli System Automation for Multiplatforms обеспечивает высокую готовность и автоматизацию приложений и ИТ-услуг по всей организации.

Пол Дюваль (Paul Duvall) является техническим директором компании Stelligent Incorporated – консалтинговой фирмы, которая помогает командам разработчиков оптимизировать гибкие методологии разработки программного обеспечения. Он также соавтор книги Continuous Integration: Improving Software Quality and Reducing Risk (Addison-Wesley, 2007 г.). Он принимал участие в создании книг UML 2 Toolkit (Wiley, 2003 г.) и No Fluff Just Stuff Anthology (Pragmatic Programmers, 2007 г.).