SlideShare a Scribd company logo
1 of 37
Download to read offline
Распределённое нагрузочное
тестирование на Java
Алексей Рагозин
Артём Панасюк
jug.msk.ru 2016
В докладе
• Введение
• Концепция PTDD
Performance Test Driven Development
• Распределённыйнагрузочныйтест–чтоэто?
• Стек инструментов
• Пример теста
Тестирование
– инструмент познания мира
PerformanceTestDrivenDevelopment
Функциональное тестирование
Нагрузочное тестирование
Cost of bug
Test volume
Release
Release
Test volumeCost of bug
PerformanceTestDrivenDevelopment
• Пишем неоптимизированный код
• Пишем нагрузочные тесты / бенчмарк
• Исправляем проблемы производительности
• Организуем изолированные тесты в профили
нагрузки по мере добавления функционала
• Непрерывное тестирование производительности
Как тестировать до “начала”?
Нет скрипов, инфраструктуры, приложения
Надо тестировать базовые сценарии
Тестировать на реальном масштабе
Тестировать сценарии отказов
Дизайн меняется на ходу, тесты вместе с ним
Тесты должны гонять себя сами, у
разработчиков хватает работы.
Как тестировать до “начала”?
На чём вы пишите юнит-тесты?
• JUnit - Java
Почему бы не писать нагрузочные также?
• Мы знаем Java
• На Java есть библиотеки для всего
• Никаких переформанс инженеров
тесты пишут разработчики
Вопрос культуры
“Классический” подход
• bash + ssh + анализ логов + Excel / R
• Мало пригоден для повторного использования
• Короткий период полураспада тестов
• Использование незнакомого инструментария
“Монокультурный” подход
• Платформаприложения=платформаавтоматизации
− Приходится изобретать велосипеды, но
+ Решается проблема культурного диссонанса
Нагрузочный тест
Развёртывание
 В распределённой среде
Подготовка данных / разогрев
Сценарий тестирования
 Например,дневнойпрофильнагрузкисотказомузлавкластера
Сбор метрик
 Тестовые события
 Метрики ОС
 Данные профилирования
Подготовка отчёта
Стек инструментов
Nanocloud - https://github.com/gridkit/nanocloud/
 Развертывание / управление распределённой средой
GridBeans – “массивно параллельная” Java
 Оркестрация развертывая и подготовки
 Выполнение сценария
Nimble
 Компоненты: cбор данных, мониторинг и прочее
Отчёты
 Сырой CSV на выходе, решение не найдено
Nanocloud
Nanocloud
Удалённое выполнения Java кода
Просто как …
@Test
public void hello_remote_world() {
Cloud cloud = CloudFactory.createSimpleSshCloud();
cloud.node("myserver.acme.com").exec(new Callable<Void>(){
@Override
public Void call() throws Exception {
String localhost = InetAddress.getLocalHost().toString();
System.out.println("Hi! I'm running on " + localhost);
return null;
}
});
}
All you need is …
NanoCloud requirements
 SSHd
 Java (1.6 and above) present
 Works though NAT and firewalls
 Works on Amazon EC2
 Works everywhere where SSH works
Master – slave communications
Master process Slave hostSSH
(Single TCP)
Slave
Slave
RMI
(TCP)
std err
std out
std in
diag
Slave
controller
Slave
controller
multiplexed slave streams Agent
Death clock is ticking
Master JVM kills slave processes, unless
 SSH session was interrupted
 someone kill -9 master JVM
 master JVM has crashed (e.g.underdebuger)
Death clock is ticking on slave though
 if master is not responding
 slave process will terminate itself
Cloud scale JVM
Same API – different topoligies
 in-process (debug), local, remote (distributed)
Transparent remoting
SSH to manage remote server
Automatic classpath replication (with caching)
Zero infrastructure
 Any OS for master host
 SSHd + JVM for slave hosts (Unix / Cygwin)
200+ slave topology in routinely used
Распределённый
сценарий
Распределённый сценарий
• Простые шаги (реализованные на Java)
• Выполняемые в распределённой системе
согласно сценарию
• Возможность синхронизации шагов
• Обмен данными между шагами
• Нет циклов и условного выполнения
• Fail fast – ошибка любого шага
завершает сценарий
Mockito
@Test
public void test() {
MyList mock = Mockito.mock(MyList.class,
Mockito.RETURNS_DEEP_STUBS);
Mockito.when(mock.get(0).getValue()).thenReturn("v1");
Mockito.when(mock.get(1).getValue()).thenReturn("v2");
Assert.assertEquals(null, mock.get(2).getValue());
Assert.assertEquals("v2", mock.get(1).getValue());
Assert.assertEquals("v1", mock.get(0).getValue());
InOrder io = Mockito.inOrder(mock);
io.verify(mock).get(2);
io.verify(mock).get(1);
io.verify(mock).get(0);
io.verifyNoMoreInteractions();
}
Mockito way
1. Декларация намерений
 Моки и вызовы методов
 “Виртуальное” время
 “Абстрактная” распределённость
2. Физическое выполнение
 Привязка к топологии
 Зависимости между шагами
 Параллельное / распределённое выполнение
Простой пример #1
public void example() {
MonadBuilder bld = MonadFactory.build();
MyReader reader = bld.locator(Cloud.class).at("reader")
.deploy(MyReader.class, ...);
reader.configure("read config");
bld.join("start");
reader.execute();
bld.join("done");
bld.rewind();
MyWriter writer = bld.locator(Cloud.class)
.at("writer").deploy(MyWriter.class, ...);
writer.configure("write config");
bld.join("start");
writer.execute();
bld.join("done");
}
Простой пример #1
deploy
reader
reader
.configure()
start
reader
.execute()
done
deploy
writer
writer
.configure()
writer
.execute()
Простой пример #1
Драйвер
 Интерфейс декларирующий шаги
 Шаги – методы
 Шаг может вернуть “интерфейс”
 Шаги могут принимать параметры
 Сериализуемые объекты
 Результаты выполнения шагов
 Реализация драйвера размещается в
