Нагрузочное тестирование. Gatling
В этом уроке не будет теории нагрузочного тестирования - это отдельная наука, которой можно посвятить целый курс. Чтобы глубже погрузиться в тему, можете посмотреть неплохие доклады Григория Кошелева "Как (не) надо проводить нагрузочное тестирование" и Алексея Рагозина "Теория и практика нагрузочного тестирования".
На занятии вы на практике пощупаете, как ведет себя наша система микросервисов под высокой нагрузкой и получить опыт работы с Highload. Он расширит ваш кругозор, трансформирует инженерное мышление и выведет ваши знания на новый уровень, а резюме пополнится весомым Senior-скилом.
С результатами сравнения поведения сервисов под такой нагрузкой, проведенной на машине автора курса, можно ознакомиться WebFlux vs Virtual Threads: что происходит при 2000 RPSв его статье на Хабр.
Gatling
- Подключение Gatling и ключевые концепции Gatling
- MenuAggregateByIdLoadTest
- MenuAggregateListLoadTest
- OrdersServiceLoadTest
Оптимизация конфигурации и запуск нагрузки
- Оптимизация окружения под нагрузку
- Оптимизация конфигурации Gateway Service
- Изменения в Docker Deployment
- Подготовка и запуск нагрузки
- Анализ результатов
Заключение
Следует учесть, что при локальном тестировании все компоненты системы (генератор нагрузки, шлюз, микросервисы, базы данных и мониторинг) запущены на одной машине и жестко конкурируют друг с другом за общую память, дисковую подсистему (I/O) и ядра процессора, в то время как в прод-окружении каждый сервис изолирован на выделенных серверах или по нодам кластера. Кроме того, локальная сеть через виртуальный коммутатор Docker (localhost) имеет практически нулевую задержку, но быстро упирается в лимиты операционной системы на количество параллельных TCP-сокетов, тогда как на проде реальная сетевая задержка компенсируется оптимизированным ядром Linux, балансировщиками и механизмами автоматического горизонтального масштабирования (HPA) под нагрузкой. Как результат, локальный тест измеряет физический потолок конкретного персонального компьютера и выявляет заторы в коде, а прод-тест оценивает реальную пропускную способность распределенной сетевой архитектуры.
На этом урок подошел к концу. Мы проделали большую работу: подготовили скрипты генерации высокой нагрузки и опробовали их на практике, но не стоит останавливаться. Вы можете протестировать и другие эндпоинты, а также можете комбинировать нагрузку, чтобы запросы шли одновременно на различные эндпоинты, но в этом случае придется либо горизонтально, либо вертикально масштабировать Gateway Service, который сейчас работает на пределе своих возможностей.
Идеи для развития проекта
- Чтобы улучшить производительность, можно внедрить принципы CQRS (Command Query Responsibility Segregation) и Event Sourcing
- Также можно подумать над внедрением поиска по сайту с помощью мощного механизма, предоставляемого ElasticSearch.
В современных реалиях де-факто стандартом такой системы является Kubernetes.
Ждем на 2-й части курса по специальной цене:
CloudJava-2: Деплой микросервисов в Kubernetes. Helm
Поздравляю тебя с завершением курса!
Сертификаты доступны в личном профиле по кнопке завершения.При этом все материалы и участие в этой группе остаются доступны, как прежде. Общаемся, делимся опытом.
После получения сертификата просто попрошу ответить на пару вопросов по курсу, чтобы сделать его лучше.