Slide 0
Компонентная среда разработки инструментария нагрузочного тестирования
Евгений Рачинский. СПбГУ в сотрудничестве с Siemens Corporate Technology
Slide 1
Нагрузочное тестирование
Изучение поведения многопользовательской системы под нагрузкой
Цели:
Оценка характеристик производительности системы под нагрузкой
Поиск узких мест в системе
Планирование производительности
Средства
Моделирование нагрузки
Инструментарий генерации нагрузки и измерения показателей
Методы анализа результатов
Slide 2
Инструментарий
Существующие средства нагрузочного тестирования не обладают достаточной гибкостью и адаптивностью
Решение: создание платформы для разработки инструментария нагрузочного тестирования
Области применения
Нагрузочное и стресс тестирование с использованием нестандартных протоколов
Поддержка статистических методов в нагрузочном тестировании
Автоматизация нагрузочного тестирования
Поддержка continues integration process
Slide 3
Типовая архитектура
Load
Control
Measurements
Input
Output
Monitoring
Slide 4
Области расширения
Компонентная среда (OSGi/Java)
Архитектура основанная на plug-ins
API, точки расширения
Slide 5
Сценарий
Симулирует поведение пользователей
Java классы
Сценарий
Транзакция (шаг)
Запрос
Иерархичность, модульность
Идентификация частей сценария
Генерация кода сценариев
Отладка (Eclipse)
Slide 6
Сценарий (пример)
public class Service1Scenario extends WebScenario {
Transaction1 transaction1 = new Transaction1();
Transaction2 transaction2 = new Transaction2();
public void run() {
runTransaction(transaction1);
sleep(1000);
runTransaction(transaction2);
}
}
public class Transaction1 extends WebTransaction {
Request1 request1 = new Request1();
public void run() {
runRequest(request1);
}
}
public class Request1 extends WebRequest {
public void run() {
HttpResponse response = null;
response =
getContext().
getClient().execute(url );
}
}
Slide 7
Нагрузка
Request time
Virtual users
Think time
time
Request rate
...
Virtual users
SUT
?
µ
Нагрузка это частота обращений к системе
Определяется через
количество виртуальных пользователей И
среднее значение и распределение времени ответа
Slide 8
Определение нагрузки (пример)
int maximumVirtualUsers = 15;
int incrementInterval = 60;
int incrementVirtaulUsersBy = 1;
public IThinkTime getThinkTimeOnTime(long time) {
return new ConstantThinkTime(1000);
}
public int getVirtualUserNumberOnTime(long time) {
int vu = Math.min(
maximumVirtualUsers,
(int)((time/incrementInterval)+1)*incrementVirtaulUsersBy
);
return vu;
}
int Amplitude = 5; //virtual users
double Frequency = 1/60; //virtual users per second
int VerticalShift = 10; //oscillate around
public IThinkTime getThinkTimeOnTime(long time) {
return new ExponentialThinkTime(1000);
}
public int getVirtualUserNumberOnTime(long time) {
return (int)(VerticalShift + Amplitude*Math.sin(Frequency*time));
}
Slide 9
Поддержка сетевых протоколов и измерений
Любой протокол, имеющий клиентcкие Java библиотеки
Регистрация значений:
Время исполнения
Ошибки протокола/приложения
Проткол-специфические измерения (размер пакета, время установления соединения, DNS время и т.п.)
Инструментирование библиотек протоколов
Поддержка протоколов интегрируется в базовые классы сценариев
Slide 10
Run-time статистика и журналирование
Измерения собираются в статистики:
Среднее значение
Частота событий
Счетчики
Определенная пользователем
Масштабирование значений
Среднее значение на разных масштабах времени
Расширяемый «движок» статистики
Filter/Pipe design pattern
Журналирование
Набор CSV файлов, Apache Derby
Формат определен протоколом
Slide 11
Управление тестом
Пользовательский интерфейс
Eclipse RCP UI
Command line
Подготовка теста
Eclipse Java IDE, PDE
Рабочее окружение Eclipse
Исполнение теста и мониторинг
Графики статистики
Расширяемость
Eclipse plugin-ins
Chart API (JFree chart)
ANT tasks
Results export
Load test controller
Load test definition
Slide 12
Компоненты платформы
Scenario
Workload
Statistics filters
definition
Network protocol
libraries
Log format definition
Test artifacts (OSGi bundles)
Remote deploy
Legend:
Platform Service
Deployable component
Slide 13
Замечания по реализации
Высокая производительность агентов
Сложность точного измерения времени в Java (msec, nanosec)
Синхронизация потоков виртуальных пользователей
Синхронизация времени в распределенной среде
Интенсивный поток данных (измерений)
Сложность использование Java аннотаций и рефлексии
Slide 14
Приложения платформы
Стандартное нагрузочное тестирование
HTTP, SOAP, RMI
Сложные сценарии
Различные протоколы в одном сценарии
Симуляция вероятностного поведения пользователя (СBMG)
Генерация кода сценариев (из трасс или моделей)
Нагрузочное тестирование и регулярная сборка
ANT task для определения и запуска теста
0.9
Slide 15
Приложения платформы (2)
Генерация заданной нагрузки
Пуассоновский поток запросов
Автоуправление нагрузкой в зависимости от текущих показателей производительности
Измерение среднего значения времени ответа с заданным доверительным интервалом
Автоматический поск максимальной пропускной способности системы (max TPS)
Симуляция пульсирующей нагрузки
Slide 16
Максимальная пропускная способность системы
Load
Response time
Load
Throughput (TPS)
Average response time
Throughput (TPS)
Slide 17
Анализ результатов
Пакеты статистической обработки
S-Plus (R statistics)
Дисперсионный анализ
сравнение производительности альтернативных конфигураций системы
Корреляционный анализ
Вывод параметров аналитических моделей (очереди)
Построение моделей «черного ящика»
Slide 18
Спасибо за внимание!
Slide 19
Backup slides
Slide 20
Descriptive statistics example – KPI VS. load
Slide 21
Тестирование производительности распределенных систем
Slide 22
Approach overview
Perform load test and collect measurements
Windmill + dynamic workload
Determine response time distribution
Statistical tests
Lognormal, Gamma, Weibull distributions
Fit response time distribution parameters
Non-parametric models (cubic splines)
Setup runtime simulator
Analytical or table representation of the model
Performance load test of a SUT
Slide 23
Results comparison
Slide 24
time