Тестирование производительности и антишаблоны для облачных приложений

Антишаблоны производительности (как и конструктивные шаблоны) представляют собой распространенные дефектные процессы и реализации в организациях. Это распространенные подходы, которые с большой вероятностью приводят к проблемам с масштабируемостью при нагрузке на приложение. Осведомленность об этих методиках может помочь упростить взаимодействие с высокоуровневых концепций среди специалистов по программному обеспечению, а знание антипаттернов может быть полезно при проверке кода или диагностике проблем с производительностью.

Ниже приведен распространенный сценарий: приложение работает хорошо во время тестирования производительности. Затем оно помещается в рабочую среду и начинает обрабатывать реальные рабочие нагрузки. На этом этапе приложение начинает хуже работать — отклоняются запросы пользователя, замедляется работа или вызываются исключения. Перед командой разработчиков возникают два вопроса:

  • Почему во время тестирования такое поведение не наблюдалось?
  • Как это исправить?

Ответ на первый вопрос достаточно прост. В тестовой среде очень сложно сымитировать реальных пользователей, шаблоны их поведения и объемы работы, которую они могут выполнять. Наблюдение за системой в рабочей среде — это единственный способ понять ее поведение под нагрузкой. Мы не предлагаем пропускать тестирование производительности. Это важный этап для получения базовых показателей производительности. Однако вы должны быть готовы к появлению проблем с производительностью в действующей системе. Вам также необходимо знать, как их устранить.

Ответ на второй вопрос (Как решить проблему?) не так прост. Любое количество факторов может способствовать возникновению проблемы, а иногда она проявляется только при определенных обстоятельствах. Инструментирование и ведение журнала являются ключом для поиска первопричины, но вам также необходимо знать, что именно вы ищете.

Исходя из отзывов наших клиентов Microsoft Azure, мы определили наиболее распространенные проблемы с производительностью в рабочей среде, а также описали причины возникновения, признаки и способы устранения проблемы для каждого антишаблона. Мы предоставили образец кода, демонстрирующий антишаблон и предлагаемое решение масштабируемости.

Некоторые из этих антипаттернов могут показаться очевидными при чтении описаний, но они происходят чаще, чем вы могли бы думать. Иногда приложение наследует архитектуру, которая работает в локальной среде, но не выполняет масштабирование в облаке. А иногда приложение может иметь идеальную архитектуру, но по мере добавления новых функций начинают появляться антишаблоны. В любом случае данное руководство поможет вам определить и устранить эти антишаблоны.

Каталог антишаблонов

Ниже приведен список антипаттернов, которые мы определили:

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

Следующие шаги

Дополнительные сведения см. в статье о настройке производительности распределенного приложения.