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