1. Введение
Архитектура микросервисов реализована в Qunar уже много лет, а количество микросервисных приложений достигло тысячи.По мере того, как связи вызовов между сервисами становятся все более сложными, часто происходят сбои, что приносит компании огромные экономические потери. стала важной задачей. Поскольку в 2010 году компания Netflix предложила повысить стабильность системы с помощью Chaos Engineering, Chaos Engineering зарекомендовала себя как эффективный способ найти слабые места системы и укрепить уверенность в способности и уверенности системы противостоять неконтролируемым условиям в производственной среде. С конца 2019 года Qunar также начал изучать хаос-инженерию, связанную с собственной технической системой.Представим наш практический опыт.
2. Выбор
Чтобы не повторять создание колес, мы в начале проекта исследовали инструменты с открытым исходным кодом, связанные с хаос-инжинирингом, и проанализировали характеристики собственной технической системы:
- В то время основными ресурсами были в основном KVM, а также изучалась контейнеризация, поэтому обе платформы нуждались в поддержке.
- Основным стеком технологий внутри компании является Java.
Основываясь на двух вышеперечисленных пунктах, а также активности сообщества и т. д., в качестве инструмента внедрения разломов был выбран ChaosBlade, а в качестве окончательного решения — консоль хаос-инженерии собственной разработки (в то время еще не было chaosblade-box).
3. Архитектура
Основываясь на внутренней системе компании, общая структура выглядит следующим образом:
По вертикали сверху вниз:
-
Управление службами, портал (платформа, которая предоставляет портреты приложений, CICD) предоставляет зависимости приложений, атрибуты приложений, ресурсы среды выполнения и другую информацию, а также может создавать отработки сбоев с помощью пользовательского интерфейса хаос-инжиниринга (отработки сбоев включают информацию о приложении, ресурсы приложения, ожидающие внедрения сбои). , и т.д.);
-
Инженерная консоль Chaos (консоль Chaos), обеспечивающая функции хореографии процессов задач для нескольких приложений и множественных сбоев, а также управление процессом репетиции сбоев;
-
Saltstack, оператор хаосблейда предоставляет возможность устанавливать и удалять хаосблейд;
-
Ресурсы приложения разделены на контейнеры, переносимые KVM и K8S.Система оркестровки репетиций сбоев взаимодействует с HTTP-службой, запущенной chaosblade, через Restful API для выполнения внедрения и восстановления сбоев.
Если смотреть по горизонтали:
-
Платформа автоматизированного тестирования в основном обеспечивает возможность регрессии онлайн-кейсов во время тренировок, а также отмеченные утверждения для сильных и слабых зависимостей;
-
Когда учения начинаются, консоль Chaos будет отслеживать сигналы основных индикаторов связанных приложений.Если есть какая-либо информация о сигналах тревоги, она уведомит соответствующее ответственное лицо и прекратит и возобновит учение, чтобы можно было вовремя остановить потерю.
4. Эволюция системы
Хаос-инженерия на Кунаре в основном прошла два этапа:
1. Построение возможности ввода ошибок. Основная проблема, решаемая на этом этапе, заключается в том, что пользователи могут вручную создавать учения по сбоям, чтобы проверить, соответствуют ли определенные аспекты системы ожиданиям, с помощью соответствующих стратегий устранения сбоев;
2. Обеспечить сильную зависимость от сцены, зависимой отметки, прочной проверки зависимости и автоматизации сильной и слабой зависимости от замкнутого цикла и использовать хаотичный проект для повышения эффективности управления микросервисом.
4.1 Поиск и устранение неисправностей
Моделирование возникновения сбоев посредством внедрения сбоев — основная возможность хаос-инжиниринга. На этом этапе мы в основном предоставляем три сценария внедрения ошибок, выключения машины, ошибок уровня ОС и внедрения ошибок приложения Java На этой основе мы также создали функции на основе сценариев.
4.1.1 Процесс учений
Типичный процесс тренировки выглядит следующим образом:
4.1.2 Трудности
- Неадекватные стратегии отказа с открытым исходным кодом
Chaosblade-exec-jvm предоставляет базовые возможности внедрения ошибок Java, а также предоставляет плагины для некоторых компонентов с открытым исходным кодом, но для внутренних компонентов компании этого все же недостаточно. Поэтому наши одноклассники по промежуточному программному обеспечению выполнили вторичную разработку, добавив AsyncHttpClient, подключаемые модули QRedis, связанные с внедрением ошибок, а также добавили функцию внедрения ошибок на основе точек вызова для HTTP DUBBO.
- Контейнеризация
В середине 2021 года Qunar начнет контейнерную миграцию приложений, и учения по сбоям также должны поддерживать контейнерные учения. В зависимости от оператора клинка хаоса выбираются следующие параметры:
В программе есть 3 основных проблемы:
- Установка и удаление агента
- Внедрение политик и восстановление
- Стоимость модернизации терминала управления
Исходя из сравнения вышеприведенных схем, окончательная реализация основана на схеме 3.
4.2 Автоматически замкнутый цикл сильной и слабой зависимости
4.2.1 Предыстория
На основе платформы детализации ошибок мы предоставляем функцию детализации ошибок в сценариях сильной и слабой зависимости:
- Отображение информации о зависимостях между приложениями, маркировка зависимостей
- Параметры политики обратной засыпки на основе информации о зависимостях
Однако проверка всех сильных и слабых зависимостей по-прежнему должна осуществляться людьми, поэтому мы объединили инструменты автоматического тестирования, чтобы разработать функцию автоматической маркировки сильных и слабых зависимостей, и завершили обслуживание сильных и слабых зависимостей через автоматизированный процесс, образующий замкнутый цикл.
4.2.2 Схема
Консоль хаоса периодически получает сведения о зависимостях приложений от платформы управления службами и создает отработки ошибок на основе стратегии создания исключений в соответствии с нижестоящим интерфейсом. Затем внесите ошибки в тестовую среду приложения, а затем используйте автоматизированную тестовую платформу для запуска случая и создания различий в реальном времени для проверки и, наконец, получения результата проверки. Консоль хаоса объединяет тестовое утверждение и журнал ошибок политики, чтобы определить, является ли текущий нижестоящий интерфейс сильно или слабо зависимым.
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 машин. велотренировка и предстартовая проверка.хорошая культурная атмосфера.
Наша следующая основная цель — автоматизировать случайные онлайн-тренировки, определить минимальный радиус взрыва через сервис-зависимые ссылки, установить устойчивое состояние для онлайн-учений и, наконец, реализовать регулярные случайные тренировки для всех ссылок на основных страницах компании. Хаос-инжиниринг в сфере управления услугами и построения стабильности обеспечивают техническую поддержку стабильного развития бизнеса компании.