распределённой среде используя локатор
Простой пример #1
public void example() {
MonadBuilder bld = MonadFactory.build();
MyReader reader = bld.locator(Cloud.class).at("reader")
.deploy(MyReader.class, ...);
reader.configure("read config");
bld.join("start");
reader.execute();
bld.join("done");
bld.rewind();
MyWriter writer = bld.locator(Cloud.class).at("writer")
.deploy(MyWriter.class, ...);
writer.configure("write config");
bld.join("start");
writer.execute();
bld.join("done");
}
Локатор
Драйвер прокси
CheckpointCheckpoint
Перемотка времени
Простой пример #1
deploy
reader
reader
.configure()
start
reader
.execute()
done
deploy
writer
writer
.configure()
writer
.execute()
deploy
reader
reader
.configure()
reader
.execute()
deploy
writer
writer
.configure()
writer
.execute()
Простой пример #2
MyReader reader = bld.locator(Cloud.class).at("reader")
.deploy(MyReader.class, ...);
reader.configure("read config");
bld.sync();
Runnable readTask = reader.createTask();
bld.join("start");
ExecutionDriver exec = bld.bean(ExecutionDriver.class);
Activity readJob = exec.execute(readTask);
bld.join("stop");
readJob.stop();
bld.join(readJob);
bld.join("done");
bld.rewind("start");
bld.wallclock().delay(30, TimeUnit.SECONDS);
bld.join("stop");
Простой пример #2
deploy
reader
reader
.configure()
start
wallclock
.delay()
done
reader
.createTask()
exec
.execute()
stop
readTask
readJob
.stop()
readJob
readJob
.join()
Простой пример #2
MyReader reader = bld.locator(Cloud.class).at("reader")
.deploy(MyReader.class, ...);
reader.configure("read config");
bld.sync();
Runnable readTask = reader.createTask();
bld.join("start");
ExecutionDriver exec = bld.bean(ExecutionDriver.class);
Activity readJob = exec.execute(readTask);
bld.join("stop");
readJob.stop();
bld.join(readJob);
bld.join("done");
bld.rewind("start");
bld.wallclock().delay(30, TimeUnit.SECONDS);
bld.join("stop");
Вспомогательный сервис
Интерфейс фоновых задач
Получение сервиса
Простой пример #2
Ошибка выполнение шага отлавливается
и завершает сценарий.
Когда создаётся фоновая задача, используется
Activity.join() шага, который не завершится пока
задача не будет остановлена.
Wallclock – драйвер предоставляемый из коробки.
ExecutionDriver – пример вспомогательного
драйвера.
Распределённый сценарий
Всех аспекты теста –
Развёртывание / Сбор данных / Мониторинг / и т.д.
шаги / драйверы единого сценария
Распределённый сценарий
Fallacies of distributed computing
https://en.wikipedia.org/wiki/Fallacies_of_distributed_computing
• The network is reliable – fail test fast.
• Latency is zero – small number of round trip.
• Bandwidth is infinite – low bandwidth control flow.
• The network is secure – irrelevant for testing.
• Topology doesn't change – fail test fast and rerun.
• There is one administrator – zero deployment.
• Transport cost is zero – there is no free lunch 
• The network is homogeneous – location conscious scenario.
Вспомогательные
компоненты
Метеринг
Сбор метрик в распределённой среде
 Данные тестовых событий
 Данные мониторинга
Метрики аккумулируются на локальном
диске и передаются на управляющий узел
по завершении сценария
Все результаты экспортируются в CSV файл
большой CSV файл
Мониторинг
Метрики OS - https://github.com/hyperic/sigar
 Network interface stats
 Process stats (поиск нужных процессов)
JVM
 GC
 Threads
 Custom MBeans
Build your own
Профилирование
BTrace 2 - https://github.com/jbachorik/btrace2
 Инструментирующий профайлер
 Точки перехвата на Java
 Развёртывание как часть сценария
 Интеграция с метерингом
Ссылки
NanoCloud
• https://github.com/gridkit/nanocloud/
• https://code.google.com/p/gridkit/wiki/NanoCloudTutorial
• Maven Central: org.gridkit.lab:nanocloud:0.8.10
• http://blog.ragozin.info/2013/01/remote-code-execution-in-java-made.html
GridBeans
• https://github.com/aragozin/gridbeans
Nimble
• https://github.com/gridkit/nimble
Пример бенчмарка
• https://github.com/gridkit/zk-benchmark-example
Thank you
Alexey Ragozin
alexey.ragozin@gmail.com
http://blog.ragozin.info
- my articles
http://www.meetup.com/bigmoscow
- community events in Moscow

More Related Content

What's hot

Григорий Липин: Автоматизация нагрузочного тестирования
Григорий Липин: Автоматизация нагрузочного тестированияГригорий Липин: Автоматизация нагрузочного тестирования
Григорий Липин: Автоматизация нагрузочного тестированияYandex
 
Тестирование отклика Web-интерфейса с JMeter и Selenium
Тестирование отклика Web-интерфейса с JMeter и SeleniumТестирование отклика Web-интерфейса с JMeter и Selenium
Тестирование отклика Web-интерфейса с JMeter и SeleniumSQALab
 
