Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
How I Learned
to Stop Worrying
and Love the BFG
Надежда Миргородская, Яндекс
2
План
› Что такое BFG
› Где его взять
› И что с ним делать
3
Что такое BFG
Часть Яндекс Танка
5
Aggregator
Uploader
Load Generator
…
Генераторы нагрузки
Phantom JMeter BFG
Производительность Высокая Средняя Средняя
Интерфейс Консоль GUI IDE
Сценарии? Нет ...
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...
Добавляем измерения
class LoadTest(object):
def get_state(self):
with sef.gun.measure('get_state') as measure:
response = ...
Порядок вызовов: метод default
def default(self):
self.get_state(get_state_url)
self.apply(config)
until state == 'DONE’:
...
Базовый конфиг
[bfg]
gun_type = ultimate
loop = 100
instances = 10
instances_schedule = const(10,10m)
ammofile = ./ammo.tx...
Время ответа по запросам
18
Доля ошибок по запросам
19
Теги внутри тегов:
общее время транзакции
def default(self):
self.get_state()
with self.gun.measure("activated"):
with sel...
Вопросы производительности
› Время ответа
› Доля ошибок
› Стабильность
› Предельная нагрузка
› Отказоустойчивость
21
Стабильность
22
Вопросы производительности
› Время ответа
› Доля ошибок
› Стабильность
› Предельная нагрузка
› Отказоустойчивость
23
Профиль нагрузки: интенсивность
▌instances_schedule
› instances_schedule = line(1,3,3m)
▌rps_schedule
› instances = 10
› r...
Подкладываем соломки
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!
› Повторяемость
› Входит в набор регрессионных тестов
› Однородность с функциональными тестами
› Легко вносить изм...
szypulka@yandex-team.ru
Спасибо за внимание!
Надежда Миргородская
szypulka
szypulka.github.io
Upcoming SlideShare
Loading in …5
×

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

188 views

Published on

Выступление на PYCON RUSSIA 2017

Published in: Internet
  • Be the first to comment

  • Be the first to like this

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

  1. 1. How I Learned to Stop Worrying and Love the BFG Надежда Миргородская, Яндекс
  2. 2. 2
  3. 3. План › Что такое BFG › Где его взять › И что с ним делать 3
  4. 4. Что такое BFG
  5. 5. Часть Яндекс Танка 5 Aggregator Uploader Load Generator …
  6. 6. Генераторы нагрузки Phantom JMeter BFG Производительность Высокая Средняя Средняя Интерфейс Консоль GUI IDE Сценарии? Нет Да Да Язык сценариев - Java Python 6
  7. 7. BFG: pro et contra ▌Плюсы › это код › экосистема Питона ▌Минусы › это код › производительность не так высока 7
  8. 8. Где взять BFG
  9. 9. Это опенсорс 9 https://github.com/yandex/yandex-tank https://overload.yandex.net https://gitter.im/yandex/yandex-tank
  10. 10. И что с ним делать
  11. 11. Вопросы производительности › Время ответа › Доля ошибок › Стабильность › Предельная нагрузка › Отказоустойчивость 11
  12. 12. Нам бы побыстрее: сценарий 12
  13. 13. BFG testware › Сценарий › Тестовые данные › Конфигурационный файл 13
  14. 14. Сценарий 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
  15. 15. Добавляем измерения 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
  16. 16. Порядок вызовов: метод default def default(self): self.get_state(get_state_url) self.apply(config) until state == 'DONE’: self.check_state() 16
  17. 17. Базовый конфиг [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. 18. Время ответа по запросам 18
  19. 19. Доля ошибок по запросам 19
  20. 20. Теги внутри тегов: общее время транзакции 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. 21. Вопросы производительности › Время ответа › Доля ошибок › Стабильность › Предельная нагрузка › Отказоустойчивость 21
  22. 22. Стабильность 22
  23. 23. Вопросы производительности › Время ответа › Доля ошибок › Стабильность › Предельная нагрузка › Отказоустойчивость 23
  24. 24. Профиль нагрузки: интенсивность ▌instances_schedule › instances_schedule = line(1,3,3m) ▌rps_schedule › instances = 10 › rps_schedule = const(50,5m) ▌free_instances › instances = 10 24
  25. 25. Подкладываем соломки autostop = http(5xx, 30%, 60s) autostop = time(1500s, 10m) 25
  26. 26. Стресс-тест 26
  27. 27. Вопросы производительности › Время ответа › Доля ошибок › Стабильность › Предельная нагрузка › Отказоустойчивость 27
  28. 28. Отказ и восстановление › Гасим реплику › Проверяем состояния › Фиксируем объем базы 28
  29. 29. Recovery test 29
  30. 30. Много тестов › Load test › Stress test › Stability test › Recovery test › Volume test 30
  31. 31. Profit! › Повторяемость › Входит в набор регрессионных тестов › Однородность с функциональными тестами › Легко вносить изменения 31
  32. 32. szypulka@yandex-team.ru Спасибо за внимание! Надежда Миргородская szypulka szypulka.github.io

×