Перфоманс Лаб

нагрузочное тестирование
тестирование
6 сентября, 2024

Как тестировать HTTP/2: путь к быстрому и эффективному веб-приложению

Время чтения: 11 мин.
6 сентября, 2024
Автор:
Сергей Ломакин
Подробно рассмотрим ключевые аспекты тестирования HTTP/2, от настройки тестовой среды, проведения нагрузочных тестов, анализа результатов и до оптимизации производительности. Статья дает читателю глубокое понимание особенностей HTTP/2 и практические рекомендации по эффективному тестированию приложений, использующих этот протокол.

Контент будет особенно полезен тем, кто:

01
Переводит свои веб-приложения на HTTP/2 и хочет убедиться в корректности реализации.
02
Планирует оптимизировать производительность сайтов и приложений с помощью возможностей HTTP/2.
03
Разрабатывает стратегию тестирования для проектов на HTTP/2.
04
Хочет разобраться в тонкостях работы с новым протоколом.

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

Что такое HTTP 2.0

HTTP/2 представляет собой эволюцию привычного нам HTTP/1.1. Главные отличия новой версии от предыдущей — мультиплексирование, сжатие заголовков, Server Push и приоритизация потоков. Эти особенности позволяют существенно ускорить загрузку веб-страниц и оптимизировать использование сетевых ресурсов. Однако новые возможности протокола также усложняют и его тестирование.

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

Пристальное внимание при тестировании протокола нужно обратить и на совместимость. Протестируйте ваше приложение в различных браузерах и на разных устройствах. Не все клиенты одинаково хорошо поддерживают HTTP/2, поэтому важно убедиться, что ваш сайт корректно работает везде, автоматически переключаясь на HTTP/1.1 при необходимости. 

Подытожим главное

HTTP/2:
01
Имеет бинарный протокол. Он более эффективен в обработке и менее подвержен ошибкам по сравнению с текстовым протоколом HTTP/1.1. 
02
Работает с сервером напрямую. Сервер может отправлять ресурсы клиенту до того, как они будут запрошены.
03
Уменьшает объем передаваемых данных.
04
Позволяет клиенту указывать приоритет для различных запросов.
05
Позволяет отправлять несколько запросов и получать ответы асинхронно по одному TCP-соединению.
Нагрузочное тестирование HTTP/2 имеет свои особенности:
01
Возможно тестирование производительности при большом количестве одновременных соединений.
02
Для обзора эффективности работы может потребоваться оценка эффективности мультиплексирования.
03
Помогает и измерение влияния сжатия заголовков на пропускную способность.
04
Анализ поведения системы при интенсивном использовании Server Push.

Не тратьте время и другие ресурсы на поддержку собственной тестовой среды для HTTP/2!

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

еще один критический момент в тестировании сетевого протокола. HTTP/2 требует использования HTTPS, поэтому обязательно проверьте корректность настройки SSL/TLS сертификатов и шифрования. Убедитесь, что все ресурсы загружаются по защищенному соединению.

Сценарная нагрузка для HTTP/2 с использованием JMeter

При создании сценариев нагрузки для HTTP/2 важно учитывать реальные паттерны использования вашего приложения, потому что у каждого приложения они могут быть абсолютно разными. 

Например, в ходе одного из проектов “Перфоманс Лаб» выяснилось: заказчик использует протокол HTTP 2.0. А  Jmeter (и Fiddler Classic) — не умеет записывать трафик по этому протоколу. 

В этой инструкции изложен наш подход к решению этой проблемы. Кратко его можно описать так:

Взглянем на эту цепочку чуть подробнее.
Шаг 1: Запись трафика с помощью Devtools браузера


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

01
Откройте Devtools вашего браузера, нажав F12.
02
Перейдите в раздел «Network» и убедитесь, что опция «Disable Cache!» включена.
03
В нижней части окна будет отображаться общее количество запросов. Записывайте трафик согласно сценарию, все шаги сразу, не пытайтесь отдельно шаг записывать. Для последующего анализа и разбиения трафика на транзакции, необходимо записывать количество запросов после каждого шага.
04
После завершения записи, нажмите «Export HAR» или «Save all as HAR».
Шаг 2: Анализ трафика в Fiddler Classic separate HTTP 1.0 from 2.0

Теперь, когда у вас есть запись трафика, вам нужно проанализировать его в Fiddler Classic. Для этого выполните следующие действия:
01
Импортируйте сессии в Fiddler, используя функцию «Import Sessions» и выберите формат «HTTP Archive».
02
Отсортируйте запросы по хосту. Удалите все запросы к следующим хостам, которые были согласованы с заказчиком. Например, в нашем случае это будет так:
  • cdn.pendo.io
  • d1a2hshh502qb8.cloudfront.net
  • data.pendo.io
  • data.qa5.welldata.net
  • edgelink-staging.novcds.io
  • edgemanager-qa.novcds.io
  • fonts.googleapis.com
  • login.okta.com
  • maxcore-staging.novcds.io
  • maxmt-staging.novcds.io
  • ok11static.oktacdn.com
  • optiflex-staging.novcds.io
  • rigsentry-staging.novcds.io
  • www.google-analytics.com
  • www.googletagmanager.com