Нагрузочное тестирование. С чего начать?
Нагрузочное тестирование. С чего начать?Нагрузочное тестирование. С чего начать?
Нагрузочное тестирование. С чего начать?OdessaQA
 
Инструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщикаИнструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщикаSQALab
 
Основы и нюансы параллельного тестрования
Основы и нюансы параллельного тестрованияОсновы и нюансы параллельного тестрования
Основы и нюансы параллельного тестрованияbearoff
 
Test driven development in net
Test driven development in netTest driven development in net
Test driven development in netAlex Tumanoff
 
Проверка на прочность или нагрузочное тестирование с Jmeter
Проверка на прочность или нагрузочное тестирование с JmeterПроверка на прочность или нагрузочное тестирование с Jmeter
Проверка на прочность или нагрузочное тестирование с JmeterAleksey Derkach
 
Нагрузочное тестирование с помощью Яндекс.Танк - Алексей Лавренюк, PyCon RU 2...
Нагрузочное тестирование с помощью Яндекс.Танк - Алексей Лавренюк, PyCon RU 2...Нагрузочное тестирование с помощью Яндекс.Танк - Алексей Лавренюк, PyCon RU 2...
Нагрузочное тестирование с помощью Яндекс.Танк - Алексей Лавренюк, PyCon RU 2...it-people
 
Автоматизация тестирования многопоточности
Автоматизация тестирования многопоточностиАвтоматизация тестирования многопоточности
Автоматизация тестирования многопоточностиSQALab
 
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...Andrey Rebrov
 
Жизнь проекта на production
Жизнь проекта на productionЖизнь проекта на production
Жизнь проекта на productionNikolay Sivko
 
Веб-сервер Phantom
Веб-сервер PhantomВеб-сервер Phantom
Веб-сервер Phantomyaevents
 
Sql server clr integration
Sql server clr integration Sql server clr integration
Sql server clr integration Alex Tumanoff
 
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...Ontico
 
Мастер-класс про организацию службы эксплуатации
Мастер-класс про организацию службы эксплуатацииМастер-класс про организацию службы эксплуатации
Мастер-класс про организацию службы эксплуатацииNikolay Sivko
 
Silverlight 4, есть ли жизнь на десктопе
Silverlight 4, есть ли жизнь на десктопеSilverlight 4, есть ли жизнь на десктопе
Silverlight 4, есть ли жизнь на десктопеAlex Tumanoff
 
Хорошо поддерживаемое приложение
Хорошо поддерживаемое приложениеХорошо поддерживаемое приложение
Хорошо поддерживаемое приложениеNikolay Sivko
 
Java Ahead-Of-Time compilation
Java Ahead-Of-Time compilationJava Ahead-Of-Time compilation
Java Ahead-Of-Time compilationNikita Lipsky
 
Мониторинг качества работы вашего проекта
Мониторинг качества работы вашего проектаМониторинг качества работы вашего проекта
Мониторинг качества работы вашего проектаNikolay Sivko
 
Monitoring-driven эксплуатация (rootconf2015)
Monitoring-driven эксплуатация (rootconf2015)Monitoring-driven эксплуатация (rootconf2015)
Monitoring-driven эксплуатация (rootconf2015)Nikolay Sivko
 

What's hot (20)

Григорий Липин: Автоматизация нагрузочного тестирования
Григорий Липин: Автоматизация нагрузочного тестированияГригорий Липин: Автоматизация нагрузочного тестирования
Григорий Липин: Автоматизация нагрузочного тестирования
 
Тестирование отклика Web-интерфейса с JMeter и Selenium
Тестирование отклика Web-интерфейса с JMeter и SeleniumТестирование отклика Web-интерфейса с JMeter и Selenium
Тестирование отклика Web-интерфейса с JMeter и Selenium
 
Нагрузочное тестирование. С чего начать?
Нагрузочное тестирование. С чего начать?Нагрузочное тестирование. С чего начать?
Нагрузочное тестирование. С чего начать?
 
Инструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщикаИнструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщика
 
Основы и нюансы параллельного тестрования
Основы и нюансы параллельного тестрованияОсновы и нюансы параллельного тестрования
Основы и нюансы параллельного тестрования
 
Test driven development in net
Test driven development in netTest driven development in net
Test driven development in net
 
Проверка на прочность или нагрузочное тестирование с Jmeter
Проверка на прочность или нагрузочное тестирование с JmeterПроверка на прочность или нагрузочное тестирование с Jmeter
Проверка на прочность или нагрузочное тестирование с Jmeter
 
Нагрузочное тестирование с помощью Яндекс.Танк - Алексей Лавренюк, PyCon RU 2...
Нагрузочное тестирование с помощью Яндекс.Танк - Алексей Лавренюк, PyCon RU 2...Нагрузочное тестирование с помощью Яндекс.Танк - Алексей Лавренюк, PyCon RU 2...
Нагрузочное тестирование с помощью Яндекс.Танк - Алексей Лавренюк, PyCon RU 2...
 
Автоматизация тестирования многопоточности
Автоматизация тестирования многопоточностиАвтоматизация тестирования многопоточности
Автоматизация тестирования многопоточности
 
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
 
Жизнь проекта на production
Жизнь проекта на productionЖизнь проекта на production
Жизнь проекта на production
 
Веб-сервер Phantom
Веб-сервер PhantomВеб-сервер Phantom
Веб-сервер Phantom
 
Sql server clr integration
Sql server clr integration Sql server clr integration
Sql server clr integration
 
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...
 
Мастер-класс про организацию службы эксплуатации
Мастер-класс про организацию службы эксплуатацииМастер-класс про организацию службы эксплуатации
Мастер-класс про организацию службы эксплуатации
 
