Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare a Scribd company logo
How I Learned
to Stop Worrying
and Love the BFG
Надежда Миргородская, Яндекс
2
План
› Что такое BFG
› Где его взять
› И что с ним делать
3
Что такое BFG
Часть Яндекс Танка
5
Aggregator
Uploader
Load Generator
…
Генераторы нагрузки
Phantom JMeter BFG
Производительность Высокая Средняя Средняя
Интерфейс Консоль GUI IDE
Сценарии? Нет Да Да
Язык сценариев - Java Python
6
BFG: pro et contra
▌Плюсы
› это код
› экосистема Питона
▌Минусы
› это код
› производительность не так высока
7
Где взять BFG
Это опенсорс
9
https://github.com/yandex/yandex-tank
https://overload.yandex.net
https://gitter.im/yandex/yandex-tank
И что с ним делать
Вопросы производительности
› Время ответа
› Доля ошибок
› Стабильность
› Предельная нагрузка
› Отказоустойчивость
11
Нам бы побыстрее: сценарий
12
BFG testware
› Сценарий
› Тестовые данные
› Конфигурационный файл
13
Сценарий BFG: класс LoadTest
class LoadTest(object):
def __init__(self, gun):
self.gun = gun
def get_state(self):
response = requests.get(get_state_url)
config = parse_state(response)
def apply(self):
requests.post(apply_url, data=config)
14
Добавляем измерения
class LoadTest(object):
def get_state(self):
with sef.gun.measure('get_state') as measure:
response = self.client.get_state()
measure['proto_code'] = response.status_code
result = parse_state(response)
15
Порядок вызовов: метод default
def default(self):
self.get_state(get_state_url)
self.apply(config)
until state == 'DONE’:
self.check_state()
16
Базовый конфиг
[bfg]
gun_type = ultimate
loop = 100
instances = 10
instances_schedule = const(10,10m)
ammofile = ./ammo.txt
[ultimate_gun]
module_path = ./
module_name = performance_test
17
Время ответа по запросам
18
Доля ошибок по запросам
19
Теги внутри тегов:
общее время транзакции
def default(self):
self.get_state()
with self.gun.measure("activated"):
with self.gun.measure("apply"):
self.apply()
with self.gun.measure("check_state"):
self.check_state()
20
Вопросы производительности
› Время ответа
› Доля ошибок
› Стабильность
› Предельная нагрузка
› Отказоустойчивость
21
Стабильность
22
Вопросы производительности
› Время ответа
› Доля ошибок
› Стабильность
› Предельная нагрузка
› Отказоустойчивость
23
Профиль нагрузки: интенсивность
▌instances_schedule
› instances_schedule = line(1,3,3m)
▌rps_schedule
› instances = 10
› rps_schedule = const(50,5m)
▌free_instances
› instances = 10
24
Подкладываем соломки
autostop = http(5xx, 30%, 60s)
autostop = time(1500s, 10m)
25
Стресс-тест
26
Вопросы производительности
› Время ответа
› Доля ошибок
› Стабильность
› Предельная нагрузка
› Отказоустойчивость
27
Отказ и восстановление
› Гасим реплику
› Проверяем состояния
› Фиксируем объем базы
28
Recovery test
29
Много тестов
› Load test
› Stress test
› Stability test
› Recovery test
› Volume test
30
Profit!
› Повторяемость
› Входит в набор регрессионных тестов
› Однородность с функциональными тестами
› Легко вносить изменения
31
szypulka@yandex-team.ru
Спасибо за внимание!
Надежда Миргородская
szypulka
szypulka.github.io

More Related Content

«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со вкусом питона» Надежда Миргородская, Яндекс