Олесь Писаренко "Открываем Яндекс.Танк"

Post on 11-Nov-2014

8.048 Views

Category:

Technology

4 Downloads

Preview:

Click to see full reader

DESCRIPTION

Инструмент нагрузочного тестирования Яндекс.Танк. Рассказ об истории возникновения инструмента, его возможностях и примерах использования.

TRANSCRIPT

Я.Субботник,  Москва,  28  июля,  2012  года  

 

 

 

Олесь  Писаренко  

Яндекс.Танк  

Руководитель службы нагрузочного тестирования

 

 

Содержание  

2  

•  Яндекс.Танк  

 

 

Содержание  

3  

•  Яндекс.Танк  

•  Особенности  

 

 

Содержание  

4  

•  Яндекс.Танк  

•  Особенности  

•  Простые  примеры  

 

 

Содержание  

5  

•  Яндекс.Танк  

•  Особенности  

•  Простые  примеры  

•  Немного  хардкора  

 

 

Содержание  

6  

•  Яндекс.Танк  

•  Особенности  

•  Простые  примеры  

•  Немного  хардкора  

•  Ссылки  

 

Содержание  

7  

Жаргонарий  

 

 

8  

Жаргонарий  

 

 

9  

l   Танк  —  источник  нагрузки  

 

Жаргонарий  

 

 

10  

l   Танк  —  источник  нагрузки  

l   Мишень  —  объект  нагрузки  

 

Жаргонарий  

 

 

11  

l   Танк  —  источник  нагрузки  

l   Мишень  —  объект  нагрузки  

l   Стрельба  —  тест  

 

Жаргонарий  

 

 

12  

l   Танк  —  источник  нагрузки  

l   Мишень  —  объект  нагрузки  

l   Стрельба  —  тест  

l   Патрон  —  запрос  к  объекту  нагрузки  

 

Жаргонарий  

 

 

13  

l   Танк  —  источник  нагрузки  

l   Мишень  —  объект  нагрузки  

l   Стрельба  —  тест  

l   Патрон  —  запрос  к  объекту  нагрузки  

l   Лента  —  последовательность  запросов  

Яндекс.Танк  

 

 

14  

Яндекс.Танк  

 

 

15  

l   Производительный  

 

Яндекс.Танк  

 

 

16  

l   Производительный  

l   Простой  

 

Яндекс.Танк  

 

 

17  

l   Производительный  

l   Простой  

l   Opensource  (as  is)  

Движок  Яндекс.Танка  

 

 

18  

Phantom:  

Высокопроизводительный  вебсервер,  прокси,  клиент.    

Разработчик  -­‐  Евгений  Мамчиц  

hips://github.com/mamchits/phantom  

 

Немного  истории  

 

 

19  

Подробнее  здесь:  

«Вебсервер  Phantom»  

докладчик  Влад  Селиверстов  

hip://clck.ru/1Knyv  

 

Немного  истории  

 

 

20  

О  нашем  инструменте:  

«Танки  в  Лунапарке»  

докладчик  Андрей  Кузьмичев  

hip://clck.ru/1Ko-­‐z  

 

Особенности  

21  

Особенности  

l   Консольный  

 

22  

Особенности  

l   Консольный  

l   Linux-­‐only  

 

23  

Особенности  

l   Консольный  

l   Linux-­‐only  

l   Hit-­‐based  

 

24  

Особенности  

l   Консольный  

l   Linux-­‐only  

l   Hit-­‐based  

l   Модульный  

25  

Что  умеет    

26  

Что  умеет    

l   HTTP/HTTPS/Stateless  

 

27  

Что  умеет    

l   HTTP/HTTPS/Stateless  

l   IPv4/IPv6  

 

28  

Что  умеет    

l   HTTP/HTTPS/Stateless  

l   IPv4/IPv6  

l   До  100к  запросов/cек    

29  

Что  умеет    

l   HTTP/HTTPS/Stateless  

l   IPv4/IPv6  

l   До  100к  запросов/cек    

l   «Раскладка»  времён  

 

30  

Что  умеет    

l   HTTP/HTTPS/Stateless  

l   IPv4/IPv6  

l   До  100к  запросов/cек    

l   «Раскладка»  времён  

l   Многое  другое  

31  

Сразу  в  лоб  

Графиков  не  будет  

32  

Собрались  

