Михаил Епихин
Танкиcт
Будни
тестирования
Cassandra
Введение
Что такое Cassandra?
Зачем она нужна?
4
Use Case
• Read & Write
– Раздельные тесты
– Смешанные тесты
5
Use Case
• Read & Write
– Раздельные тесты
– Смешанные тесты
• Size & Types
– Различные размеры блобов
– Text / Binary
6
Use Case
• Read & Write
– Раздельные тесты
– Смешанные тесты
• Size & Types
– Различные размеры блобов
– Text / Binary
• Replication Factor & Consistency Level
7
Инструментарий
• YCSB
8
Инструментарий
• YCSB
• cassandra-stress
9
Инструментарий
• YCSB
• cassandra-stress
• Iago
10
Инструментарий
• YCSB
• cassandra-stress
• Iago
• Apache JMeter
11
Инструментарий
• YCSB
• cassandra-stress
• Iago
• Apache JMeter + Netflix plugins
12
Инструментарий
• YCSB
• cassandra-stress
• Iago
• Apache JMeter + Netflix plugins
JAVA
13
Apache JMeter + Netflix plugins
• Гибкость инструмента
– scenario-based
– hit-based
14
Apache JMeter + Netflix plugins
• Гибкость инструмента
– scenario-based
– hit-based
• Простота и открытость инструмента
15
Apache JMeter + Netflix plugins
• Гибкость инструмента
– scenario-based
– hit-based
• Простота и открытость инструмента
• Опыт
16
Apache JMeter + Netflix plugins
• Гибкость инструмента
– scenario-based
– hit-based
• Простота и открытость инструмента
• Опыт
• Интеграция
– yandex-tank
– Лунапарк
Минимальный кластер
CPU E5-2660 x 2
RAM 128Gb
HDD (7200rpm) x 4
NET 1Gbit/s
18
Use Case
• Write
• 1M files text 1kb data
• Snappy
• Consistency Level 3
• Replication Factor 3
19
Пристреливаемся
Длинный текст
20
Пристреливаемся
Длинный текст
>6000 RPS
21
fail :(
Длинный текст
200 RPS
22
HDD RAID10 >200 IOPS
23
${__FileToString()}
24
/dev/shm & tmpfs
25
HDD → tmpfs
26
HDD → tmpfs
16000RPS
27
Синтетический тест (tmpfs)
${__FileToString(/tmp/shm/test)}
28
Производительность ${__FileToString}
29
Производительность ${__FileToString}
~16000RPS
30
Кешируем прочитанное!
${__ReadNCache()}
Concurrent LRU Cache
https://github.com/sch1z0phren1a/jmeter-
readncache
31
Синтетический тест (java heap)
${__ReadNCache(/tmp/shm/test)}
32
tmpfs vs java heap
33
tmpfs vs java heap
216KRPS
34
tmpfs → java heap
35
tmpfs → java heap
35000 RPS
36
tmpfs → java heap
35000 RPS
37
Что же делать?
38
Нестабильная подача нагрузки
39
Анализ работы генератора нагрузки
• Открытие файла
• Формирование запроса
• Отправка запроса
• Получение ответа
• Логирование результата
40
Анализ работы генератора нагрузки
• Открытие файла
• Формирование запроса
• Отправка запроса
• Получение ответа
• Логирование результата
41
Анализ работы генератора нагрузки
• Открытие файла
• Формирование запроса
• Отправка запроса
• Получение ответа
• Логирование результата
?
42
Чем занимаются потоки?
jstack -l $(pgrep java)
43
Thread 2391: (state = BLOCKED)
- java.io.PrintWriter.println(java.lang.String) @bci=6,
line=738 (Compiled frame)
-
org.apache.jmeter.reporters.ResultCollector.sampleOccurred(o
rg.apache.jmeter.samplers.SampleEvent) @bci=83, line=510
(Compiled frame)
Изучаем деятельность потоков
44
Анализ работы генератора нагрузки
• Открытие файла
• Формирование запроса
• Отправка запроса
• Получение ответа
• Логирование результата
45
writer = new PrintWriter(new OutputStreamWriter(new
BufferedOutputStream(new FileOutputStream(filename,
trimmed)),
SaveService.getFileEncoding("UTF-8")), true);
ResultCollector.sampleOccurred
46
writer = new PrintWriter(new OutputStreamWriter(new
BufferedOutputStream(new FileOutputStream(filename,
trimmed)),
SaveService.getFileEncoding("UTF-8")), true);
ResultCollector.sampleOccurred
47
Ускоряемся!
Чем плох autoFlush?
Что будет если заменим true на false?
48
Построчно или поблочно?
49
Построчно или поблочно?
98 vs 280 KRPS
50
Поблочно!
Apache JMeter 2.10
51
PrintWriter
Sampler Thread → PrintWriter
52
PrintWriter
Sampler Thread
Sampler Thread
Sampler Thread
Sampler Thread
Sampler Thread
Sampler Thread
Sampler Thread → PrintWriter
Sampler Thread
Sampler Thread
Sampler Thread
Sampler Thread
Sampler Thread
Sampler Thread
53
PrintWriter
Sampler Thread
Sampler Thread
Sampler Thread
Sampler Thread
Sampler Thread
Sampler Thread
Sampler Thread → PrintWriter
Sampler Thread
Sampler Thread
Sampler Thread
Sampler Thread
Sampler Thread
Sampler Thread
54
LF Queue
Sampler Thread
Sampler Thread
Sampler Thread
Sampler Thread
Sampler Thread
Sampler Thread
Sampler Thread LF Queue
Sampler Thread
Sampler Thread
Sampler Thread
Sampler Thread
Sampler Thread
Sampler Thread
55
LF Queue
Sampler Thread
Sampler Thread
Sampler Thread
Sampler Thread
Sampler Thread
Sampler Thread
Sampler Thread LF Queue
Sampler Thread
Sampler Thread
Sampler Thread
Sampler Thread
Sampler Thread
Sampler Thread
56
LF Queue
Sampler Thread
Sampler Thread
Sampler Thread
Sampler Thread
Sampler Thread
Sampler Thread
Sampler Thread LF Queue
Sampler Thread
Sampler Thread
Sampler Thread
Sampler Thread
Sampler Thread
Sampler Thread
Logging Thread
57
Еще быстрее! WritebackPrintWriter!
58
Еще быстрее! WritebackPrintWriter!
98 vs 216 vs 370 KRPS
59
Download WritebackPrintWriter
http://yadi.sk/d/98Rd05Sh4LA27
60
autoFlush=true → WritebackPrintWriter
61
autoFlush=true → WritebackPrintWriter
45000 RPS
62
Кооперативный режим!
63
Кооперативный режим!
64
Кооперативный режим!
~40000 RPS
65
Кооперативный режим!
~40000 RPS
66
Выводы
• Мониторинг (Hardware/Software)
67
Выводы
• Мониторинг (Hardware/Software)
• Синтетические тесты
68
Выводы
• Мониторинг (Hardware/Software)
• Синтетические тесты
• Деятельность потоков
69
Выводы
• Мониторинг (Hardware/Software)
• Синтетические тесты
• Деятельность потоков
• Корректность теста
Михаил Епихин
Танкист
+7 (915) 344 05 20
schizophrenia@yandex-team.ru
Спасибо
Вопросы

Будни тестирования Cassandr-ы