Это первый пост Создайте реалистичные нагрузочные тесты с Jmeter серии. Эта серия поможет вам понять основные концепции тестирования нагрузки и создать реалистичные сценарии тестирования нагрузки с лучшими практиками JMeter.
- Основы тестирования нагрузки — мы здесь
- Лучшие методы тестирования нагрузки — скоро наступит
- Создайте свой первый тест на загрузку в Jmeter — скоро появится
- Реалистичное тестирование нагрузки с Jmeter — скоро появится
В этом первом посте мы узнаем о основах нагрузочного тестирования и о том, как мы можем использовать реалистичные нагрузочные тесты для оптимизации нашей системы.
Зачем нагрузочный тест?
В жизненном цикле разработки программного обеспечения нагрузочное тестирование часто считается роскошью. Прежде чем проверить, какой трафик он может нести, мы должны сначала заставить приложение работать. Но после развертывания появляются исправления и новые функции, а тестирование нагрузки продвигается дальше вниз по «списку прачечной».
Когда происходит инцидент, команда пытается бросить деньги на проблему (масштабируя серверы). Если инцидент достаточно важен, мы увидим, что некоторые разработчики перемещаются на задачу оптимизации: добавление индексов DB, исправление проблем с задачами и так далее.
Но разве не было бы неплохо знать, какие проблемы принесут повышенную нагрузку Еще до Вы развертываете производство?
Введите тестирование нагрузки
Тестирование на нагрузку тестирует, как конкретное приложение или система работает под заданной нагрузкой. Нагрузка измеряется по количеству запросов в секунду, которые мы отправляем в приложение. Чтобы создать реалистичный тест, мы создаем тестовые примеры, которые отражают общее поведение пользователей в приложении. В качестве примера, рабочий процесс ниже отражает простой рабочий процесс OneProduct Checkout для стартапа электронной коммерции.
- Пользователь включает в себя —
/api/users/signin
- Пользователь перенаправляется на домашнюю страницу —
/
- Нажимает продукт —
/продукт/8888
- Добавляет этот продукт в свою корзину —
/cart/add
- Нажимает Cart Cart —
/тележка
- Нажмите на оформление заказа —
/проверить
- Оплачивается через PayPal —
/платежи/PayPal
Компании обычно определяют несколько тестовых случаев, чтобы охватить различные модели поведения. Другие тестовые примеры для типичного запуска электронной коммерции включают просмотр многих продуктов или создание обзора продукта.
Затем мы выполняем тест нагрузку с определенным количеством виртуальных пользователей (VU). Например, нагрузочный тест с 50 VU имитирует поведение 50 человек, получающих доступ к вашему веб -сайту одновременно. В нашем примере рабочего процесса по проверке одного продукта мы моделируем, что 50 человек пройдут каждый шаг рабочего процесса в последовательности. Как только они будут выполнены с 7-ступенчатой последовательности, пользователь повторяет последовательность снова и снова, пока тест нагрузки не будет выполнен (то есть может быть через 20 минут). Следовательно, если бы 7 шагов заняли 30 -е годы, один VU завершил бы рабочий процесс 40x за 20 -минутный период.
Метрики
После тестирования нагрузки нам представлены 4 типа метрик, которые измеряют, как наш веб -сайт реагировал на тест на загрузку.
- Время отклика — Время, необходимое для ответа на запрос
- Пропускная пропускная способность — количество транзакций в минуту
- Коэффициент ошибок — % от общего запроса, который привел к ошибке
- Масштабируемость — измеряет, масштабируется ли инфраструктура в ответ на увеличение трафика
Чем выше vus нашего нагрузочного теста, тем хуже получат эти показатели. Но некоторые показатели будут хуже, чем другие, и это укажет вам в направлении того, каким будет ваше следующее исправление. После рассмотрения исправления повторили тест на нагрузку, чтобы измерить улучшение, вызванное решением проблемы. На этом этапе вы можете увидеть еще одну проблему, которую необходимо решить. Чтобы получить наибольшую ценность от тестирования нагрузки, вам может потребоваться повторить этот процесс в несколько раз больше, чтобы максимизировать оптимизации, которые вы можете сделать.
У меня есть результаты испытаний нагрузку. И что теперь? 🤷🏼♀
Работа не заканчивается результатами теста нагрузки. Нам нужно действовать на результатах и посмотреть, где находится узкое место. В конце концов, весь смысл выполнения нагрузочного теста заключается в том, чтобы знать, какую часть системы вы можете оптимизировать, чтобы вы могли увеличить количество нагрузки, которую может приспособить вашу систему.
Решение 1: бросьте больше денег 💰💰💰
Самый простой способ увеличить емкость вашей системы — добавить больше серверов или выбрать более мощный сервер. Мы смотрим на метрики производительности каждого компонента системы (то есть серверы, базу данных, кэширование и т. Д.) И видим, какой компонент имеет свой процессор или всплеск использования памяти во время нагрузочного теста. Это компонент, который мы обновляем или добавляем больше серверов.
Но это всего лишь мера остановки. Я работал с клиентами, которые просто продолжают увеличивать размер их экземпляра базы данных. В конце концов, мы достигли 24xlarge (самый большой размер дБ в AWS), и мы больше не могли обновляться, поэтому нам пришлось проявить более креативные.
В то время как увеличение вычислительной мощности служит краткосрочным решением, оно выходит по крутой цене (буквально — взорвался счет клиента). Другая стоимость заключается в том, что, не решая проблемы, вызывая проблемы, в первую очередь, больше технического долга выдвигается дальше в будущем.
Решение 2: Настройте приложение/конфигурацию веб -сервера
Когда мы разрабатываем, мы часто используем сервер приложений по умолчанию, который поставляется с платформой, которую мы используем. Для рельсов это сервер приложений Webrick по умолчанию.
Большинство из нас знают, что мы должны использовать сервер приложений, более подходящий для производства при развертывании. В рельсах часто используется сервер приложений PUMA. Хотя это большое обновление от Webrick, Puma будет работать быстрее, если мы потратим время, чтобы узнать, как настроить его конфигурацию.
- Некоторые серверы приложений имеют конфигурацию, которую необходимо регулировать на основе количества ядер ЦП, находится внутри машины.
- У некоторых есть предел количества потоков, который определяет, сколько сеансов может разместить каждая машина, и так далее.
Потратив время на изучение конфигурации вашего сервера приложений, действительно имеет большое значение для обеспечения того, чтобы ваша конфигурация позволила вашему серверу приложений в полной мере воспользоваться дорогими серверами, на которые вы его надеваете.
Некоторые веб -фреймворки (то есть рельсы) даже требуют веб -сервера, такого как Apache/Nginx, наряду с запуском сервера приложений Unicorn. Это дает нам два набора конфигураций для настройки и оптимизации.
Решение 3: Исправьте приложение 🛠⚙
Jmeter выпускает богатые отчеты на основе HTML, которые показывают четыре метрики на основе каждого.
На рисунке приведенного ниже отчета показано общее количество запросов, отправленных на конечную точку (показано ниже как «образцы»). КО показывает, сколько из них привело к ошибке. Многие различные статистики показаны для времени отклика для каждой конечной точки. Мы рассмотрим их в следующем посте.
С видом на точку зрения мы сужаем, какая конечная точка выполняет худшее в 4 метриках. Как только это будет идентифицировано, мы рассмотрим код и следите за тем, как запрос обслуживается от начала до конца. Я обычно ищу блоки кода, которые вычислительно дороги и пытаюсь это исправить. Затем я повторяю тест на загрузку, чтобы увидеть, есть ли улучшение. Я повторяю процесс, пока не доволен результатом.
Как вы уже догадались, это не лучший способ сделать это. Посмотреть на каждый кодовый блок, чтобы увидеть, стоит ли он вычислительно дорогой, не то же самое, что на самом деле знание, если это так. Есть так много других факторов, скрытых от нас, что, в лучшем случае, это просто интеллектуальные догадки.
Используйте профилировщики приложений
Чтобы решить эту проблему, компании устанавливают профилировщик приложений в свои системы. Эти профилировщики пробуют небольшой процент запросов, обслуживаемых каждой конечной точкой, и вычисляют, как долго каждый вызов в стеке. С помощью этих данных разработчик будет более уверен, какие детали должны быть оптимизированы.
Для профилировщиков я работал с Новая реликвия и Data Dog Анкет У них есть бесплатный вариант уровня, который вы можете использовать для определения проблемных разделов вашего приложения на высоком уровне. Чтобы воспользоваться более низким уровнем выборки функции, вам придется получить платную версию.
Решение 4: Создание индексов базы данных
Еще один угол, на который можно посмотреть, — это запросы базы данных. Последние базы данных RDS в AWS имеют функцию под названием Performance Insights. Это позволяет инженерам увидеть, какие запросы SQL занимают больше всего времени.
С этими знаниями мы можем пересмотреть то, как в приложении выполняются вызовы SQL. Наиболее распространенным решением является изучение схемы базы данных и посмотреть, создали ли мы соответствующий индекс базы данных для самых тяжелых запросов.
Быть преднамеренным в добавлении индексов
Индексы базы данных делают запросы чтения быстрее, имея вторую копию таблицы, где запросы конкретные столбцы более быстрее. Тем не менее, это происходит по некоторой цене. Каждый раз, когда мы пишем новые данные или изменяем существующие данные, база данных прилагает некоторые усилия для обновления индексов.
Если мы продолжим слепо добавлять новые индексы базы данных, у нас будет чрезмерное количество индексов. Индексы будут отработать записи базы данных, и нам будет сложнее оптимизировать.
Это все!
В GIST нагрузочное тестирование позволяет нам видеть проблемы, которые будут появляться только тогда, когда система находится под постоянной нагрузкой. Это дает нам возможность имитировать реальное поведение в безопасной среде, что позволяет нам опережать дорогостоящие ошибки.
Особая благодарность Аллену, моему редактору, за помощь в том, что этот пост станет более согласованным
Я рад взять ваши комментарии/отзывы об этом посте. Просто прокомментируйте ниже или напишите мне!
Оригинал: «https://dev.to/raphael_jambalos/load-test-your-website-with-apache-jmeter-part-1-concepts-4fn1»