Хаос-инженерная практика Кунара на основе ChaosBlade

облачный носитель
Хаос-инженерная практика Кунара на основе ChaosBlade

1. Введение

Архитектура микросервисов реализована в Qunar уже много лет, а количество микросервисных приложений достигло тысячи.По мере того, как связи вызовов между сервисами становятся все более сложными, часто происходят сбои, что приносит компании огромные экономические потери. стала важной задачей. Поскольку в 2010 году компания Netflix предложила повысить стабильность системы с помощью Chaos Engineering, Chaos Engineering зарекомендовала себя как эффективный способ найти слабые места системы и укрепить уверенность в способности и уверенности системы противостоять неконтролируемым условиям в производственной среде. С конца 2019 года Qunar также начал изучать хаос-инженерию, связанную с собственной технической системой.Представим наш практический опыт.

2. Выбор

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

  • В то время основными ресурсами были в основном KVM, а также изучалась контейнеризация, поэтому обе платформы нуждались в поддержке.
  • Основным стеком технологий внутри компании является Java.

Основываясь на двух вышеперечисленных пунктах, а также активности сообщества и т. д., в качестве инструмента внедрения разломов был выбран ChaosBlade, а в качестве окончательного решения — консоль хаос-инженерии собственной разработки (в то время еще не было chaosblade-box).

3. Архитектура

Основываясь на внутренней системе компании, общая структура выглядит следующим образом:

1.webpПо вертикали сверху вниз:

  • Управление службами, портал (платформа, которая предоставляет портреты приложений, CICD) предоставляет зависимости приложений, атрибуты приложений, ресурсы среды выполнения и другую информацию, а также может создавать отработки сбоев с помощью пользовательского интерфейса хаос-инжиниринга (отработки сбоев включают информацию о приложении, ресурсы приложения, ожидающие внедрения сбои). , и т.д.);

  • Инженерная консоль Chaos (консоль Chaos), обеспечивающая функции хореографии процессов задач для нескольких приложений и множественных сбоев, а также управление процессом репетиции сбоев;

  • Saltstack, оператор хаосблейда предоставляет возможность устанавливать и удалять хаосблейд;

  • Ресурсы приложения разделены на контейнеры, переносимые KVM и K8S.Система оркестровки репетиций сбоев взаимодействует с HTTP-службой, запущенной chaosblade, через Restful API для выполнения внедрения и восстановления сбоев.

Если смотреть по горизонтали:

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

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

4. Эволюция системы

Хаос-инженерия на Кунаре в основном прошла два этапа:

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

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

4.1 Поиск и устранение неисправностей

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

2.webp

4.1.1 Процесс учений

Типичный процесс тренировки выглядит следующим образом:

3.webp

4.1.2 Трудности

  • Неадекватные стратегии отказа с открытым исходным кодом

Chaosblade-exec-jvm предоставляет базовые возможности внедрения ошибок Java, а также предоставляет плагины для некоторых компонентов с открытым исходным кодом, но для внутренних компонентов компании этого все же недостаточно. Поэтому наши одноклассники по промежуточному программному обеспечению выполнили вторичную разработку, добавив AsyncHttpClient, подключаемые модули QRedis, связанные с внедрением ошибок, а также добавили функцию внедрения ошибок на основе точек вызова для HTTP DUBBO. 

  • Контейнеризация

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

1631849273(1).png

В программе есть 3 основных проблемы:

  • Установка и удаление агента
  • Внедрение политик и восстановление
  • Стоимость модернизации терминала управления

Исходя из сравнения вышеприведенных схем, окончательная реализация основана на схеме 3.

4.2 Автоматически замкнутый цикл сильной и слабой зависимости

4.2.1 Предыстория

На основе платформы детализации ошибок мы предоставляем функцию детализации ошибок в сценариях сильной и слабой зависимости:

  • Отображение информации о зависимостях между приложениями, маркировка зависимостей
  • Параметры политики обратной засыпки на основе информации о зависимостях

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

4.webp

4.2.2 Схема

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

5.webp

4.2.3 Трудности

1. Совместимость с Java-агентом
Платформа автоматизированного тестирования поддерживает режим записи и воспроизведения, при регрессионном тестировании можно использовать предварительно записанный трафик для имитации определенных интерфейсов, в этом режиме используется агент записи и воспроизведения на базе jvm-sandbox. Chaosblade-exec-jvm также является агентом, основанным на jvm-sandbox, поэтому при совместном использовании этих двух агентов необходимо решить некоторые проблемы совместимости.

  • Могут ли два агента действовать одновременно? jvm-sandbox добавляет функцию пространства имен в версии 1.3.0, что означает, что несколько агентов Java на основе jvm-sandbox могут быть включены одновременно, но предварительным условием является наличие разных пространств имен. Пространство имен по умолчанию, используемое по умолчанию в Chaosblade, решается путем изменения пространства имен в Chaosblade.
  • Когда АОП одновременно вырезает библиотеку, если Mr. mock работает, внедрение ошибок будет недействительным? Чтобы избежать этой проблемы, в агент записи и воспроизведения добавлена ​​функция черного списка.

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

5. Вклады с открытым исходным кодом

Chaosblade — основной проект с открытым исходным кодом, используемый в практике Chaos Engineering на Qunar.com. В процессе использования хаосблейд, хаосблейд-exec-jvm, хаосблейд-оператор имеют разную степень вторичной разработки и исправления ошибок, некоторые из ревизий были отправлены в официальное репо и объединены. В то же время я общался с сообществом Chaosblade и готов создать сообщество и внести свой вклад в сообщество open source.

6. Планирование будущего

В настоящее время наша платформа для отработки неисправностей поддерживает более 80 смоделированных тренировок по отключению электроэнергии в компьютерном зале, и в то же время было проведено более 500 ежедневных тренировок с участием более 50 основных приложений и более 4000 машин. велотренировка и предстартовая проверка.хорошая культурная атмосфера.

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

企业招聘内推创意长图 (5).jpg