Поделиться через


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

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

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

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

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

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

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

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

Каталог антипаттернов

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

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

Дальнейшие действия

Дополнительные сведения о настройке производительности см. в разделе " Эффективность производительности" в хорошо спроектированной платформе