Тестирование производительности и антишаблоны для облачных приложений
Антишаблоны производительности (как и конструктивные шаблоны) представляют собой распространенные дефектные процессы и реализации в организациях. Это распространенные подходы, которые с большой вероятностью приводят к проблемам с масштабируемостью при нагрузке на приложение. Осведомленность об этих методиках может помочь упростить взаимодействие с высокоуровневых концепций среди специалистов по программному обеспечению, а знание антипаттернов может быть полезно при проверке кода или диагностике проблем с производительностью.
Ниже приведен распространенный сценарий: приложение работает хорошо во время тестирования производительности. Затем оно помещается в рабочую среду и начинает обрабатывать реальные рабочие нагрузки. На этом этапе приложение начинает хуже работать — отклоняются запросы пользователя, замедляется работа или вызываются исключения. Перед командой разработчиков возникают два вопроса:
- Почему во время тестирования такое поведение не наблюдалось?
- Как это исправить?
Ответ на первый вопрос достаточно прост. В тестовой среде очень сложно сымитировать реальных пользователей, шаблоны их поведения и объемы работы, которую они могут выполнять. Наблюдение за системой в рабочей среде — это единственный способ понять ее поведение под нагрузкой. Мы не предлагаем пропускать тестирование производительности. Это важный этап для получения базовых показателей производительности. Однако вы должны быть готовы к появлению проблем с производительностью в действующей системе. Вам также необходимо знать, как их устранить.
Ответ на второй вопрос (Как решить проблему?) не так прост. Любое количество факторов может способствовать возникновению проблемы, а иногда она проявляется только при определенных обстоятельствах. Инструментирование и ведение журнала являются ключом для поиска первопричины, но вам также необходимо знать, что именно вы ищете.
Исходя из отзывов наших клиентов Microsoft Azure, мы определили наиболее распространенные проблемы с производительностью в рабочей среде, а также описали причины возникновения, признаки и способы устранения проблемы для каждого антишаблона. Мы предоставили образец кода, демонстрирующий антишаблон и предлагаемое решение масштабируемости.
Некоторые из этих антипаттернов могут показаться очевидными при чтении описаний, но они происходят чаще, чем вы могли бы думать. Иногда приложение наследует архитектуру, которая работает в локальной среде, но не выполняет масштабирование в облаке. А иногда приложение может иметь идеальную архитектуру, но по мере добавления новых функций начинают появляться антишаблоны. В любом случае данное руководство поможет вам определить и устранить эти антишаблоны.
Каталог антишаблонов
Ниже приведен список антипаттернов, которые мы определили:
Антишаблон | Description |
---|---|
Занятость базы данных | Разгрузка слишком большого объема обработки в хранилище данных. |
Занятость внешнего интерфейса | Перемещение ресурсоемких задач в фоновые потоки. |
Отправка множественных операций ввода-вывода | Постоянная отправка большого количества небольших сетевых запросов. |
Лишняя выборка | Получение большего объема данных, чем требуется. Это приводит к ненужным операциям ввода-вывода. |
Неправильное создание экземпляров | Многократное создание и удаление объектов, которые предназначены для общего доступа и повторного использования. |
Монолитная сохраняемость | Использование одного хранилища для данных с совершенно разными шаблонами потребления. |
Без кэширования | Нет возможности выполнить кэширование данных. |
Шумный сосед | Один арендатор использует несоразмерный объем ресурсов. |
Шквал повторных попыток | Слишком частая отправка сбойных запросов к серверу. |
Синхронный ввод-вывод | Блокировка вызывающего потока до завершения операций ввода-вывода. |
Следующие шаги
Дополнительные сведения см. в статье о настройке производительности распределенного приложения.