Silverlight 4, есть ли жизнь на десктопе
Silverlight 4, есть ли жизнь на десктопеSilverlight 4, есть ли жизнь на десктопе
Silverlight 4, есть ли жизнь на десктопе
 
Хорошо поддерживаемое приложение
Хорошо поддерживаемое приложениеХорошо поддерживаемое приложение
Хорошо поддерживаемое приложение
 
Java Ahead-Of-Time compilation
Java Ahead-Of-Time compilationJava Ahead-Of-Time compilation
Java Ahead-Of-Time compilation
 
Мониторинг качества работы вашего проекта
Мониторинг качества работы вашего проектаМониторинг качества работы вашего проекта
Мониторинг качества работы вашего проекта
 
Monitoring-driven эксплуатация (rootconf2015)
Monitoring-driven эксплуатация (rootconf2015)Monitoring-driven эксплуатация (rootconf2015)
Monitoring-driven эксплуатация (rootconf2015)
 

Viewers also liked

Padi Letter 18 May99
Padi Letter 18 May99Padi Letter 18 May99
Padi Letter 18 May99twillson3
 
La Tierra Sin Humanos
La Tierra Sin HumanosLa Tierra Sin Humanos
La Tierra Sin HumanosNeftisLis
 
Portfolio sample
Portfolio samplePortfolio sample
Portfolio samplehodayalouis
 
2014fwc ticketingfanguide pr_portuguese
2014fwc ticketingfanguide pr_portuguese2014fwc ticketingfanguide pr_portuguese
2014fwc ticketingfanguide pr_portugueselaertemelo
 
Freeport campo #1
Freeport campo #1Freeport campo #1
Freeport campo #1dist159
 
Ranking mercado asegurador 31 de marzo 2010
Ranking mercado asegurador 31 de marzo 2010Ranking mercado asegurador 31 de marzo 2010
Ranking mercado asegurador 31 de marzo 2010CANATAME
 
Letak01
Letak01Letak01
Letak01ELVIS
 
Tips For Constructing Objective Written Exam Questions
Tips For Constructing Objective Written Exam QuestionsTips For Constructing Objective Written Exam Questions
Tips For Constructing Objective Written Exam QuestionsSoha Rashed
 
Plumbing_work_Laying of sewerage
Plumbing_work_Laying of seweragePlumbing_work_Laying of sewerage
Plumbing_work_Laying of sewerageKonstantin Komarov
 

Viewers also liked (14)

Chiki 9e
Chiki 9eChiki 9e
Chiki 9e
 
Padi Letter 18 May99
Padi Letter 18 May99Padi Letter 18 May99
Padi Letter 18 May99
 
La Tierra Sin Humanos
La Tierra Sin HumanosLa Tierra Sin Humanos
La Tierra Sin Humanos
 
Portfolio sample
Portfolio samplePortfolio sample
Portfolio sample
 
Laura.ashley4
Laura.ashley4Laura.ashley4
Laura.ashley4
 
Unidad 1
Unidad 1Unidad 1
Unidad 1
 
2014fwc ticketingfanguide pr_portuguese
2014fwc ticketingfanguide pr_portuguese2014fwc ticketingfanguide pr_portuguese
2014fwc ticketingfanguide pr_portuguese
 
Freeport campo #1
Freeport campo #1Freeport campo #1
Freeport campo #1
 
Ranking mercado asegurador 31 de marzo 2010
Ranking mercado asegurador 31 de marzo 2010Ranking mercado asegurador 31 de marzo 2010
Ranking mercado asegurador 31 de marzo 2010
 
Letak01
Letak01Letak01
Letak01
 
Epidemiology
EpidemiologyEpidemiology
Epidemiology
 
QSEN Paper
QSEN PaperQSEN Paper
QSEN Paper
 
Tips For Constructing Objective Written Exam Questions
Tips For Constructing Objective Written Exam QuestionsTips For Constructing Objective Written Exam Questions
Tips For Constructing Objective Written Exam Questions
 
Plumbing_work_Laying of sewerage
Plumbing_work_Laying of seweragePlumbing_work_Laying of sewerage
Plumbing_work_Laying of sewerage
 

Similar to Распределённое нагрузочное тестирование на Java

Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...
Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...
Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...Stfalcon Meetups
 
IT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчикаIT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчикаMikhail Chinkov
 
Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPITimur Shemsedinov
 
ВВЕДЕНИЕ В NODE.JS
ВВЕДЕНИЕ В NODE.JS ВВЕДЕНИЕ В NODE.JS
ВВЕДЕНИЕ В NODE.JS Pavel Tsukanov
 
Павел Довгалюк, Обратная отладка
Павел Довгалюк, Обратная отладкаПавел Довгалюк, Обратная отладка
Павел Довгалюк, Обратная отладкаSergey Platonov
 
Application deployment & configuration management
Application deployment & configuration managementApplication deployment & configuration management
Application deployment & configuration managementAlexander Kirillov
 
Froglogic Squish
Froglogic Squish Froglogic Squish
Froglogic Squish SQALab
 
"Опыт создания системы управления сборкой и тестированием" (полная)
"Опыт создания системы управления сборкой и тестированием" (полная)"Опыт создания системы управления сборкой и тестированием" (полная)
"Опыт создания системы управления сборкой и тестированием" (полная)SPB SQA Group
 
Илья Евлампиев - Нагрузочное тестирование веб-приложений с помощью The Grinder
Илья Евлампиев - Нагрузочное тестирование веб-приложений с помощью The GrinderИлья Евлампиев - Нагрузочное тестирование веб-приложений с помощью The Grinder
Илья Евлампиев - Нагрузочное тестирование веб-приложений с помощью The GrinderSQALab
 
