1. Предпосылки
С постоянным расширением бизнеса компании продолжает расти пользовательский трафик, а также увеличиваются масштаб и сложность системы НИОКР. Стабильность онлайн-сервисов становится все более важной, а проблемы с производительностью и емкостью сервисов становятся все более и более очевидными.
Следовательно, необходимо создать эффективную систему измерения давления, чтобы предоставлять безопасные, эффективные и реальные онлайн-услуги по измерению давления с полной связью для сопровождения онлайн-сервисов.
В отрасли было много статей о построении полносвязного нагрузочного тестирования, но лишь немногие из них представлены, когда речь идет о конкретной технической реализации. В этой статье мы хотим подробно рассказать о том, как устроена система измерения давления с полным звеном и как ее реализовать, от проектирования до всего практического процесса системы измерения давления с полным звеном. Я надеюсь дать некоторое представление и вдохновить студентов в той же отрасли с точки зрения практики приземления технологий.
2. Решения
2.1 Отраслевая практика
Стресс-тестирование с полной ссылкой широко практикуется в отрасли, например Amazon от Alibaba, PTS[1][2], Quake от Meituan[3][4], ForceBOT от JD.com[5], TestPG от AutoNavi [6] и т. д. ., все это дает нам богатый практический опыт и большое количество отличных технических решений. Мы широко использовали опыт крупных интернет-компаний в разработке полносвязных стресс-тестов, а также спроектировали и разработали полносвязную систему стресс-тестирования Rhino на основе бизнес-потребностей ByteDance.
2.1 Схема архитектуры
Платформа Rhino – это полносвязная платформа для стресс-тестирования на уровне компании. Ее цель – предоставить единое, полносвязное, безопасное, надежное, реальное и эффективное стресс-тестирование для всех подразделений компании, чтобы помочь предприятиям выполнить тестирование производительности. эффективно и удобно. Задачи, более точная оценка производительности онлайн-сервиса и рисков емкости.
Поэтому в начале проектирования платформы Rhino мы ставили перед собой следующие цели:
- Безопасность: все стресс-тесты проводятся онлайн, поэтому теоретически все стресс-тесты вредны для онлайн-пользователей. Платформа стресс-тестирования обеспечит безопасность стресс-тестирования с точки зрения статуса службы и данных стресс-тестирования.
- Эффективность: сократить расходы на написание сценариев стресс-тестирования, построение данных и затраты на мониторинг стресс-тестирования, а также максимально автоматизировать все этапы процесса стресс-тестирования.
- Точный: точный контроль давления, точный мониторинг измерения давления в линии, точные результаты измерений давления, а также данные о производительности и мощности.
- Высокий охват: необходимо поддерживать потребности в тестировании под давлением различных направлений бизнеса в компании, таких как поиск, реклама, электронная коммерция, образование, игры и т. д.
Rhino — это распределенная полноканальная система измерения стресса, которая может быть расширена по горизонтали для имитации реальных сценариев работы большого количества пользователей и проведения полного спектра тестов производительности для различных онлайн-сервисов. Он в основном разделен на модуль центра управления (Rhino Master), сервисный модуль канала измерения давления, модуль системы мониторинга и модуль двигателя измерения давления, как показано на рисунке. (Каждый модуль дополняется несколькими микрослужбами. Каждая сплошная линия на рисунке ниже представляет микрослужбу или несколько микрослужб).
3. Введение в основные функции
- Ядро создания полносвязной платформы стресс-тестирования включает в себя: структуру данных, изоляцию стресс-тестирования, управление ссылками, планирование задач, предохранитель стресс-тестирования, механизм стресс-тестирования, мониторинг стресс-тестирования и т. д. Ниже мы подробно опишем, как эти аспекты спроектированы и реализованы на платформе Rhino.
3.1 Структура данных
Структура данных является самым важным и самым сложным звеном в процессе измерения давления. Моделирование данных измерения давления напрямую влияет на точность результатов измерения давления.
- Для сканирования дефектов производительности службы, настройки производительности и новых запущенных служб рекомендуется создавать поддельные данные для стресс-тестирования указанного пути.
- Для онлайн-планирования емкости, проверки производительности и сравнения производительности рекомендуется использовать реальный онлайн-трафик, чтобы результаты стресс-тестов были ближе к реальной ситуации.
- В ситуациях, связанных с учетными записями пользователей и поддержанием статуса входа пользователя, рекомендуется использовать выделенную тестовую учетную запись для стресс-тестирования, чтобы не повлиять на реальных онлайн-пользователей.
базовая структура данных
Платформа измерения давления Rhino предоставляет большое количество методов построения данных для эффективного построения конкретных данных измерения фиктивного давления:
- CSV-файл: разбить данные по столбцам, имя поля — первая строка CSV-файла. Данные считываются в цикле построчного увеличения. Если задача стресс-теста разделена на несколько заданий, файлы данных также будут разделены, чтобы избежать дублирования данных между заданиями.
- Самоувеличение: все типы переменных являются числовыми. +1 каждый раз, когда создается давление, и оно будет перерабатываться с минимального значения после достижения максимального значения.
- Случайный: все типы переменных являются числами и генерируются случайным образом каждый раз при отправке давления.
- Константа: Константа, которую можно настроить на любое значение.
Аккаунт стресс-теста
В процессе нагрузочного тестирования некоторые запросы на нагрузочное тестирование требуют входа в систему и поддержания сеанса; кроме того, многие запросы на нагрузочное тестирование включают информацию об учетной записи пользователя UserID, DeviceID и другие данные. Создание учетных записей пользователей всегда было очень сложной задачей в процессе стресс-тестирования. Пользовательский центр, открытый платформой Rhino, создал специальную службу учетных записей для стресс-тестирования, которая отлично решает проблемы статуса входа и тестовых учетных записей в процессе стресс-тестирования. Конкретный процесс и пользовательский интерфейс показаны на рисунке ниже.
3.2 Изоляция измерения давления
Изоляция потока измерения давления и изоляция данных измерения давления, которые должны быть решены в изоляции измерения давления.
Изоляция трафика измерения давления в основном решается созданием среды измерения давления, такой как среда измерения давления в автономном режиме, или созданием плавательной дорожки/установки, которая полностью изолирует трафик измерения давления от онлайн-процессов. Преимущество в том, что трафик измерения давления полностью изолирован от онлайн-трафика и не повлияет на онлайн-пользователей. Недостатки: Машинные ресурсы и затраты на техническое обслуживание высоки, а результаты измерения давления необходимо преобразовывать для получения онлайн-производительности, и есть определенные проблемы с точностью результатов. В настоящее время в компании завершены опрессовки онлайн-кластера, ведется строительство онлайн-плавательной дорожки.
Изоляция данных измерения стресса в основном осуществляется путем окрашивания трафика измерения стресса, чтобы онлайн-служба могла определить, какой трафик является трафиком измерения стресса, а какой является нормальным трафиком, а затем выполняет специальную обработку трафика измерения стресса для достижения цели данных. изоляция. В настоящее время общая схема изоляции измерения давления платформы Rhino показана на рисунке.
маркер стресса
Метка измерения давления является наиболее распространенным способом окрашивания потока измерения давления.
- Для протокола RPC поле Key:Value будет добавлено в заголовок запроса в качестве маркера стресс-теста.
- Для HTTP и других протоколов тег Stress (ключ-значение) автоматически вставляется в заголовок запроса.
- Ключ тега стресс-теста: значение, где ключ — фиксированное значение Stress_Tag, но каждая задача стресс-теста имеет уникальное значение Stress_Value, которое в основном используется для разрешения конфликтов данных стресс-теста и выявления проблем с производительностью.
Метка измерения давления прозрачная передача
В настоящее время различные базовые компоненты, компоненты хранения и RPC-фреймворки в компании уже поддерживают прозрачную передачу оценок стресс-тестов. Принцип заключается в том, чтобы сохранить значение KV метки измерения давления в Контексте, а затем передать Контекст всем нижестоящим запросам, а нижестоящая служба может завершить обработку трафика измерения давления в соответствии с меткой измерения давления в Контексте. В реальном бизнесе преобразование кода также очень просто, нужно только прозрачно передать контекст.
Сервис Golang: запишите тег стресс-теста в Context.
Служба Python: используйте threading.local() для хранения контекста потока.
Службы Java: используйте ThreadLocal для хранения контекста потока.
Переключатель проверки давления
Чтобы решить проблему безопасности измерения давления в режиме онлайн, мы также представили компоненты реле измерения давления.
- Каждая служба и каждый кластер имеют переключатель проверки давления. Только когда переключатель измерения давления включен, трафик измерения давления может поступать в сервис, в противном случае он будет напрямую отклонен базовой микросервисной структурой, и бизнес-уровень его не воспримет.
- В каждой зоне IDC будет главный выключатель глобального испытания давлением. Только когда общий переключатель измерения давления включен, трафик измерения давления может проходить в этом IDC.
- Когда возникает проблема с измерением давления в сети, в дополнение к отключению потока измерения давления от источника, отключение переключателя измерения давления целевой службы также может немедленно заблокировать поток измерения давления.
Изоляция данных измерения давления
В нагрузочном онлайн-тестировании самая сложная проблема заключается в том, что ссылка на стресс-тестирование включает в себя операции записи.Как избежать загрязнения онлайн-данных и обеспечить, чтобы запросы на стресс-тестирование сохраняли тот же путь запроса, что и онлайн. В отрасли существует множество решений, наиболее распространенными из которых являются теневая таблица, теневая библиотека и смещение данных, как показано на рисунке [7].
Платформа Rhino имеет разные решения для разных хранилищ:
- MySQL, MongoDB: теневые таблицы. SDK определяет, является ли это трафиком для измерения стресса, и, если да, сопоставляет его с новым именем таблицы в соответствии с конфигурацией. Существует две стратегии конфигурации: одна предназначена для чтения и записи теневых таблиц, а другая — для чтения онлайн-таблиц и записи теневых таблиц.
- Redis: ключ Redis плюс префикс Stress. Например, Stress_Tag=Valuex, затем прочитайте и напишите Redis Key=Valuex_Key. Таким образом, может быть решена проблема конфликта данных между несколькими задачами стресс-тестирования. После завершения стресс-теста вам нужно только очистить или истечь префикс = Valuex.
- MQ: Для очередей сообщений у платформы Rhino есть две стратегии. Один — отбрасывать его напрямую, а затем отдельно выполнять нагрузочное тестирование, исходя из производительности очереди сообщений; другой — прозрачно передавать отметку о нагрузочном тестировании в Заголовке, а Потребитель будет выполнять специальную обработку в соответствии с отметкой о нагрузочном тестировании и бизнес-требования. По умолчанию применяется политика отмены, и бизнес-сторона может настроить ее в соответствии с требованиями.
- Другие хранилища, такие как ES, ClickHouse и т. д., имеют кластеры стресс-тестов. Во время стресс-тестирования запрос на стресс-тестирование будет отправлен в указанный кластер стресс-тестирования.
Преобразование измерения рабочего давления
Перед стресс-тестированием сервис должен пройти стресс-тестирование и проверку. Для услуг, которые не соответствуют требованиям измерения давления (например, изоляция данных измерения давления), требуется преобразование измерения давления.
- Проверка испытания давлением: для служб хранения, если переключатель испытания давлением не включен, любые операции чтения или записи, отправленные через запрос испытания давлением, будут отклонены. Если отказа нет, значит, при работе службы хранилища контекст измерения давления не доводится, и его нужно модифицировать.
- Преобразование стресс-тестирования. Преобразование стресс-тестирования является очень важным и сложным звеном в продвижении полнофункционального стресс-тестирования в Интернете. Для сервисов, которые уже были запущены, преобразование измерения давления, скорее всего, приведет к появлению новых ошибок, поэтому его часто сложно продвигать. Поэтому для решения этих проблем платформа Rhino имеет следующие решения:
А. Сведите к минимуму изменения кода и предоставьте полные инструкции и примеры кода, чтобы уменьшить нагрузку на RD и снизить вероятность ошибок кода.
b. Предоставить простой и удобный онлайн- и офлайн-инструмент отладки запросов на тестирование под давлением HTTP и RPC, чтобы облегчить проверку изменений кода.
C. Для новых проектов в начале проекта необходимо добавить преобразование измерения давления в спецификацию разработки проекта, чтобы впоследствии уменьшить количество изменений кода.
3.3 Управление ссылками
Прочесывание ссылок
Цепочка вызовов запросов очень важна для онлайн-нагрузочного тестирования:
- Предоставляет четкую карту трафика измерения давления и обеспечивает полный мониторинг канала.
- Завершите сортировку сервисных зависимостей и проверьте, есть ли у сервисов/промежуточных станций, от которых зависит опрессовка, условия для опрессовки, и нужно ли преобразовать опрессовку.
- Управление переключателем измерения давления Link, измерение давления вверх и вниз по течению, хорошо известное и т. Д.
Платформа Rhino завершает извлечение цепочки вызовов через систему журналов потоковой передачи компании. Когда услуга запрашивается или запрашивается в нисходящем направлении, она прозрачно передает LogID. Платформа RPC распечатает журнал цепочки вызовов (включая журнал RPC — журнал вызывающего абонента, журнал доступа — журнал вызываемого абонента), и все журналы будут содержать этот LogID. Извлечение цепочки вызовов завершается объединением всех сервисных журналов, переданных запросом через LogID.
На основе функции сортировки ссылок, предоставляемой системой журналов потоковой передачи компании, платформа Rhino была дополнительно оптимизирована для удовлетворения потребностей стресс-тестирования:
- Автоматическая сортировка: поскольку компания использует микросервисную архитектуру, ссылка вызова, стоящая за каждым запросом, настолько сложна, что ее невозможно выполнить только за счет ручного обслуживания. Пользователю нужно только предоставить LogID в запросе, и платформа Rhino может быстро отсортировать сервисные узлы, через которые проходит запрос, как показано на рисунке:
- Сортировка в реальном времени: из-за постоянных изменений онлайн-сервисов, дополнений онлайн и офлайн и т. д. цепочка вызовов одного и того же запроса также постоянно меняется. Платформа Rhino рекомендует использовать LogID в течение 1 часа для сортировки.
- Слияние ссылок с несколькими вызовами: тот же интерфейс, цепочка вызовов по разным параметрам не одинакова. Платформа Rhino автоматически объединит результаты объединения нескольких LogID, чтобы завершить цепочку вызовов и обеспечить точность и целостность результатов объединения ссылок.
Стресс-тестирование хорошо известно
Хотя платформа Rhino имеет множество мер безопасности для стресс-тестирования, также очень важно обеспечить беспрепятственный поток информации для крупномасштабного стресс-тестирования. Поэтому с точки зрения стресс-тестирования платформа Rhino также предоставляет множество решений:
- Вытягивание группы одним щелчком мыши: после сортировки ссылки вы можете вытащить группу одним щелчком мыши перед стресс-тестом, чтобы вытащить владельца вышестоящих и нижестоящих служб в ссылку на ту же группу, чтобы синхронизировать информацию стресс-теста.
- Известный стресс-тест: при выполнении каждого стресс-теста в группу известных стресс-тестов будет отправлено сообщение, например, количество запросов в секунду для стресс-теста, продолжительность стресс-теста и другая информация.
- Событие стресс-теста: когда начнется стресс-тест, платформа Rhino также отправит событие стресс-теста в очередь событий целевой службы, что удобно для быстрой оценки/определения того, вызвана ли проблема стабильности стресс-тестом, и уменьшить помехи онлайн-устранению неполадок RD.
Управление переключателем проверки давления
Перед опрессовкой необходимо включить переключатель опрессовки всего канала, иначе трафик опрессовки будет отклонен службой, что приведет к сбою опрессовки.
- Открытие одним щелчком: перед выполнением испытания давлением платформа Rhino может открыть переключатель испытания давлением всех узлов на канале одним щелчком мыши.
- Хорошо известно, что переключатель измерения давления включен: когда переключатель измерения давления включен, платформа Rhino автоматически передает соответствующую информацию соответствующему владельцу службы, чтобы убедиться, что владелец службы понимает соответствующую информацию об измерении давления, а выше по течению трафик измерения давления будет проходить через его сервис.
- Бесшумное отключение: по истечении срока действия переключателя измерения давления Rhino автоматически автоматически отключает переключатель измерения давления, чтобы обеспечить безопасность онлайн-сервисов.
Сервисный макет
Для сервисов (чувствительных сервисов), которые нельзя стресс-тестировать в цепочке вызовов, или сторонних сервисов, для целостности запросов на стресс-тестирование необходимо Mock этих сервисов. Общие решения Mock в отрасли:
- Измените бизнес-код и измените вызов службы на код ожидания. Преимущество: Низкая стоимость внедрения. Недостатки: фиксированное возвращаемое значение, большой объем кода и вмешательство в бизнес, трудно продвигать. Если фиктивная позиция находится относительно ниже по течению, очень сложно продвигать ее за пределы сферы охвата отдела.
- Общий фиктивный сервис. Общий MockServer будет настраивать разные правила Mock в соответствии с разными пользователями, выполнять соответствующую задержку ответа и возвращать соответствующие данные ответа. Преимущества: отсутствие вмешательства в код, отсутствие восприятия со стороны бизнеса. Недостаток: высокая стоимость внедрения.
Поскольку вся компания Byte использует архитектуру микросервисов, в стресс-тесте используется Mock с длинной ссылкой и без вмешательства в бизнес.
метод стал первым выбором. Платформа Rhino реализует эффективные и прозрачные для бизнеса макеты сервисов с помощью систем Service Mesh и ByteMock.
Перед выполнением стресс-теста платформа Rhino должна зарегистрировать правила окрашивания и пересылки в Service Mesh, а также зарегистрировать фиктивные правила в фиктивной службе. Затем введите метку красителя Mock в поток измерения давления, чтобы завершить сервис Mock:
- Цветная переадресация трафика на основе Service Mesh. Во-первых, необходимо внедрить цветовые метки переадресации в трафик измерения стресса и зарегистрировать соответствующие правила переадресации в Service Mesh. После того как Service Mesh обнаружит окрашенный трафик, он перенаправит его на указанный фиктивный сервер, как показано на рисунке.
- Сопоставление правил запросов на основе фиктивного сервера. Сначала зарегистрируйте фиктивные правила на фиктивном сервере, а также соответствующий ответ и задержку ответа. Когда Mock Server получит запрос, он ответит в соответствии с правилами, как показано на рисунке.
3.4 Режим сжатия
Минимальная единица планирования
В платформе Rhino агент стресс-тестирования является наименьшей единицей планирования. Задача стресс-теста обычно делится на несколько подзаданий, а затем отправляется нескольким агентам для завершения.
- Минимизируйте развертывание контейнеров и сократите потери ресурсов. Стресс-тест потребляет много ресурсов компьютера, обычно коэффициент использования ЦП и памяти превышает 80%. Однако во время выполнения без стресс-теста коэффициент использования ресурсов машины составляет менее 5%. Если много ресурсов занято в течение длительного времени, это приведет к большой трате машинных ресурсов. Все агенты стресс-тестирования развернуты в контейнерах, а спецификации ресурсов каждого контейнера как можно меньше, что может удовлетворить ежедневные требования стресс-тестирования, не занимая слишком много машинных ресурсов.
- Эксклюзивный агент для повышения стабильности выполнения стресс-теста: в одном контейнере запускается только один процесс агента, и один агент может быть одновременно занят только одной задачей стресс-теста, что позволяет избежать помех и конкуренции за ресурсы при многозадачности. и многопроцессорность, а также повышение стабильности стресс-теста.
- Динамическое расширение емкости для поддержки массового создания давления QPS: во время пикового периода измерения давления платформа Rhino будет временно запрашивать машинные ресурсы, быстро расширять емкость и завершать поддержку массового QPS. После завершения стресс-теста ресурсы компьютера будут немедленно высвобождены, чтобы сократить потери ресурсов.
В ходе стресс-теста Red Packet Spring Festival 2020 Rhino был временно расширен до 4000+ экземпляров для поддержки одного стресс-теста 3 кВт + QPS, но только 100+ экземпляров были развернуты на ежедневной платформе Rhino для удовлетворения потребностей в ежедневных стресс-тестах.
Интеллектуальное регулирование давления
- Динамическое выделение агентов стресс-тестирования: в процессе стресс-тестирования использование ЦП/памяти агентами стресс-тестирования часто слишком велико (> 90%), что приводит к тому, что давление не повышается и не достигается целевое количество запросов в секунду; или задержка стресс-тестирования слишком высока Проблема неточных результатов опрессовки. В процессе генерации стресса платформа Rhino будет отслеживать использование ЦП/памяти каждым агентом стресс-тестирования в режиме реального времени.Когда оно превышает пороговое значение (>90%), она будет динамически выделять дополнительные агенты, чтобы снизить нагрузку на каждого агента и обеспечить стабильность измерения давления.
- Интеллектуальная регулировка давления: в процессе измерения давления обычно необходимо постоянно регулировать размер QPS для достижения целевого значения производительности измерения давления. Этот процесс очень трудоемкий и занимает много времени. Платформа Rhino может интеллектуально регулировать размер QPS в соответствии с показателями производительности, установленными задачей измерения давления.Когда цель измерения давления будет достигнута, она автоматически объединится и прекратит измерение давления.
Моделирование ссылки стресс-теста
По умолчанию платформа Rhino разделяет тест давления полного канала на тест давления общедоступной сети и тест давления внутренней сети. Стресс-тест общедоступной сети в основном фокусируется на пропускной способности сети IDC, задержке, новом соединении шлюза IDC, переадресации и других возможностях; стресс-тест внутренней сети в основном фокусируется на стресс-тесте целевой службы, производительности и емкости целевого кластера, и Т. Д.
- Для проверки давления внутренней сети требуется тот же IDC для отправки давления по умолчанию, чтобы уменьшить помехи задержки сети.
- Для стресс-тестирования общедоступной сети платформа Rhino развертывает узлы агентов на узлах CDN компании и использует оставшуюся вычислительную мощность узлов CDN для завершения построения возможностей стресс-тестирования общедоступной сети.
Несколько компьютерных залов в одном городе, несколько компьютерных залов в разных местах
Платформа Rhino развернула кластеры агентов в различных IDC. Для стресс-тестирования услуг в каждом IDC по умолчанию выбирается ближайший агент стресс-тестирования, чтобы уменьшить влияние сетевых задержек на результаты стресс-тестирования, сделать результаты стресс-тестирования более точными и упростить обнаружение проблем стресс-тестирования.
Агент пограничного вычислительного узла
В дополнение к развертыванию в нескольких комнатах платформа Rhino также развертывает агенты стресс-тестирования на граничных вычислительных узлах для имитации запросов трафика от разных операторов в разных регионах, обеспечивая более близкое к реальной ситуации распределение источников и распределения трафика. На платформе Rhino вы можете выбирать разных операторов в разных регионах, чтобы инициировать трафик измерения давления из разных регионов страны.
3.5 Предохранитель для измерения давления
Чтобы справиться с риском онлайн-нагрузочного тестирования, платформа Rhino предоставляет два автоматических выключателя для устранения чрезвычайных ситуаций в процессе стресс-тестирования и снижения влияния на онлайн-сервисы.
Предохранители на основе мониторинга сигналов тревоги
Каждая задача стресс-теста может быть связана с правилами оповещения любой службы в цепочке вызовов. Во время выполнения задачи стресс-теста платформа Rhino будет активно отслеживать службу аварийных сигналов. Когда в службе в цепочке вызовов возникает тревога, стресс-тест будет немедленно остановлен. Для несвязанных аварийных сигналов платформа Rhino также запишет их, что удобно для стресс-тестирования локализации проблемы.
Метрические автоматические выключатели
Вы можете настроить индикаторы мониторинга и пороговые значения, при достижении которых измерение давления будет автоматически остановлено. В настоящее время поддерживает ЦП, память, стабильность основной ветки, журналы ошибок и другие пользовательские показатели.
Кроме того, в дополнение к механизму отключения, предоставляемому самой платформой Rhino, структура управления услугами компании также предоставляет множество дополнительных механизмов отключения, таких как переключатель измерения давления, отключающий трафик измерения давления одним щелчком мыши; защита от перегрузки. , который автоматически отбрасывает трафик измерения давления при перегрузке сервиса.
3.6 Модель задачи
HTTP-задачи
Для протокола HTTP, имея в виду Postman, все визуальные операции гарантируют, что каждый может начать работу, что значительно снижает порог и стоимость стресс-тестирования.
RPC-задачи
Для задач RPC Rhino также автоматически выполняет синтаксический анализ IDL, а затем преобразует его в формат JSON для пользовательской параметризации.
Пользовательский плагин
Для протоколов, отличных от HTTP/RPC, и задач стресс-тестирования со сложной логикой платформа Rhino также предоставляет комплексное решение — Go Plugin.
Плагин Go предоставляет способ динамической загрузки общих объектов языка Go, скомпилированных другими, путем непосредственного определения ряда соглашений или интерфейсов в основной программе и общей библиотеке, так что основная программа может динамически загружать общую библиотеку после компиляции для достижения высокой производительности. сменная система плагинов. Кроме того, разработчикам основной программы и разделяемой библиотеки не нужно совместно использовать код.Пока соглашение между двумя сторонами остается неизменным, больше нет необходимости перекомпилировать основную программу после модификации разделяемой библиотеки.
Пользователям нужно только реализовать кусок кода бизнес-логики для отправки и нажатия в соответствии с требованиями спецификации. Платформа Rhino может автоматически извлекать код и запускать компиляцию. И распространите скомпилированный SO-файл подключаемого модуля среди нескольких агентов стресс-тестирования. Агент может динамически загружать SO-файл и одновременно запускать его для достижения цели стресс-тестирования. Кроме того, Rhino создала базу примеров кода стресс-тестирования для распространенных сценариев стресс-тестирования Go Plugin. Новичкам в стресс-тестировании достаточно изменить код бизнес-логики, чтобы завершить стресс-тестирование. Это решает проблемы измерения давления, связанные с необычными протоколами и сложными сценариями измерения давления.
3.7 Механизм стресс-тестирования
Один агент Несколько двигателей
Наименьшей единицей планирования стресс-тестирования является агент стресс-тестирования, но на самом деле каждый агент имеет несколько механизмов стресс-тестирования, установленных для поддержки различных сценариев стресс-тестирования. Платформа Rhino добавляет уровень адаптации механизма измерения давления между данными измерения давления и механизмом измерения давления, который реализует разделение данных измерения давления и механизма измерения давления. Уровень адаптации механизма измерения давления будет генерировать данные измерения давления различных схем в соответствии с выбором различных механизмов измерения давления и позволит различным механизмам выполнять измерение давления, и они будут прозрачными для пользователей.
Механизм стресс-тестирования
Что касается механизма стресс-тестирования, у нас есть механизм стресс-тестирования с открытым исходным кодом и механизм стресс-тестирования собственной разработки.
Преимущества механизма измерения напряжения с открытым исходным кодом заключаются в том, что существует множество сопровождающих, богатые функции, стабильность и хорошая производительность, а недостатком является фиксированный формат ввода и сложность настройки. Кроме того, агент и механизм измерения напряжения с открытым исходным кодом обычно представляют собой разные процессы, а процесс обмена данными также имеет серьезные проблемы и его нелегко контролировать.
Преимущество саморазработанного движка стресс-тестов в том, что он обычно работает в едином процессе с Агентом, которым легче управлять, недостатком может быть чуть худшая производительность. Тем не менее, Golang, естественно, поддерживает высокий уровень параллелизма, поэтому разрыв в производительности между собственной разработкой и открытым исходным кодом не очевиден.
- Протокол HTTP: Gatling по умолчанию, производительность давления на одной машине очень хорошая, намного превосходящая Jmeter. Для интеллектуального измерения давления или динамической регулировки он переключится на собственный механизм измерения давления.
- Протокол RPC: Самостоятельно разработанный движок, в основном использующий сопрограмму Golang + пул соединений RPC для выполнения тестирования с высокой степенью параллелизма.
- Протокол GoPlugin: Самостоятельно разработанный движок, который использует динамически загружаемую функцию Golang Plugin для автоматической загрузки пользовательских подключаемых модулей измерения давления для завершения измерения давления.
3.8 Мониторинг измерения давления
Мониторинг клиентов
Благодаря системе мониторинга компании минимальная временная гранулярность составляет 30 секунд, а данные в пределах 30 секунд будут агрегированы в одну точку. На этот раз гранулярность по времени неприемлема для измерения давления. Поэтому платформа Rhino сама построила систему мониторинга клиентов.
- Каждый запрос будет иметь точку в зависимости от времени начала запроса.
- Внутри одного агента одна и та же задача и один и тот же интерфейс будут агрегироваться локально, а данные управления в течение 1 с будут агрегироваться локально и передаваться в Kafka.
- Служба мониторинга будет использовать данные управления в Kafka, повторно агрегировать данные, сообщаемые несколькими агентами, а затем записывать их в базу данных.
- Отчет о внешнем мониторинге извлечет сводные данные мониторинга из базы данных в режиме реального времени и нарисует кривую мониторинга в реальном времени.
- В процессе агрегации данных мониторинга трудно обработать вычисление PCT99 времени ответа на запрос:
- Алгоритм T-Digest, который в настоящее время используется платформой Rhino для расчета PCT99 за 1 секунду.
- Расчет PCT99 за весь период времени агрегируется по способу PCT & AGV. То есть PCT99 рассчитывается T-Digest за единицу времени, PCT99 всего периода времени представляет собой среднее значение PCT99 всех точек.
- Общее вычислительное решение было согласовано с алгоритмом мониторинга на стороне сервера компании, чтобы сократить разрыв между мониторингом на стороне клиента и мониторингом на стороне сервера, а также уменьшить факторы помех при анализе результатов стресс-тестов.
Мониторинг сервера
Мониторинг на стороне сервера напрямую связан с системой Metric компании.
- В процессе стресс-тестирования платформа Rhino предоставит панель мониторинга основных показателей всех узлов на всем канале и выделит узлы, которые могут подвергаться риску, чтобы обеспечить раннее предупреждение в режиме реального времени.
- Для каждого узла также предоставляются подробные графики мониторинга в режиме реального времени.
- Для каждого узла по умолчанию предоставляются основные индикаторы мониторинга, такие как CPU, Memory, QPS и Error_Rate.Пользователи могут изменять конфигурацию мониторинга на платформе Rhino и добавлять другие настраиваемые индикаторы мониторинга.
Профиль производительности
В процессе измерения стресса платформа Rhino также может собирать профиль производительности целевого сервисного процесса в режиме реального времени и отображать его в виде диаграммы пламени, что удобно для пользователей при анализе и оптимизации проблем с производительностью, как показано на рис. фигура.
4. Практика стресс-тестирования
Платформа стресс-тестирования Rhino — это универсальная полнофункциональная платформа стресс-тестирования для всех компаний ByteDance и всех студентов, изучающих исследования и разработки. Команда R&D платформы Rhino не только отвечает за задачи R&D платформы Rhino, но также сотрудничает с QA&RD для выполнения крупномасштабных проектов компании и стресс-тестирования производительности ключевых бизнесов.
4.1 Поддержка крупных проектов
Платформа Rhino будет активно участвовать и полностью поддерживать стресс-тестирование крупных проектов внутри компании. Среди них наиболее типичные проекты включают гала-концерт Весеннего фестиваля Доуинь, Арбузный миллион героев, Весенний фестиваль Red Packet Rain и другие мероприятия.
Среди них событие Byte Spring Festival Red Packet Rain, завершенное командой Rhino. Мероприятие Bytes Spring Festival Red Packet Rain инициируется всеми клиентами byte во время Весеннего фестиваля, например, серия сверхбольших мероприятий по дренажу красных пакетов, таких как розыгрыш карт для раздачи наличных, красный пакет кои и красный пакетный дождь. Огромный масштаб трафика, сильный всплеск трафика, высокая сложность бизнес-логики и сетевой архитектуры и т. д. — все это создает серьезные проблемы для платформы Rhino.
В мероприятии Red Packet Rain Весеннего фестиваля весь пользовательский трафик подключается к компьютерному залу агрегации на краю сети через выделенную линию оператора, а затем после фильтрации и проверки перенаправляется в основной компьютерный зал. Каждая IDC является резервной копией друг друга, и ее конкретный маршрут трафика показан на рисунке. Здесь необходимо не только проверить, могут ли внутренние службы выполнять ожидаемый процесс, но также проверить пропускную способность каждой выделенной линии, пропускную способность и возможности пересылки каждого шлюза, пропускную способность каждого IDC и пропускную способность каждого IDC. пропускная способность между ними.
С этой целью мы разделили весь стресс-тест на несколько этапов, чтобы упростить стресс-тестирование и уменьшить сложность обнаружения проблем стресс-тестирования:
- Пропускная способность, пропускная способность и производительность шлюза каждой комнаты агрегации проверяются с помощью теста коммутируемого доступа/теста давления CDN.
- Разверните агент стресс-тестирования в каждой вычислительной комнате агрегации, чтобы имитировать распределение пользовательского трафика и провести стресс-тестирование производительности серверной службы, развернутой в основной компьютерной комнате.
- Стресс-тестирование с одним интерфейсом и одним экземпляром, стресс-тестирование с одним портом и одним компьютером, стресс-тестирование с полной связью на одном устройстве на основе сценариев, стресс-тестирование с полным подключением и полным ресурсом на основе сценариев, а также производительность серверных служб проверяются поэтапно.
- Наконец, вся сеть будет протестирована для имитации пикового трафика реального дождя в красных конвертах Весеннего фестиваля, и будет проверена общая производительность системы.
Поддерживая эти крупномасштабные проекты, команда Rhino не только получила много знаний о бизнесе и архитектурном проектировании, но также узнала, что студенты бизнес-исследований думают о стресс-тестировании и как использовать платформу, помогая нам находить больше проблем с платформой и продвижение платформы для итеративной оптимизации.
4.2 Поддержка ежедневных задач стресс-тестирования
Ежедневная поддержка стресс-тестирования также является очень важной задачей для платформы Rhino. Для различных проблем, возникающих при ежедневном стресс-тестировании, мы приняли различные решения для их решения:
- Выделенная неделя дежурства по вызову, индивидуальное руководство.
- Подробная и полная база знаний по измерению давления не только знакомит с тем, как использовать платформу, но также включает информацию о том, как преобразовать измерение давления, как сформулировать план измерения давления и как локализовать проблему измерения давления.
- Идеальная система обучения производительности: регулярный обмен результатами тестирования производительности и профессиональное обучение стресс-тестированию для команды QA&RD.
4.3 Планирование онлайн-трафика
Платформа Rhino также реализует регулярное планирование онлайн-трафика для достижения цели автоматического стресс-тестирования онлайн-экземпляров [8]:
- Онлайн-трафик постепенно направляется в целевой экземпляр для проверки предела производительности экземпляра службы, а профиль производительности экземпляра предоставляется для анализа узких мест производительности экземпляра.
- Благодаря долгосрочному планированию трафика можно наблюдать за изменениями производительности экземпляров службы, чтобы отслеживать тенденции изменения производительности службы.
- Емкость всего кластера оценивается по производительности экземпляра при разных уровнях ресурсов. Выполните оценку пропускной способности службы и онлайн-оценку рисков.
- Основываясь на планировании трафика на основе дорожки, можно точно оценить емкость сервисного кластера.
Конкретная схема реализации выглядит следующим образом:
- Измените значение веса целевого экземпляра в балансировке нагрузки, постепенно увеличивайте значение веса и концентрируйте больше трафика на целевом экземпляре, пока не будет достигнут установленный порог остановки.
В настоящее время имеется доступ к более чем 500 микросервисам, и планирование трафика выполняется регулярно каждый день для отслеживания тенденции производительности онлайн-сервиса, как показано на рисунке ниже.
4.4 Измерение нормированного давления
Платформа Rhino в настоящее время внедряет нормализованное стресс-тестирование в компании.Путем периодического и синхронизированного автоматического полноканального стресс-тестирования можно достичь следующих целей:
- Мониторинг емкости кластера онлайн-сервисов в режиме реального времени для предотвращения снижения производительности сервиса.
- Контролируйте пропускную способность онлайн-канала в режиме реального времени, чтобы предотвратить снижение производительности канала.
В настоящее время нормализованное стресс-тестирование на платформе Rhino будет периодически выполнять задачи стресс-тестирования в автоматическом режиме и продвигать результаты стресс-тестирования. В процессе выполнения измерения давления переключатель измерения давления автоматически включается в соответствии с цепочкой вызовов, и инициируется поток измерения давления. Мониторинг показателей эффективности обслуживания в режиме реального времени и автоматическое завершение предохранителей измерения давления на основе метрик и мониторинга аварийных сигналов для обеспечения безопасности измерения давления.
В настоящее время несколько деловых сторон подключились к нормализованному стресс-тестированию, чтобы обеспечить стабильность онлайн-сервисов.
4.5 Стресс-тестирование в конвейерах DevOps
Когда услуга будет запущена, она будет предварительно выпущена с небольшими оттенками серого онлайн-трафика и полной онлайн-версией. В этом процессе мы можем перехватывать функциональные онлайн-дефекты службы с помощью онлайн-тестовых случаев и выпусков в оттенках серого. Однако перехват дефектов производительности недостаточно эффективен.
Из онлайн-системы отслеживания ошибок можно обнаружить, что многие дефекты производительности ускользнули в онлайн-режим из-за отсутствия стресс-тестирования производительности перед выходом в онлайн-режим.
Чтобы перехватывать различные дефекты производительности, платформа Rhino завершила интеграцию платформы DevOps. Зарегистрировав службу измерения давления в качестве атомарной службы на платформе DevOps, персонал отдела исследований и разработок может расположить узлы измерения давления в любом месте любого трубопровода, чтобы выполнять рутинные измерения давления перед подключением к сети. Стресс-тест в конвейере DevOps может не только помочь RD найти проблемы с производительностью в коде, но и провести сравнение с базовым уровнем производительности, чтобы обнаружить запах плохой производительности кода.
5. Резюме и перспективы
5.1 Резюме
Платформа стресс-тестирования Rhino была разработана менее чем за два года с момента ее создания, как показано на рисунке (ежемесячная статистика выполнения стресс-тестирования). В течение этого периода я очень благодарен всем совместным командам в компании, особенно команде архитектуры и команде мидл-офиса за их поддержку платформы стресс-тестирования.Без их поддержки построение полносвязного стресс-тестирования было бы быть трудным для завершения.
5.2 Будущее развитие
Глубокая настройка бизнеса
Первоначально была построена общая платформа измерения давления, которая в основном может удовлетворить ежедневные потребности в измерении давления бизнес-направления. Однако в процессе ежедневного сопровождения стресс-тестирования было выявлено, что при стресс-тестировании разных направлений бизнеса остается еще много пред- и пост-работ, которые необходимо выполнять вручную.
Как еще больше снизить затраты на преобразование измерений давления с точки зрения бизнеса, как снизить затраты на предварительную настройку данных среды измерения давления, как быстро очистить данные измерений давления, как быстро обнаружить проблемы с производительностью и т. д. Rhino Платформа измерения давления еще больше углубит бизнес в будущем.Осуществите более глубокое сотрудничество с основными деловыми сторонами, обеспечьте более глубокую настройку бизнеса, повысьте эффективность исследований и разработок и помогите развитию бизнес-направления.
Стресс-тестирование и планирование загрузки
Достаточно ли у бизнеса ресурсов в настоящее время, и какова его конкретная мощность; в соответствии с текущим ростом бизнеса, как долго хватит его машинных ресурсов?
Каково текущее использование сервисных ресурсов? Можно ли его оптимизировать? Как еще больше улучшить использование ресурсов и снизить затраты на машинные ресурсы?
Сколько ресурсов мне нужно, чтобы подать заявку на масштабное мероприятие? Не требует ли он измерения давления или может автоматически использовать онлайн-данные о трафике или ежедневные данные измерения давления, чтобы делать выводы об указанных выше проблемах?
Стресс-тестирование и SRE
Как обеспечить стабильность службы, как отслеживать снижение производительности службы и выдавать раннее предупреждение, а также разумна ли конфигурация мер управления службами, таких как ограничение тока, тайм-аут, повторная попытка и автоматический выключатель? И как сотрудничать с тестированием хаоса для проведения тренировок по аварийному восстановлению для обеспечения стабильности обслуживания и т. Д., Эти платформы Rhino будут дополнительно изучены.
6. Вербовка
В настоящее время команда Rhino все еще очень мала, и не хватает инженеров по исследованиям и разработкам, связанных с тестированием производительности и серверной разработкой.Заинтересованные студенты могут присоединиться. Электронная почта для доставки резюме:tech@bytedance.com; Тема письма: Имя - Годы службы - Rhino .
использованная литература
[1] Jumei.Taobao.org/2017/03/30/…
[2] тест и home.com/topics/1949…
[3] Специальности.Meituan.com/2018/09/27/…
[4] Специальности.Meituan.com/2019/02/14/…
[5] woohoo.open-open.com/worship/view/op…
[6] Woohoo.info Q.capable/article/NV F…
[7] Специальности.bytedance.net/articles/31…
[8] Woohoo. Usenix.org/conference/…
поделиться больше
Fastbot: умная обезьяна в движении
Анализ проблем с памятью камеры Android
Эволюция архитектуры собственной системы потокового воспроизведения ByteDance.
Добро пожаловать в "Техническую команду ByteDance"