Нагрузочное тестирование Тимур Хайруллин, Яндекс Нагрузочное тестирование • ЗАЧЕМ тестировать? • ЧТО тестировать • ЧЕМ тестировать? • КАК тестировать? • КАК организвать процесс? • КАК теперь со всем этим жить? :-) ПОЧЕМУ? • Правило «0.1 – 1 – 10»: субъективные ощущения от интерфейса • Пример исследований: 33% пользователей не дожидаются загрузки страницы с описанием модели, если ждать приходится дольше 4 сек. • три года назад 33% не хотели ждать дольше 8 сек: broadband everywhere! ПОЧЕМУ? Работает или нет? • Работает: HTTP 200 • Не работает: HTTP 500 • «Работает, но не очень»: слишком медленно! • ОК, failure, soft failure ПОЧЕМУ? • Определяем критерии качества: «что такое хорошо и что такое плохо» в секундах • Критично ли, если пользователь прождёт лишнюю секунду НА ЭТОЙ СТРАНИЦЕ? • Универсального рецепта нет: для разных страниц разное время отклика можно считать допустимым ЧТО? А что мы, собственно говоря, собираемся тестировать? • Что мы знаем о жизни нашего сайта? ЧТО? • Оценить, сколько хитов придёт на сайт в течение суток • Уточнить распределение нагрузки по времени суток ЧТО? • Кружок моделирования, задача – построить минимальную модель с максимальной функциональностью • Важно найти точки модели с минимальной sclability и постараться физически разнести их • И вот на этой модели мы попытаемся взлететь :-) ЧЕМ? • Рукоятки управления инструмента: интенсивность, сценарии • Приборы инструмента: интенсивность, время ответа •Commercial software: дорого, неудобно и нерасширяемо • Free software: гибко, но не всегда устраивает • Home-made: нужно делать, зато устраивает всем • Наш выбор: 2+3 КАК? • Performance testing (оценочное) • Load testing (нагрузочное) • Stress testing (стрессовое) • Volume testing(объёмное) • Recovery testing (аварийное) • Scalability testing (масштабное) КАК? Performance testing, или оценочное тестирование • Отвечает на вопрос «как быстро работает наша система?» • Отвечает на вопрос «устраивает ли нас быстродействие нашей системы?» • Методика: «дадим нагрузку N, как быстро отвечает наша система?» КАК? Load testing, или «нагрузочное» тестирование • Отвечает на вопрос «что происходит с нашей системой при работе в режиме 24x7x365?» • Методика: нагрузить систему в течение длительного времени, включить мониторинги и наблюдать КАК? Stress testing, ну, понятно ;-) • Отвечает на вопрос «что происходит с нашей системой при значительном превышении расчётной нагрузки?» • Методика: наблюдать за поведением системы и особенно – как именно она НЕ РАБОТАЕТ ;-) КАК? Volume testing, или объёмное тестирование • Отвечает на вопрос «что происходит с нашей системой при значительном росте данных?» • Отвечает на вопрос «что происходит с нашей системой через полгода? А через год?» • Методика: увеличить объем тестовых данных (вдвое, в пять, десять раз» и провести повторное оценочное тестирование КАК? Recovery testing, или аварийное тестирование • Отвечает на вопрос «что происходит с нашей системой при отказе одного из компонетов? А при недостатке ресурсов?» • Суть – скорее тестирование процедур принятия решений • Методика: «выдернуть» из-под системы ресурс, наблюдать, как именно система НЕ РАБОТАЕТ КАК? Scalability testing, или масштабное тестирование • Отвечает на вопрос «что происходит с нашей системой при добавлении ресурсов?» • Методика: сложна и запутана :-( КАК организовать процесс? • Планирование: нагрузочное тестирование – часть производственного процесса • Багтрекер: баг по нагрузке – такой же баг! • Предсказание: знать нагрузку в будущем. На год вперёд, например • Склероз: хранить результаты тестирования ПРОБЛЕМЫ? Да :-( • Огромные объёмы данных для анализа • Сложность и неточность предсказаний • Отсутствие квалифицированных кадров • «финансирование» по остаточному принципу, неразвитость направления в целом РЕШЕНИЯ? Да! :-) • Читайте логи, они рулез! • Следите за статистикой и приборами • Учите коллег простым трюкам • Вырастите в коллективе ответственного. Или назначьте :-) • Следите за тенденциями, ростом интернета, например • Будьте в курсе того, что происходит вокруг ВОПРОСЫ? Да! СПАСИБО!