Continuous integration сайтов на Drupal: Jenkins, Bitbucket, Features, Drush ...
Continuous integration сайтов на Drupal: Jenkins, Bitbucket, Features, Drush ...Continuous integration сайтов на Drupal: Jenkins, Bitbucket, Features, Drush ...
Continuous integration сайтов на Drupal: Jenkins, Bitbucket, Features, Drush ...DrupalCamp MSK
 
Meet Magento Belarus - Andriy Samilyak
Meet Magento Belarus - Andriy SamilyakMeet Magento Belarus - Andriy Samilyak
Meet Magento Belarus - Andriy SamilyakAmasty
 
Расширяемая платформа для создания и управления автоматизированными тестами н...
Расширяемая платформа для создания и управления автоматизированными тестами н...Расширяемая платформа для создания и управления автоматизированными тестами н...
Расширяемая платформа для создания и управления автоматизированными тестами н...jazzteam
 
Drupal code sprint для новичков
Drupal code sprint для новичковDrupal code sprint для новичков
Drupal code sprint для новичковOvadiah Myrgorod
 
Тестируй это / Виктор Русакович (GP Solutions)
Тестируй это / Виктор Русакович (GP Solutions)Тестируй это / Виктор Русакович (GP Solutions)
Тестируй это / Виктор Русакович (GP Solutions)Ontico
 
Development of a plugin for VS Code that supports ACSL language.
Development of a plugin for VS Code that supports ACSL language.Development of a plugin for VS Code that supports ACSL language.
Development of a plugin for VS Code that supports ACSL language.Denis Zakharov
 
Dz Java Hi Load 0.4
Dz Java Hi Load 0.4Dz Java Hi Load 0.4
Dz Java Hi Load 0.4HighLoad2009
 
Как построить свой фреймворк для автотестов?
Как построить свой фреймворк для автотестов?Как построить свой фреймворк для автотестов?
Как построить свой фреймворк для автотестов?Dmitry Buzdin
 

Similar to Распределённое нагрузочное тестирование на Java (20)

PowerShell
PowerShellPowerShell
PowerShell
 
Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...
Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...
Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...
 
IT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчикаIT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчика
 
Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPI
 
Java 9 - кратко о новом
Java 9 -  кратко о новомJava 9 -  кратко о новом
Java 9 - кратко о новом
 
ВВЕДЕНИЕ В NODE.JS
ВВЕДЕНИЕ В NODE.JS ВВЕДЕНИЕ В NODE.JS
ВВЕДЕНИЕ В NODE.JS
 
Павел Довгалюк, Обратная отладка
Павел Довгалюк, Обратная отладкаПавел Довгалюк, Обратная отладка
Павел Довгалюк, Обратная отладка
 
Application deployment & configuration management
Application deployment & configuration managementApplication deployment & configuration management
Application deployment & configuration management
 
Froglogic Squish
Froglogic Squish Froglogic Squish
Froglogic Squish
 
Simonova sql server-enginetesting
Simonova sql server-enginetestingSimonova sql server-enginetesting
Simonova sql server-enginetesting
 
"Опыт создания системы управления сборкой и тестированием" (полная)
"Опыт создания системы управления сборкой и тестированием" (полная)"Опыт создания системы управления сборкой и тестированием" (полная)
"Опыт создания системы управления сборкой и тестированием" (полная)
 
Илья Евлампиев - Нагрузочное тестирование веб-приложений с помощью The Grinder
Илья Евлампиев - Нагрузочное тестирование веб-приложений с помощью The GrinderИлья Евлампиев - Нагрузочное тестирование веб-приложений с помощью The Grinder
Илья Евлампиев - Нагрузочное тестирование веб-приложений с помощью The Grinder
 
Continuous integration сайтов на Drupal: Jenkins, Bitbucket, Features, Drush ...
Continuous integration сайтов на Drupal: Jenkins, Bitbucket, Features, Drush ...Continuous integration сайтов на Drupal: Jenkins, Bitbucket, Features, Drush ...
Continuous integration сайтов на Drupal: Jenkins, Bitbucket, Features, Drush ...
 
Meet Magento Belarus - Andriy Samilyak
Meet Magento Belarus - Andriy SamilyakMeet Magento Belarus - Andriy Samilyak
Meet Magento Belarus - Andriy Samilyak
 
Расширяемая платформа для создания и управления автоматизированными тестами н...
Расширяемая платформа для создания и управления автоматизированными тестами н...Расширяемая платформа для создания и управления автоматизированными тестами н...
Расширяемая платформа для создания и управления автоматизированными тестами н...
 
Drupal code sprint для новичков
Drupal code sprint для новичковDrupal code sprint для новичков
Drupal code sprint для новичков
 
Тестируй это / Виктор Русакович (GP Solutions)
Тестируй это / Виктор Русакович (GP Solutions)Тестируй это / Виктор Русакович (GP Solutions)
Тестируй это / Виктор Русакович (GP Solutions)
 
Development of a plugin for VS Code that supports ACSL language.
Development of a plugin for VS Code that supports ACSL language.Development of a plugin for VS Code that supports ACSL language.
Development of a plugin for VS Code that supports ACSL language.
 
Dz Java Hi Load 0.4
Dz Java Hi Load 0.4Dz Java Hi Load 0.4
Dz Java Hi Load 0.4
 
Как построить свой фреймворк для автотестов?
Как построить свой фреймворк для автотестов?Как построить свой фреймворк для автотестов?
Как построить свой фреймворк для автотестов?
 

More from aragozin