03
Отсортируйте сессии по порядку. Используйте свои записи с общим количеством запросов между каждой транзакцией, чтобы выделить соответствующие сессии красным цветом.
04
Найдите и выделите все HTTP/1.1 сессии. Поиск только по Request Headers, также снимите галку с Unmark old results.
как тестировать http-2 1
05

На момент тестирования HTTP/1.1 трафик был только с двух хостов:

  • login.serv11.com — при нажатии кнопки «Sign in» происходит переадресация на этот хост для ввода логина и пароля.
  • maxnotifications-staging.servcds.io — на всех страницах в правом верхнем углу знак уведомления колокольчик. Сервер посылает запрос каждые 2 минуты на наличие уведомлений.
06
Отделите трафик для Refresh Cycles. Более подробно описано в статье о Refresh Cycles.
07
Удобно иметь два файла har: общий трафик и трафик только HTTP/1.0 сессий. Сохраните их, используя функции «File — Export Sessions — all sessions — HTTP archive v1.2».
Шаг 3: Конвертируем har to jmx

Теперь вам нужно преобразовать файлы har в формат jmx, который может быть использован в Jmeter. Для этого выполните следующие действия:
01
Используйте конвертер https://converter.blazemeter.com/, чтобы преобразовать все сессии в «HTTP Request» Samplers, который поддерживает только HTTP/1.1.
02
Должно получиться два jmx файла с общим трафиком и только с HTTP/1.1.
Шаг 4: Jmeter подготовка jmx

Прежде чем продолжить работу с jmx файлами, важно правильно подготовить их в Jmeter. Выполните следующие шаги:
01
Откройте Jmeter и используйте функцию «File — Merge» для объединения jmx файлов с общим трафиком. Удалите все, кроме Thread Group, и сохраните как новый Test Plan. Трафик только с HTTP/1.1 сохраните отдельно.
02
Вам понадобится BlazeMeter — HTTP/2 Plugin для работы с HTTP/2.
Шаг 5: Notepad++ Преобразование Samplers

Теперь вам нужно преобразовать все «HTTP Request Sampler» в «bzm — HTTP2 Sampler» в вашем jmx файле. Для этого выполните следующие действия:
01
Откройте ваш jmx файл с общим трафиком в Notepad++ и регулярными выражениями преобразуйте все «HTTP Request Sampler» в «bzm — HTTP2 Sampler».
02
Обратите внимание на кодировку файла. Из файлов с разной кодировкой автозамена пройдёт неправильно и Jmeter не сможет открыть новый jmx. Используйте функцию «Edit — EOL Conversion — Unix(LF)» для корректного преобразования.
После выполнения всех этих шагов, вы успешно подготовили ваш проект для работы с HTTP 2.0 и готовы к дальнейшему тестированию.

Как анализировать результаты и делать дальнейшую оптимизацию

После выполнения тестов результаты интерпретируются, затем они же используются для оптимизации производительности. Несколько ключевых аспектов, на которые следует обратить внимание, рассмотрим далее.

Время отклика

1/5
Сравните время отклика для различных запросов в HTTP/2 и HTTP/1.1. Если все хорошо, то HTTP/2 должен показывать заметное улучшение, особенно для множества небольших запросов.

Использование нескольких соединений

2/5
Проанализируйте, насколько эффективно используется мультиплексирование. Так количество TCP-соединений должно быть значительно меньше, чем количество запросов.

Приоритизация

3/5
Убедитесь, что критические ресурсы (например, те же стили и JavaScript) загружаются с высоким приоритетом и не блокируются менее важными запросами.

Server Push

4/5
Если используете Server Push везде и где только можно, то лучше проверьте: действительно ли он улучшает производительность, ведь часто чрезмерное использование push может привести и к обратному эффекту.

Сжатие заголовков

5/5
Оцените эффективность сжатия заголовков при большом количестве запросов. Скорее всего, здесь будут типичные проблемы.

Оптимизация на основе результатов

На основе анализа результатов можно посоветовать несколько универсальных шагов для дальнейшей оптимизации. 

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

И, пожалуйста: добавляйте Server Push только для действительно необходимых ресурсов.

Расширенные сценарии тестирования

Для более глубокого тестирования HTTP/2 предусмотрены и более сложные сценарии. К таким можно отнести тестирование долгоживущих соединений, например.
01

Тестирование долгоживущих соединений

