HighLoad++ 2017
Зал «Конгресс-Холл», 8 ноября, 12:00
Тезисы:
http://www.highload.ru/2017/abstracts/2972.html
Разработка любого высоконагруженного сервиса не обходится без нагрузочных тестов. Во многих проектах процесс анализа работы системы под большой нагрузкой слабо структурирован или выполняется непосредственно в бою. Есть масса статьей и рецептов использования тех или иных инструментов, но самые важные вопросы не раскрыты до конца: что именно мы должны измерять, правильно ли мы интерпретируем результаты и как ловить баги, которые проявляются только под высокой нагрузкой.
...
12. Stability
● Смогут ли клиенты купить обед при поломке?
● Как быстро касса будет восстановлена?
● Насколько при этом замедлится обслуживание?
● Не потеряются ли в кассе деньги?
Метрики
● Отказоустойчивость
● Время перерегулирования
● Деградация
● Консистентность
15. Scaling
● N обедов, если добавить еще кухню? (горизонтальное)
● N обедов, если установить более мощную плиту? (вертикальное)
● Один из компонентов обеда готовит только один повар
● Слишком мало касс (большие очереди, обедов много)
● Блюдо готовится медленно (высокий execution time)
Capacity blockers
19. Как искать?
● Fast run (1 минута) - понимание ситуации
● Common case - штатная проверка
● Longevity - поиск редких случаев
● Branch compare - деградация
● Per commit checking - контроль качества
24. Не получается выдать нагрузку
Визуально: разница между system time и user time
По-быстрому: pstack и подобные утилиты
По-серьезному: pprof
25. Не получается выдать нагрузку
Анализ: Начинаем смотреть с уровня железа и сети (метрики)
Решение: Тюнинг буферов ядра, бонд из сетевых карт
Похожие ситуации: использование сценарных утилит в случае, где должны
использоваться hit-based
Вывод: Не продуманы ограничения инфраструктуры или модель
нагрузки
30. Синтетические тесты
Анализ: Смотрим на разницу в данных тестов и production
Решение: Приводим тестовые данные к боевым
Вывод: Не продуманы “профили” данных
37. Построение требований
● Инфраструктура
○ Железо
○
● Деградация
○
○
● Данные
○ “Профиль” данных
○ Требования к консистентности *
○ Избыточность
● Модель нагрузки
○ Открытая
○ Закрытая
38. Построение требований
● Инфраструктура
○ Железо
○
● Деградация
○
○ Допустимая деградация
● Данные
○ “Профиль” данных
○ Требования к консистентности *
○ Избыточность
● Модель нагрузки
○ Открытая
○ Закрытая
39. Синтетические тесты (2)
Проблема: Во время теста видим хорошие показатели, в
production через несколько дней теряются данные
Предположение: Настройки ttl в cold storage
41. Синтетические тесты (2)
Анализ: Тест длится 30 минут, в production проблемы начинаются через
сутки. Потери данных после перекладывания данных в cold storage
Решение: Делать longevity run, была найдена ошибка в настройках шардинга
Вывод: Не продуманы профили нагрузки с учетом специфики сервиса
42. Построение требований
● Модель нагрузки
○ Открытая
○ Закрытая
● Инфраструктура
○ Железо
○
● Деградация
○
○ Допустимая деградация
● Данные
○ “Профиль” данных
○ Требования к консистентности *
○ Избыточность
43. Построение требований
● Модель нагрузки
○ Открытая
○ Закрытая
● Профили нагрузки
○ Постоянная
○ Пиковая
○ Особые случаи (domain-specific)
● Инфраструктура
○ Железо
○
● Деградация
○
○ Допустимая деградация
● Данные
○ “Профиль” данных
○ Требования к консистентности *
○ Избыточность
45. Странные задержки на тестовом стенде
https://communities.vmware.com/thread/505923 - transparent_hugepage
46. Странные задержки на тестовом стенде
Анализ: Стали копать до уровня ОС: мониторинг, transparent hugepage
Решение 1: Уменьшить нагрузку/Поменять scale-unit
Решение 2: Отключить мониторинг VMWare и transparent_hugepage
Решение 3: Тестировать на реальном железе
Вывод: Не учтены особенности инфраструктуры
47. Построение требований
● Модель нагрузки
○ Открытая
○ Закрытая
● Профили нагрузки
○ Постоянная
○ Пиковая
○ Особые случаи (domain-specific)
● Инфраструктура
○ Железо
○
○
● Деградация
○
○ Допустимая деградация
● Данные
○ “Профиль” данных
○ Требования к консистентности *
○ Избыточность
48. Построение требований
● Модель нагрузки
○ Открытая
○ Закрытая
● Профили нагрузки
○ Постоянная
○ Пиковая
○ Особые случаи (domain-specific)
● Метрики (CPU, memory, network, etc..)
● Инфраструктура
○ Железо
○ Особенности инфраструктуры
○
● Деградация
○
○ Допустимая деградация
● Данные
○ “Профиль” данных
○ Требования к консистентности *
○ Избыточность
52. Полный ступор
Анализ: В каждой подсистеме ввели дополнительные метрики и начали
повторять тесты
Решение: Введена метрика “оставшихся” транзакций при обработке батча,
найдена ошибка в коде
Вывод: Не продуманы продуктовые метрики
53. Построение требований
● Модель нагрузки
○ Открытая
○ Закрытая
● Профили нагрузки
○ Постоянная
○ Пиковая
○ Особые случаи (domain-specific)
● Метрики (CPU, memory, network, etc..)
● Инфраструктура
○ Железо
○ Особенности инфраструктуры
○
● Деградация
○
○ Допустимая деградация
● Данные
○ “Профиль” данных
○ Требования к консистентности *
○ Избыточность
54. Построение требований
● Модель нагрузки
○ Открытая
○ Закрытая
● Профили нагрузки
○ Постоянная
○ Пиковая
○ Особые случаи (domain-specific)
● Метрики (CPU, memory, network, etc..)
● Продуктовые-метрики
● Инфраструктура
○ Железо
○ Особенности инфраструктуры
○
● Деградация
○
○ Допустимая деградация
● Данные
○ “Профиль” данных
○ Требования к консистентности *
○ Избыточность
55. Проблема: Внутри ЦОД проблем нет, на уровне ЦОД есть.
Предположение: Проблема понятна, сложно воспроизвести
Отказ узлов в production
58. Отказ узлов в production
Анализ: Тестовый стенд эмулирует один ДЦ, ошибки между ДЦ не
проверяются
Решение: Сделать альтернативный тест с кластерами в 2 раза меньше,
уменьшить нагрузку вдвое и проверить отказ ДЦ
Вывод: Не продуманы точки отказа
64. Kubernetes
Анализ: Развернули тестовый стенд отдельно, исключили проблемы в
сервисе и базе (сомнительно)
Решение: Подробно раскрывается в докладе М. Прокопчука
Быстрое решение: Внести контейнер в pod, если это возможно
Вывод: Не учтены ограничения инфраструктуры
65. Построение требований
● Модель нагрузки
○ Открытая
○ Закрытая
● Профили нагрузки
○ Постоянная
○ Пиковая
○ Особые случаи (domain-specific)
● Метрики (CPU, memory, network, etc..)
● Продуктовые-метрики
● Возможные точки отказа
○ Внутри ДЦ
○ Между ДЦ
○ Задержка между ДЦ
● Инфраструктура
○ Железо
○ Особенности инфраструктуры
○
● Деградация
○ Время перерегулирования
○ Допустимая деградация
● Данные
○ “Профиль” данных
○ Требования к консистентности *
○ Избыточность
66. Построение требований
● Модель нагрузки
○ Открытая
○ Закрытая
● Профили нагрузки
○ Постоянная
○ Пиковая
○ Особые случаи (domain-specific)
● Метрики (CPU, memory, network, etc..)
● Продуктовые-метрики
● Возможные точки отказа
○ Внутри ДЦ
○ Между ДЦ
○ Задержка между ДЦ
● Инфраструктура
○ Железо
○ Особенности инфраструктуры
○ Ограничения доступности
● Деградация
○ Время перерегулирования
○ Допустимая деградация
● Данные
○ “Профиль” данных
○ Требования к консистентности *
○ Избыточность
67. Проблема: Через неделю сильная деградация latency.
Предположение: Как с longevity test, но нет
Все продумали, а в production деградация
71. Все продумали, а в production деградация
Анализ: Tcpdump на серверах приложений (> 1TB), понимание проблемы с
висящими сокетами
Анализ 2: Изучение внешних подсистем и их профилей нагрузки
Решение: Включить сервис в scale-unit и изучать проблему на тестовом
стенде
Вывод: Некорректно выбран scale-unit
72. Построение требований
● Модель нагрузки
○ Открытая
○ Закрытая
● Профили нагрузки
○ Постоянная
○ Пиковая
○ Особые случаи (domain-specific)
● Метрики (CPU, memory, network, etc..)
● Продуктовые-метрики
● Возможные точки отказа
○ Внутри ДЦ
○ Между ДЦ
○ Задержка между ДЦ
● Инфраструктура
○ Железо
○ Особенности инфраструктуры
○ Ограничения доступности
● Деградация
○ Время перерегулирования
○ Допустимая деградация
● Данные
○ “Профиль” данных
○ Требования к консистентности *
○ Избыточность
73. Построение требований
● Модель нагрузки
○ Открытая
○ Закрытая
● Профили нагрузки
○ Постоянная
○ Пиковая
○ Особые случаи (domain-specific)
● Метрики (CPU, memory, network, etc..)
● Продуктовые-метрики
● Возможные точки отказа
○ Внутри ДЦ
○ Между ДЦ
○ Задержка между ДЦ
● Инфраструктура
○ Железо
○ Особенности инфраструктуры
○ Ограничения доступности
● Деградация
○ Время перерегулирования
○ Допустимая деградация
● Данные
○ “Профиль” данных
○ Требования к консистентности *
○ Избыточность
● Scale-unit (!)
74. Требования к системе
Разные уровни тестов
Управление профилями нагрузки
Подключаемые нагрузочные утилиты
Сбор телеметрии и бизнес-метрик
Сравнения и per commit тесты
Автоматизация отключения узлов
Управление конфигурацией стенда
Сбор логов и данных
Конфигурируемый анализ результатов
Отчеты
76. Заключение
Чеклист выстрадан в production
Можно обойтись без тестировщика
Быстрые эксперименты
Этот подход помогает выигрывать технические тендеры
https://gist.github.com/Sulverus/b7b76a66fb13d1e8a1355694c28cf8ff