Java on Linux for devs and ops
Java on Linux for devs and opsJava on Linux for devs and ops
Java on Linux for devs and opsaragozin
 
I know why your Java is slow
I know why your Java is slowI know why your Java is slow
I know why your Java is slowaragozin
 
Java profiling Do It Yourself (jug.msk.ru 2016)
Java profiling Do It Yourself (jug.msk.ru 2016)Java profiling Do It Yourself (jug.msk.ru 2016)
Java profiling Do It Yourself (jug.msk.ru 2016)aragozin
 
Java black box profiling JUG.EKB 2016
Java black box profiling JUG.EKB 2016Java black box profiling JUG.EKB 2016
Java black box profiling JUG.EKB 2016aragozin
 
What every Java developer should know about network?
What every Java developer should know about network?What every Java developer should know about network?
What every Java developer should know about network?aragozin
 
Java profiling Do It Yourself
Java profiling Do It YourselfJava profiling Do It Yourself
Java profiling Do It Yourselfaragozin
 
DIY Java Profiler
DIY Java ProfilerDIY Java Profiler
DIY Java Profileraragozin
 
Java black box profiling
Java black box profilingJava black box profiling
Java black box profilingaragozin
 
Блеск и нищета распределённых кэшей
Блеск и нищета распределённых кэшейБлеск и нищета распределённых кэшей
Блеск и нищета распределённых кэшейaragozin
 
JIT compilation in modern platforms – challenges and solutions
JIT compilation in modern platforms – challenges and solutionsJIT compilation in modern platforms – challenges and solutions
JIT compilation in modern platforms – challenges and solutionsaragozin
 
Casual mass parallel computing
Casual mass parallel computingCasual mass parallel computing
Casual mass parallel computingaragozin
 
Nanocloud cloud scale jvm
Nanocloud   cloud scale jvmNanocloud   cloud scale jvm
Nanocloud cloud scale jvmaragozin
 
Java GC tuning and monitoring (by Alexander Ashitkin)
Java GC tuning and monitoring (by Alexander Ashitkin)Java GC tuning and monitoring (by Alexander Ashitkin)
Java GC tuning and monitoring (by Alexander Ashitkin)aragozin
 
Garbage collection in JVM
Garbage collection in JVMGarbage collection in JVM
Garbage collection in JVMaragozin
 
Virtualizing Java in Java (jug.ru)
Virtualizing Java in Java (jug.ru)Virtualizing Java in Java (jug.ru)
Virtualizing Java in Java (jug.ru)aragozin
 
Filtering 100M objects in Coherence cache. What can go wrong?
Filtering 100M objects in Coherence cache. What can go wrong?Filtering 100M objects in Coherence cache. What can go wrong?
Filtering 100M objects in Coherence cache. What can go wrong?aragozin
 
Cборка мусора в Java без пауз (HighLoad++ 2013)
Cборка мусора в Java без пауз  (HighLoad++ 2013)Cборка мусора в Java без пауз  (HighLoad++ 2013)
Cборка мусора в Java без пауз (HighLoad++ 2013)aragozin
 
JIT-компиляция в виртуальной машине Java (HighLoad++ 2013)
JIT-компиляция в виртуальной машине Java (HighLoad++ 2013)JIT-компиляция в виртуальной машине Java (HighLoad++ 2013)
JIT-компиляция в виртуальной машине Java (HighLoad++ 2013)aragozin
 
Performance Test Driven Development with Oracle Coherence
Performance Test Driven Development with Oracle CoherencePerformance Test Driven Development with Oracle Coherence
Performance Test Driven Development with Oracle Coherencearagozin
 
Борьба с GС паузами в JVM
Борьба с GС паузами в JVMБорьба с GС паузами в JVM
Борьба с GС паузами в JVMaragozin
 

More from aragozin (20)

Java on Linux for devs and ops
Java on Linux for devs and opsJava on Linux for devs and ops
Java on Linux for devs and ops
 
I know why your Java is slow
I know why your Java is slowI know why your Java is slow
I know why your Java is slow
 
Java profiling Do It Yourself (jug.msk.ru 2016)
Java profiling Do It Yourself (jug.msk.ru 2016)Java profiling Do It Yourself (jug.msk.ru 2016)
Java profiling Do It Yourself (jug.msk.ru 2016)
 
Java black box profiling JUG.EKB 2016
Java black box profiling JUG.EKB 2016Java black box profiling JUG.EKB 2016
Java black box profiling JUG.EKB 2016
 
What every Java developer should know about network?
What every Java developer should know about network?What every Java developer should know about network?
What every Java developer should know about network?
 
Java profiling Do It Yourself
Java profiling Do It YourselfJava profiling Do It Yourself
Java profiling Do It Yourself
 
DIY Java Profiler
DIY Java ProfilerDIY Java Profiler
DIY Java Profiler
 
Java black box profiling
Java black box profilingJava black box profiling
Java black box profiling
 
Блеск и нищета распределённых кэшей
Блеск и нищета распределённых кэшейБлеск и нищета распределённых кэшей
Блеск и нищета распределённых кэшей
 
JIT compilation in modern platforms – challenges and solutions
JIT compilation in modern platforms – challenges and solutionsJIT compilation in modern platforms – challenges and solutions
JIT compilation in modern platforms – challenges and solutions
 
Casual mass parallel computing
Casual mass parallel computingCasual mass parallel computing
Casual mass parallel computing
 
Nanocloud cloud scale jvm
Nanocloud   cloud scale jvmNanocloud   cloud scale jvm
Nanocloud cloud scale jvm
 
