digital-garden/source/курсы/otus/Архитектор высоких нагрузок 2019/Нагрузочное тестирование.md

120 lines
6.3 KiB
Markdown
Raw Normal View History

2024-06-13 21:01:37 +03:00
---
parents:
- "[[Архитектор высоких нагрузок - OTUS 2019]]"
date: 2024-01-28
zero-link:
- "[[00 Архитектура ПО]]"
---
Интересные мысли
- Отчеты по тестированию это чувствительные данные. Если отчеты попадут на в те руки, то они могут привести к подготовленной атаке на систему, что понесет за собой большие убытки. Поэтому отчеты по тестированию должны надежно храниться, и доступ к ним должен быть у ограниченного числа лиц.
На что чаще всего смотрят?
- Быстрые ответы сервера
- Эффективная утилизация ресурсов железа
Тестирование производительности
- подсистемы серверов
-оделировать нагрузку на диск: [Flexible I/O Tester](https://github.com/axboe/fio) (fio).
-оделировать нагрузку на процессор: [Phoronix](https://phoronix-test-suite.com).
-оделировать нагрузку на сеть: [iperf3](iperf3.md).
- серверов и приложений на простых запросах
- подать нагрузку на балансировщик
- подать нагрузку на БД
- подать нагрузку на сервер приложений
- приложение при выполнении сценариев
- в соответствии с требованиями
**Статичные не связанные запросы к системе:**
- Заданное количество повторений
- Один или несколько фиксированных запросов
- Точечная простая нагрузка
Утилиты для статичных запросов:
- BASH-скриптом с curl/wget в цикле
- На уровне TCP-протокола - tcpreplay
- На MySQL - sysbench
- На PostgreSQL - pgbench
- На балансировщик - httperf (с паузами по списку URL)
- На сервер - [Apache Benchmark](Apache%20Benchmark.md)
**Динамически связанные запросы к системе**
- Высокая интенсивность, но неконтролируемая
- Запросы, связанными в сценарий
**Точная нагрузка по требованиям**
- В подходящее время и в нужном месте
- С нужно нагрузкой
- С анализом происходящего
Утилиты для точной нагрузки:
- [Jmeter](Jmeter.md) - простые сценарии (Groovy, Java, JavaScript)
- Gatling - сложные сценарии с десятками запросов (Scala)
- wrk - автоматизация на Lua
- Yandex.Tank - единый отчет, масштабирование (Go, Python)
***
**Нагрузочное тестирование:**
- Выдержит ли система планируемую нагрузку?
- Есть ли узкие места?
При тестировании производительности можно определить 4 точки
- **точка работы**, когда система работает оптимальным образом.
- Обычно 80% от точки деградации
- **точка деградации**, когда увеличивается время ответа системы
- **точка ошибок**, когда в системе начали появляться ошибки, которых не было бы в точке работы
- **точка недоступности**, когда система отказывается обрабатывать часть или все запросы
![](Pasted%20image%2020240128202510.png)
***
**Тестирование стабильности.** Тестирование системы в точке работы. Длительное тестирование со средней нагрузкой, преследует поиск отклонений и проверку корректности работы.
Отвечает на вопросы:
- Что будет при эксплуатации 24/7?
- Стабильная ли система под нагрузкой?
- Как быстро растет размер базы данных и логов?
- Есть ли утечка соединений, памяти?
- Нет ли потерь данных?
***
**Стрессовое тестирование.** Тестирование за пределами рабочих нагрузок, в ограниченных ресурсах.
![](Pasted%20image%2020240128204046.png)
Отвечает на вопросы:
- Если нагрузка ненадолго превысит максимум?
- Освобождаются ли не используемые ресурсы?
- Восстановится ли система после ошибок?
- Какие ошибки появляются под нагрузкой?
Такое тестирование может позволить выявить утечки ресурсов.
![](Pasted%20image%2020240128204149.png)
***
**Объемное тестирование.** Тестирование при увеличенном объемов данных.
Отвечает на вопросы:
- А что будет через 5-10 лет работы?
- Что если размер документов увеличить?
Важно:
- Увеличивается объем БД, а не интенсивность
- Нужно иметь генератор нагрузки и данных
- Быстрые генераторы БД пишутся на SQL
***
**Тестирование масштабирования.**
Отвечает на вопросы:
- Поможет ли увеличение памяти в 2 раза?
- Какой предел на другом железе?
- Какая производительность при N серверах/репликах
Важно:
- имеет физический предел
***