120 lines
6.3 KiB
Markdown
120 lines
6.3 KiB
Markdown
---
|
||
parents:
|
||
- "[[Архитектор высоких нагрузок - OTUS 2019]]"
|
||
date: 2024-01-28
|
||
zero-link:
|
||
- "[[00 Архитектура ПО]]"
|
||
---
|
||
Интересные мысли
|
||
- Отчеты по тестированию это чувствительные данные. Если отчеты попадут на в те руки, то они могут привести к подготовленной атаке на систему, что понесет за собой большие убытки. Поэтому отчеты по тестированию должны надежно храниться, и доступ к ним должен быть у ограниченного числа лиц.
|
||
|
||
На что чаще всего смотрят?
|
||
- Быстрые ответы сервера
|
||
- Эффективная утилизация ресурсов железа
|
||
|
||
Тестирование производительности
|
||
- подсистемы серверов
|
||
- Cмоделировать нагрузку на диск: [Flexible I/O Tester](https://github.com/axboe/fio) (fio).
|
||
- Cмоделировать нагрузку на процессор: [Phoronix](https://phoronix-test-suite.com).
|
||
- Cмоделировать нагрузку на сеть: [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 серверах/репликах
|
||
|
||
Важно:
|
||
- имеет физический предел
|
||
|
||
***
|