Java GC tuning and monitoring (by Alexander Ashitkin)
Java GC tuning and monitoring (by Alexander Ashitkin)Java GC tuning and monitoring (by Alexander Ashitkin)
Java GC tuning and monitoring (by Alexander Ashitkin)
 
Garbage collection in JVM
Garbage collection in JVMGarbage collection in JVM
Garbage collection in JVM
 
Virtualizing Java in Java (jug.ru)
Virtualizing Java in Java (jug.ru)Virtualizing Java in Java (jug.ru)
Virtualizing Java in Java (jug.ru)
 
Filtering 100M objects in Coherence cache. What can go wrong?
Filtering 100M objects in Coherence cache. What can go wrong?Filtering 100M objects in Coherence cache. What can go wrong?
Filtering 100M objects in Coherence cache. What can go wrong?
 
Cборка мусора в Java без пауз (HighLoad++ 2013)
Cборка мусора в Java без пауз  (HighLoad++ 2013)Cборка мусора в Java без пауз  (HighLoad++ 2013)
Cборка мусора в Java без пауз (HighLoad++ 2013)
 
JIT-компиляция в виртуальной машине Java (HighLoad++ 2013)
JIT-компиляция в виртуальной машине Java (HighLoad++ 2013)JIT-компиляция в виртуальной машине Java (HighLoad++ 2013)
JIT-компиляция в виртуальной машине Java (HighLoad++ 2013)
 
Performance Test Driven Development with Oracle Coherence
Performance Test Driven Development with Oracle CoherencePerformance Test Driven Development with Oracle Coherence
Performance Test Driven Development with Oracle Coherence
 
Борьба с GС паузами в JVM
Борьба с GС паузами в JVMБорьба с GС паузами в JVM
Борьба с GС паузами в JVM
 

