Slide 1

Slide 1 text

Как мы непрерывно тестируем производительность 30 проектов Денис Трифонов Специалист по тестированию производительности, 2ГИС

Slide 2

Slide 2 text

Обо мне Занимаюсь тестированием производительности бекендов внешних продуктов 2ГИС. 2

Slide 3

Slide 3 text

Первые шаги — нагружаем Справочное API Яндекс.Танком — сравниваем старую и новую версии — используем контур стейджинга 3

Slide 4

Slide 4 text

© George Shuklin

Slide 5

Slide 5 text

Подключаем новые проекты — формируем команду — нагружаем Фото и Авторизацию — берём Gatling для сценариев — переиспользуем код 5

Slide 6

Slide 6 text

Cloud Apps CI Runners Tests Автоматизируем — поднимаем Jenkins и слейв с инструментами — делаем сборку Gatling, наследуемся от неё в проектах — пишем прослойку с конфигами : : 6

Slide 7

Slide 7 text

Cloud Apps CI Runners Tests Metrics Exporters Dashboards Мониторим — поднимаем InfluxDB — ставим на машинки Telegraf — поднимаем Grafana с дашбордами : : : 7

Slide 8

Slide 8 text

Cloud Apps CI Analitycs Runners Tests Metrics Exporters Dashboards Хотим фичи — прикручиваем диффер — прикручиваем логи медленных запросов — прикручиваем графики SLA : : : 8

Slide 9

Slide 9 text

Подключаем ещё проекты — выделяем общие компоненты BaseRequest, BaseTest — определяем пакет с core 9

Slide 10

Slide 10 text

И вот их перевалило за 20

Slide 11

Slide 11 text

© www.trainmania.com.ua

Slide 12

Slide 12 text

Плюсы — быстрый старт нового проекта — переиспользование кода и фич — полуавтоматизация и однопоточность тестов — интерфейс запуска и конфигурации тестов — множество технологий на пощупать и выбрать 12

Slide 13

Slide 13 text

Минусы — постоянное участие в правках общего репозитория — при изменении core нужно следить за всеми проектами — три слоя конфигурации — ручной запуск, просьбы запустить — на поддержке множество технологий 13

Slide 14

Slide 14 text

Cloud Apps CI Analitycs Runners Tests Metrics Exporters Dashboards Узкие места : : : 14

Slide 15

Slide 15 text

Ещё людей? Всё переделываем?

Slide 16

Slide 16 text

© www.pskovrail.ru

Slide 17

Slide 17 text

План перестройки — избавиться от общего репозитория и core — разнести тесты по командам — погрузить команду в тестирование — забыть про интерфейсы и полностью автоматизировать — посмотреть, можно ли что-то переиспользовать 17

Slide 18

Slide 18 text

Cloud Apps CI Analitycs Runners Tests Metrics Exporters Dashboards Кодим — переносим в отдельные репозитории и убираем core — делаем тесты самодостаточными — отдаём в команды : : : 18

Slide 19

Slide 19 text

Нюансы и факты — 15% повторяемого кода — Scala не так страшна 19

Slide 20

Slide 20 text

Cloud Apps VCS, CI Analitycs Runners Tools Tests Metrics Exporters Dashboards Автоматизируем — переносим на общий GitLab и GitLab CI — поднимаем Shared runners с docker-executor — создаём docker-образ со всеми инструментами : : : 20

Slide 21

Slide 21 text

Нюансы — оверхед с Docker не замечен — тюнить нужно хост и docker-рантайм — могут быть сложности с пакетами в «одной коробке» — UI нет, поэтому меняем конфигурацию в ветках 21

Slide 22

Slide 22 text

Погружаем в тестирование — проводим мастер-классы — готовим документацию и примеры 22

Slide 23

Slide 23 text

Факты — компетентность людей в нагрузке стала выше — стали тестировать не только перед релизом 23

Slide 24

Slide 24 text

Cloud Apps VCS, CI Analitycs Runners Tools Tests Metrics Exporters Dashboards Мониторим — переезжаем на общие Prometheus и Grafana — используем Ansible роли экспортёров : : : 24

Slide 25

Slide 25 text

Нюансы — договариваемся с админами об увеличении частоты сбора метрик — поднимаем Push Gateway для Graphite-метрик Gatling 25

Slide 26

Slide 26 text

Cloud Apps VCS, CI Runners Tools Tests Metrics Exporters Dashboards Analitycs Смотрим в аналитику — выделяем фиче-скрипты в сервис с UI, открытым API и CLI — дружим с Gatling и Яндекс.Танк : : : 26

Slide 27

Slide 27 text

Факты — к сервису подключились тесты мобилок и фронтенда 27

Slide 28

Slide 28 text

Учимся в Kubernetes — поднимаем рабочую ноду в нагрузочном контуре — добавляем kubectl в образ с инструментами 28

Slide 29

Slide 29 text

Стучимся в процессы — обсуждаем производительность на техническом ревью проектов 29

Slide 30

Slide 30 text

Что получилось — на поддержке минимум технологий — используем общие компоненты — команды вовлечены в процесс тестирования — тотальная автоматизация 30

Slide 31

Slide 31 text

Cloud Apps VCS, CI Runners Tools Tests Metrics Exporters Dashboards Analytics Admins Perf Teams Инфраструктура : : : Legend: 31

Slide 32

Slide 32 text

Cloud Apps VCS, CI Runners Tools Tests Metrics Exporters Dashboards Analytics Common Teams Хотим стрелять во внешний сервис? : : : Legend: 32

Slide 33

Slide 33 text

Cloud Apps VCS, CI Runners Tools Tests Metrics Exporters Dashboards Analytics Common Teams Хотим свои нагрузочные мощности? : : : Legend: 33

Slide 34

Slide 34 text

Cloud Apps VCS, CI Runners Tools Tests Metrics Exporters Dashboards Analytics Common Teams Хотим добавить аналитику? : : : Legend: 34

Slide 35

Slide 35 text

Новый проект: тест phantom: address: example.org load_profile: load_type: rps schedule: line(1, 100, 30s) const(100, 120s) uris: - "/" 35

Slide 36

Slide 36 text

Новый проект: CI test: image: docker-hub/perf/tools script: - yandex-tank -c load.yaml after_script: - cli upload tags: [ perf ] 36

Slide 37

Slide 37 text

14 LOC

Slide 38

Slide 38 text

2 года

Slide 39

Slide 39 text

1 человек

Slide 40

Slide 40 text

© blog.allo.ua

Slide 41

Slide 41 text

Простые советы — на малом числе активных проектов можно выделить core — легаси пусть остаётся легаси — автоматизируйте всё и вся — переиспользуйте и делайте проще — шарьте знания, найдите круг заинтересованных 41

Slide 42

Slide 42 text

Денис Трифонов dentrifonov.github.io Спасибо!