33  

Установка  

 

 

34  

Требования:  

l   Ubuntu  Server/Desktop  

l   32/64bit  

l   Lucid/Precise  

Установка    

 

 

35  

# Ubuntu Lucid deb http://mirror.yandex.ru/mirrors/tank common main deb http://mirror.yandex.ru/mirrors/tank lucid main

Добавляем необходимые репозитории

# Ubuntu Precise deb http://mirror.yandex.ru/mirrors/tank common main deb http://mirror.yandex.ru/mirrors/tank precise main

Установка    

 

 

36  

$ sudo apt-get update

$ sudo apt-get install yandex-load-tank-base

$ dpkg -l | grep tank ii yandex-load-tank-base

Подготовка  $ lunapark ==== Welcome to Lunapark ==== Usage: lunapark AMMO-FILE [OPTIONS] Try `lunapark --help' for more information.

 

 

 

37  

$ nano load.conf

Пример  1  

Тестирование  HTTP  сервиса  постоянной  нагрузкой  в  10  рпс.    

Запрашиваем  корневую  страницу.    

 

 

38  

Пример  1  

39  

$cat load.conf # Tank Config File address=127.0.0.1:80 #Адрес (IP only!) и порт стенда load = const (10,10m) #Схема нагрузки # Перечисление заголовков и GET запросов: uri = /

Пример  1  

40  

$cat load.conf # Tank Config File address=127.0.0.1:80 #Адрес (IP only!) и порт стенда load = const (10,10m) #Схема нагрузки # Перечисление заголовков и GET запросов: uri = /

Пример  1  

41  

$cat load.conf # Tank Config File address=127.0.0.1:80 #Адрес (IP only!) и порт стенда load = const (10,10m) #Схема нагрузки # Перечисление заголовков и GET запросов: uri = /

Пример  1  

42  

$cat load.conf # Tank Config File address=127.0.0.1:80 #Адрес (IP only!) и порт стенда load = const (10,10m) #Схема нагрузки # Перечисление заголовков и GET запросов: uri = /

Пример  1  

43  

$ lunapark ==== Welcome to Lunapark ==== doctor-desktop.yandex.ru (doctor) phantom=0.14.0 yandex-load-tank=N/A ammo=/home/doctor/10/ammo_20120725-180420.txt ==== Stepper ==== Creating cases tree: 100% Case: 3. Ammo type: uri Ammo Generating: 100% lunapark: starting preproc... Done

Запускаем стрельбу

Пример  1  

44  

Пример  1  

45  

Пример  1  

46  

Пример  1  

47  

Пример  1  

48  

Пример  1  

49  

Пример  1  

50  

Пример  1  

51  

Пример  2  

Тестирование  HTTP  сервиса  линейно-­‐возрастающей  нагрузкой  до  100  рпс.    

Запрашиваем  корневую  страницу.    

Используем  IPv6  +  SSL  

 

 

52  

Пример  2  

53  

$cat load.conf # Tank Config File address=0:0:0:0:0:0:0:1:443 # load = line (1,100,10m) #Схема нагрузки ssl=1 # включение режима SSL # Перечисление заголовков и GET запросов: uri = /

Пример  2  

54  

Пример  3  

Тестирование  HTTP  сервиса  ступенчато-­‐возрастающей  нагрузкой  до  100  рпс.    

Запрашиваем  корневую  страницу.    

Используем  IPv6  +  SSL  

 

 

55  

Пример  3  

56  

$cat load.conf # Tank Config File address=0:0:0:0:0:0:0:1:443 # load = step (1,100,10,1m) #Схема нагрузки ssl=1 # включение режима SSL # Перечисление заголовков и GET запросов: uri = /

Пример  3  

57  

Пример  4  

Тестирование  HTTP  сервиса  c  прогревом,  линейно-­‐ступенчато-­‐возрастающей  нагрузкой  до  30  рпс  с  одним  «спайком»  до  100  рпс  и  плавным  снижением  нагрузки.    

Запрашиваем  корневую  страницу.    

Используем  IPv6  +  SSL  

 

 58  

Пример  4  

59  

$cat load.conf # Tank Config File address=0:0:0:0:0:0:0:1:443 # load = const(1,1m), line(1,10,1m), step(10,30,10,1m) load = const(30,1m), const(100,1), line(100,1,1m) ssl=1 # включение режима SSL # Перечисление заголовков и GET запросов: uri = /

Пример  4  

60  

Пример  5  

Тестирование  HTTP  сервиса  постоянной  нагрузкой  10  рпс.    

Запрашиваем  несколько  страниц  с  определенными  заголовками.    

Используем  IPv6  +  SSL  

 

 61  

Пример  5  

62  

$cat load.conf # Tank Config File address=127.0.0.1:80 #Адрес (IP only!) и порт стенда load = const (10,10m) #Схема нагрузки # Перечисление заголовков и GET запросов: header_http = 1.1 header_connection = close header_host = example.com uri = / uri = /buy

Пример  5  

63  

$cat load.conf # Tank Config File address=127.0.0.1:80 #Адрес (IP only!) и порт стенда load = const (10,10m) #Схема нагрузки # Перечисление заголовков и GET запросов: header_http = 1.1 header_connection = close header_host = example.com uri = / uri = /buy

Пример  5  

64  

$cat load.conf # Tank Config File address=127.0.0.1:80 #Адрес (IP only!) и порт стенда load = const (10,10m) #Схема нагрузки # Перечисление заголовков и GET запросов: header_http = 1.1 header_connection = close header_host = example.com uri = / uri = /buy

Пример  5  

65  

$cat load.conf # Tank Config File address=127.0.0.1:80 #Адрес (IP only!) и порт стенда load = const (10,10m) #Схема нагрузки # Перечисление заголовков и GET запросов: header_http = 1.1 header_connection = close header_host = example.com uri = / uri = /buy

Это  были  цветочки  

66  

Да  сколько  можно!?  

 

 

67  

Потерпите,  мы  уже  прошли  половину  

Немного  хардкора  

 

 

68  

Немного  хардкора  

 

 

69  

Что делать в сложных случаях ?

Немного  хардкора  

 

 

70  

Как выглядит обычный HTTP запрос?

Немного  хардкора  

 

 

71  

Request-Line

Request Headers

Data (OPTIONAL)

Немного  хардкора  

 

 

72  

POST / HTTP/1.1

Host: example.com Content-Length:3 Connection: Close

uho

Немного  хардкора  

 

 

73  

Запрос для Яндекс.Танка будет таким:

80 POST / HTTP/1.1 Host: example.com Content-Length:3 Connection: Close uho

Немного  хардкора  

 

 

74  

Запрос для Яндекс.Танка будет таким:

80 POST / HTTP/1.1 Host: example.com Content-Length:3 Connection: Close uho

Немного  хардкора  

 

 

75  

Запрос для Яндекс.Танка будет таким:

80 POST / HTTP/1.1 Host: example.com Content-Length:3 Connection: Close uho Сохраним этот запрос в файл ammo.txt

Немного  хардкора  

 

 

76  

Упростим load.conf

$cat load.conf # Tank Config File address=127.0.0.1:80 #Адрес (IP only!) и порт стенда load = const (10,10m) #Схема нагрузки # Перечисление заголовков и GET запросов: header_http = 1.1 header_connection = close header_host = target.yandex.net uri = / uri = /buy

Немного  хардкора  

 

 

77  

Упростим load.conf

$cat load.conf # Tank Config File address=127.0.0.1:80 #Адрес (IP only!) и порт стенда load = const (10,10m) #Схема нагрузки # Перечисление заголовков и GET запросов: header_http = 1.1 header_connection = close header_host = target.yandex.net uri = / uri = /buy

Немного  хардкора  

 

 

78  

Упростим load.conf

$cat load.conf # Tank Config File address=127.0.0.1:80 #Адрес (IP only!) и порт стенда load = const (10,10m) #Схема нагрузки

Немного  хардкора  

79  

$ lunapark ammo.txt ==== Welcome to Lunapark ==== doctor-desktop.yandex.ru (doctor) phantom=0.14.0 yandex-load-tank=N/A ammo=/home/doctor/10/ammo.txt ==== Stepper ==== Creating cases tree: 100% Case: 3. Ammo type: request Ammo Generating: 100% lunapark: starting preproc... Done

Запускаем стрельбу

Немного  хардкора  

80  

$ lunapark ammo.txt ==== Welcome to Lunapark ==== doctor-desktop.yandex.ru (doctor) phantom=0.14.0 yandex-load-tank=N/A ammo=/home/doctor/10/ammo.txt ==== Stepper ==== Creating cases tree: 100% Case: 3. Ammo type: request Ammo Generating: 100% lunapark: starting preproc... Done

Запускаем стрельбу

Немного  хардкора  

81  

Ура! Стреляет!

Немного  хардкора  

82  

А теперь склеим несколько запросов и запишем их в файл ammo.txt друг за другом

Немного  хардкора  

83  

80 POST / HTTP/1.1 Host: example.com Content-Length:3 Connection: Close uho

80 POST / HTTP/1.1 Host: example.com Content-Length:3 Connection: Close nos

80 POST / HTTP/1.1 Host: example.com Content-Length:3 Connection: Close rot

+

+

=

Немного  хардкора  

84  

Мы получили «ленту» запросов

Немного  хардкора  

85  

Мы получили «ленту» запросов

Немного  хардкора  

86  

$ lunapark ammo.txt ==== Welcome to Lunapark ==== doctor-desktop.yandex.ru (doctor) phantom=0.14.0 yandex-load-tank=N/A ammo=/home/doctor/10/ammo.txt ==== Stepper ==== Creating cases tree: 100% Case: 3. Ammo type: request Ammo Generating: 100% lunapark: starting preproc... Done

Запуск аналогичен одиночному запросу:

Можно  перед0хнУть  

87  

Еще  немного...  

88  

Еще  немного...  

89  

$ head phout* ==> phout_20120725-172045.txt <== 1343222446.181 front_page 1533 273 29 1002 229 1238 18 297 0 200 1343222446.288 front_page 1261 681 14 519 47 1144 18 297 0 200 1343222446.388 front_page 926 365 18 506 37 830 18 297 0 200 1343222446.488 front_page 883 242 11 600 30 811 18 297 0 200 1343222446.588 front_page 521 214 9 267 31 437 18 297 0 200 1343222446.688 front_page 877 228 15 524 110 720 18 297 0 200 1343222446.788 front_page 1240 677 15 506 42 1145 18 297 0 200 1343222446.888 front_page 1102 319 16 722 45 1006 18 297 0 200 1343222446.988 front_page 857 246 14 552 45 757 18 297 0 200

Все результаты теста сбрасываются в файл phout.txt

Еще  немного...  

90  

phout.txt - основное хранилище не агрегированных данных

Еще  немного...  

91  

Формат phout.txt хорошо описан в документации

Еще  немного...  

92  

Формат phout.txt хорошо описан в документации Зачем?

Затем,  что...  

93  

phout.txt

loadosophia

DB

API

gnuplot

JS

Excel

???

А  могу  ли  я...?  Да!  

94  

POST

GET

WEBDAV GZIP

COOKIE

POP3

SMTP URLENCODE

MULTIPART

CGI PARAM

SPIKE TEST THREAD TEST

REQ FILE

TAGS

LOOP

CUSTOM TIMINGS

HEADERS

RECOVERY TEST

А  могу  ли  я...?  Да!  

95  

POST

GET

WEBDAV GZIP

COOKIE

POP3

SMTP URLENCODE

MULTIPART

CGI PARAM

SPIKE TEST THREAD TEST

REQ FILE

TAGS

LOOP

CUSTOM TIMINGS

HEADERS

RECOVERY TEST README.TXT

Почти  всё  

96  

Полезные  ссылки  

 

 

97  

Приготовились ...3..2..1

Phantom  

 

 

98  

http://clck.ru/1KRej

Евгений Мамчиц

Phantom  ARM    

 

 

99  

http://clck.ru/1KRhJ

Дмитрий Билунов

Phantom  Docs    

 

 

100  

http://clck.ru/1KRhX

Григорий Комиссаров

Firebat  console    

 

 

101  

http://clck.ru/1KRhp

Григорий Комиссаров

Loadosophia    

 

 

102  

http://clck.ru/1KodD

Андрей Похилько

Яндекс.Танк    

 

 

103  

http://clck.ru/1KRiB

Yandex-­‐load    

 

 

104  

http://clck.ru/1KRiP

Спасибо  этим  ребятам!    

 

 

105  

Вопросы  

 

 

106  

Руководитель  службы  НТ  

doctor@yandex-­‐team.ru  

twiier:  @doctornkz  

 

Олесь  Писаренко  

 

top related