Распределённое нагрузочное тестирование на Java

  • 1. Распределённое нагрузочное тестирование на Java Алексей Рагозин Артём Панасюк jug.msk.ru 2016
  • 2. В докладе • Введение • Концепция PTDD Performance Test Driven Development • Распределённыйнагрузочныйтест–чтоэто? • Стек инструментов • Пример теста
  • 5. PerformanceTestDrivenDevelopment • Пишем неоптимизированный код • Пишем нагрузочные тесты / бенчмарк • Исправляем проблемы производительности • Организуем изолированные тесты в профили нагрузки по мере добавления функционала • Непрерывное тестирование производительности
  • 6. Как тестировать до “начала”? Нет скрипов, инфраструктуры, приложения Надо тестировать базовые сценарии Тестировать на реальном масштабе Тестировать сценарии отказов Дизайн меняется на ходу, тесты вместе с ним Тесты должны гонять себя сами, у разработчиков хватает работы.
  • 7. Как тестировать до “начала”? На чём вы пишите юнит-тесты? • JUnit - Java Почему бы не писать нагрузочные также? • Мы знаем Java • На Java есть библиотеки для всего • Никаких переформанс инженеров тесты пишут разработчики
  • 8. Вопрос культуры “Классический” подход • bash + ssh + анализ логов + Excel / R • Мало пригоден для повторного использования • Короткий период полураспада тестов • Использование незнакомого инструментария “Монокультурный” подход • Платформаприложения=платформаавтоматизации − Приходится изобретать велосипеды, но + Решается проблема культурного диссонанса
  • 9. Нагрузочный тест Развёртывание  В распределённой среде Подготовка данных / разогрев Сценарий тестирования  Например,дневнойпрофильнагрузкисотказомузлавкластера Сбор метрик  Тестовые события  Метрики ОС  Данные профилирования Подготовка отчёта
  • 10. Стек инструментов Nanocloud - https://github.com/gridkit/nanocloud/  Развертывание / управление распределённой средой GridBeans – “массивно параллельная” Java  Оркестрация развертывая и подготовки  Выполнение сценария Nimble  Компоненты: cбор данных, мониторинг и прочее Отчёты  Сырой CSV на выходе, решение не найдено
  • 12. Nanocloud Удалённое выполнения Java кода Просто как … @Test public void hello_remote_world() { Cloud cloud = CloudFactory.createSimpleSshCloud(); cloud.node("myserver.acme.com").exec(new Callable<Void>(){ @Override public Void call() throws Exception { String localhost = InetAddress.getLocalHost().toString(); System.out.println("Hi! I'm running on " + localhost); return null; } }); }
  • 13. All you need is … NanoCloud requirements  SSHd  Java (1.6 and above) present  Works though NAT and firewalls  Works on Amazon EC2  Works everywhere where SSH works
  • 14. Master – slave communications Master process Slave hostSSH (Single TCP) Slave Slave RMI (TCP) std err std out std in diag Slave controller Slave controller multiplexed slave streams Agent
  • 15. Death clock is ticking Master JVM kills slave processes, unless  SSH session was interrupted  someone kill -9 master JVM  master JVM has crashed (e.g.underdebuger) Death clock is ticking on slave though  if master is not responding  slave process will terminate itself
  • 16. Cloud scale JVM Same API – different topoligies  in-process (debug), local, remote (distributed) Transparent remoting SSH to manage remote server Automatic classpath replication (with caching) Zero infrastructure  Any OS for master host  SSHd + JVM for slave hosts (Unix / Cygwin) 200+ slave topology in routinely used
  • 18. Распределённый сценарий • Простые шаги (реализованные на Java) • Выполняемые в распределённой системе согласно сценарию • Возможность синхронизации шагов • Обмен данными между шагами • Нет циклов и условного выполнения • Fail fast – ошибка любого шага завершает сценарий
  • 19. Mockito @Test public void test() { MyList mock = Mockito.mock(MyList.class, Mockito.RETURNS_DEEP_STUBS); Mockito.when(mock.get(0).getValue()).thenReturn("v1"); Mockito.when(mock.get(1).getValue()).thenReturn("v2"); Assert.assertEquals(null, mock.get(2).getValue()); Assert.assertEquals("v2", mock.get(1).getValue()); Assert.assertEquals("v1", mock.get(0).getValue()); InOrder io = Mockito.inOrder(mock); io.verify(mock).get(2); io.verify(mock).get(1); io.verify(mock).get(0); io.verifyNoMoreInteractions(); }
  • 20. Mockito way 1. Декларация намерений  Моки и вызовы методов  “Виртуальное” время  “Абстрактная” распределённость 2. Физическое выполнение  Привязка к топологии  Зависимости между шагами  Параллельное / распределённое выполнение
  • 21. Простой пример #1 public void example() { MonadBuilder bld = MonadFactory.build(); MyReader reader = bld.locator(Cloud.class).at("reader") .deploy(MyReader.class, ...); reader.configure("read config"); bld.join("start"); reader.execute(); bld.join("done"); bld.rewind(); MyWriter writer = bld.locator(Cloud.class) .at("writer").deploy(MyWriter.class, ...); writer.configure("write config"); bld.join("start"); writer.execute(); bld.join("done"); }
  • 23. Простой пример #1 Драйвер  Интерфейс декларирующий шаги  Шаги – методы  Шаг может вернуть “интерфейс”  Шаги могут принимать параметры  Сериализуемые объекты  Результаты выполнения шагов  Реализация драйвера размещается в распределённой среде используя локатор
  • 24. Простой пример #1 public void example() { MonadBuilder bld = MonadFactory.build(); MyReader reader = bld.locator(Cloud.class).at("reader") .deploy(MyReader.class, ...); reader.configure("read config"); bld.join("start"); reader.execute(); bld.join("done"); bld.rewind(); MyWriter writer = bld.locator(Cloud.class).at("writer") .deploy(MyWriter.class, ...); writer.configure("write config"); bld.join("start"); writer.execute(); bld.join("done"); } Локатор Драйвер прокси CheckpointCheckpoint Перемотка времени
  • 26. Простой пример #2 MyReader reader = bld.locator(Cloud.class).at("reader") .deploy(MyReader.class, ...); reader.configure("read config"); bld.sync(); Runnable readTask = reader.createTask(); bld.join("start"); ExecutionDriver exec = bld.bean(ExecutionDriver.class); Activity readJob = exec.execute(readTask); bld.join("stop"); readJob.stop(); bld.join(readJob); bld.join("done"); bld.rewind("start"); bld.wallclock().delay(30, TimeUnit.SECONDS); bld.join("stop");
  • 28. Простой пример #2 MyReader reader = bld.locator(Cloud.class).at("reader") .deploy(MyReader.class, ...); reader.configure("read config"); bld.sync(); Runnable readTask = reader.createTask(); bld.join("start"); ExecutionDriver exec = bld.bean(ExecutionDriver.class); Activity readJob = exec.execute(readTask); bld.join("stop"); readJob.stop(); bld.join(readJob); bld.join("done"); bld.rewind("start"); bld.wallclock().delay(30, TimeUnit.SECONDS); bld.join("stop"); Вспомогательный сервис Интерфейс фоновых задач Получение сервиса
  • 29. Простой пример #2 Ошибка выполнение шага отлавливается и завершает сценарий. Когда создаётся фоновая задача, используется Activity.join() шага, который не завершится пока задача не будет остановлена. Wallclock – драйвер предоставляемый из коробки. ExecutionDriver – пример вспомогательного драйвера.
  • 30. Распределённый сценарий Всех аспекты теста – Развёртывание / Сбор данных / Мониторинг / и т.д. шаги / драйверы единого сценария
  • 31. Распределённый сценарий Fallacies of distributed computing https://en.wikipedia.org/wiki/Fallacies_of_distributed_computing • The network is reliable – fail test fast. • Latency is zero – small number of round trip. • Bandwidth is infinite – low bandwidth control flow. • The network is secure – irrelevant for testing. • Topology doesn't change – fail test fast and rerun. • There is one administrator – zero deployment. • Transport cost is zero – there is no free lunch  • The network is homogeneous – location conscious scenario.
  • 33. Метеринг Сбор метрик в распределённой среде  Данные тестовых событий  Данные мониторинга Метрики аккумулируются на локальном диске и передаются на управляющий узел по завершении сценария Все результаты экспортируются в CSV файл большой CSV файл
  • 34. Мониторинг Метрики OS - https://github.com/hyperic/sigar  Network interface stats  Process stats (поиск нужных процессов) JVM  GC  Threads  Custom MBeans Build your own
  • 35. Профилирование BTrace 2 - https://github.com/jbachorik/btrace2  Инструментирующий профайлер  Точки перехвата на Java  Развёртывание как часть сценария  Интеграция с метерингом
  • 36. Ссылки NanoCloud • https://github.com/gridkit/nanocloud/ • https://code.google.com/p/gridkit/wiki/NanoCloudTutorial • Maven Central: org.gridkit.lab:nanocloud:0.8.10 • http://blog.ragozin.info/2013/01/remote-code-execution-in-java-made.html GridBeans • https://github.com/aragozin/gridbeans Nimble • https://github.com/gridkit/nimble Пример бенчмарка • https://github.com/gridkit/zk-benchmark-example
  • 37. Thank you Alexey Ragozin alexey.ragozin@gmail.com http://blog.ragozin.info - my articles http://www.meetup.com/bigmoscow - community events in Moscow