Создайте сценарий, имитирующий долгосрочное взаимодействие пользователя с приложением.
02

Тестирование приоритизации и зависимостей

Создайте сценарий, который проверяет правильность обработки зависимостей и приоритетов!

Мониторинг и анализ

Для полноценного анализа производительности HTTP/2 важно использовать дополнительные инструменты мониторинга. Здесь всё индивидуально но обычно используются:
01

Wireshark

Для детального анализа сетевого трафика, проверки правильности работы HTTP/2.
02

Chrome DevTools

Для анализа загрузки ресурсов, отслеживания выполнения JavaScript на стороне клиента.
02

Серверные инструменты мониторинга

Например, Prometheus или Grafana — для отслеживания серверных метрик.

Альтернативные способы тестирования HTTP/2

Для тестирования HTTP/2, как мы уже поняли, существует ряд полезных инструментов. Браузерные инструменты разработчика позволяют увидеть, какие ресурсы загружаются по HTTP/2 и как это влияет на производительность. Среди самых популярных сервисов выделяют Wireshark (уже упоминали выше) и H2load. Первый позволяет проанализировать сетевой трафик на низком уровне, а второй — подойдет для нагрузочного тестирования, благодаря способности симулировать множество одновременных подключений.

Особенности Wireshark

Фильтрация и анализ потоков:

  • Для отображения только трафика HTTP/2 используйте фильтр http2.
  • Для более точного анализа фильтруйте по ID потока: http2.stream_id == <number>, где <number> — ID нужного вам потока.
  • Потоки HTTP/2 в Wireshark представлены в виде дерева, где можно отслеживать запросы и ответы.
  • Заголовки и данные разделены на кадры, которые можно найти, используя термины «headers» и «data» в захвате пакетов.

Изучение заголовков и данных:

  • Анализируйте заголовки и данные кадров, чтобы получить информацию о запросе/ответе, методе HTTP, URL, кодах состояния, типах контента и т.д.

Извлечение файлов и HTTP/3:

  • Извлечение файлов из трафика HTTP/2 в Wireshark возможно, но вручную и может быть трудоемким.
  • Network Miner — инструмент, позволяющий извлекать файлы из нешифрованного трафика HTTP/2.
  • Wireshark имеет трудности с декодированием трафика HTTP/3, но будущие обновления могут улучшить эту функцию.
Важно:

Для корректного тестирования HTTP/2 рекомендуется использовать Wireshark с актуальной версией, поддерживающей функции протокола.

Тестирование HTTP/2 с h2load

h2load —

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

Как использовать:

  1. Скачайте h2load, установите необходимые библиотеки.
  2. Запустите h2load https://your-server.com (измените your-server.com на свой).
  3. По умолчанию: 1000 запросов на 10 секунд.
  4. Измените параметры флагами (см. h2load —help).
  5. h2load покажет статистику (время ответа, пропускная способность, коды ошибок).

Особенности программы:

  • Сценарии для сложных тестов.
    Тестирование серверов HTTP/2 с gRPC.
  • Открытый исходный код — можно модифицировать.

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

Проблемы

Типичные проблемы при внедрении HTTP/2 включают неправильную конфигурацию сервера, проблемы с SSL/TLS и несовместимость с определенными браузерами. Будьте готовы столкнуться с этими трудностями и заранее держите в голове план их решения. Например, убедитесь, что ваш веб-сервер (Apache, Nginx) правильно настроен для работы с HTTP/2 и что на нём включены все необходимые модули.

Оптимизация для HTTP/2 требует пересмотра некоторых устоявшихся практик веб-разработки. Например, объединение JavaScript и CSS файлов может быть менее эффективным в HTTP/2, так как протокол отлично справляется с параллельной загрузкой множества мелких файлов. Протестируйте различные подходы к организации ресурсов и выберите оптимальный для вашего случая.

Server Push —

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

Приоритизация потоков в HTTP/2 позволяет указать важность различных ресурсов. Протестируйте различные стратегии приоритизации, чтобы найти оптимальный баланс между загрузкой критически важного контента и второстепенных ресурсов.

Регулярное тестирование HTTP/2 необходимо для поддержания высокой производительности вашего веб-приложения. Но не стоит забывать и о других аспектах тестирования. 

Вместо того чтобы тратить время на освоение тонкостей тестирования HTTP/2, доверьте эту задачу профессионалам. Так получится сосредоточиться на оптимизации вашего приложения, получая при этом надежные данные о его производительности в условиях реального использования HTTP/2. «Перфоманс Лаб» проведет комплексное тестирование, который поможет выявить, а затем устранить ошибки, улучшить его производительность, повысить удобство использования, безопасность и другие важные аспекты вашего проекта.

Закажите нагрузочное тестирование у тех, кто занимается им много лет

Увеличьте производительность вашей системы до максимума и застрахуйте свой бизнес.