Loading AI tools
Из Википедии, свободной энциклопедии
Инженерия производительности (англ. Performance Engineering) — часть системной инженерии, включающая в себя набор ролей, знаний, практик, инструментов и результатов и применяющаяся на каждом этапе Цикла разработки программного обеспечения с целью убедиться в том, что создаваемое, программируемое и поддерживаемое архитектурное решение соответствует нефункциональным требованиям к производительности этого решения.
В статье не хватает ссылок на источники (см. рекомендации по поиску). |
Этим же термином также может называться Инженерия Производительности Программного Обеспечения, однако, так как Инженерия производительности включает в себя не только программное обеспечение, предпочтительнее использовать общепринятое название.
Инженерия производительности выделилась в самостоятельную дисциплину в нескольких больших корпорациях и обычно включается в подразделении архитектуры разрабатываемых систем. Инженерия производительности может объединять людей из разных областей деятельности, но прежде всего ориентирована на людей из области информационных технологий.
Из-за того, что эта отрасль может быть применена в различных методологиях создания ПО, нижеописанные виды деятельности могут осуществляться на разных стадиях. В случае использования методологии rational unified process (RUP), порядок их следования будет следующим:
На стадии разработки концепта приложения или проекта, идентифицируются критические бизнес-процессы. Классификация важности бизнес-процесса обычно основывается на объёме дохода, снижении затрат или других свойств значимых для бизнеса.
На этом этапе идентифицируются и описываются риски высокого уровня, которым с наибольшей вероятностью подвержена система.
На последней стадии этого этапа выделяются задачи, роли и получаемые результаты для следующего этапа проработки. Задачи и выделяемые на их выполнение ресурсы вносятся в план проекта этапа проработки.
На ранней стадии этапа проработки критические бизнес-процессы декомпозируются в критические сценарии использования. В случае надобности, такие сценарии использования могут быть декомпозированы и далее, до элементарных переходов или переходов между экранами, которые становятся основой тестирования производительности движимого скриптами.
Типом требований, относящихся к Инженерии производительности, являются нефункциональные требования (или NFR). В то время, как функциональное требования определяет как должна выполняться бизнес-операция, нефункциональное требование, связанное с производительностью, определяет как быстро эта бизнес-операция должна работать под определёнными условиями.
"Определенные условия" должны быть жизненными.
Пример 1:
|
Между этими двумя требованиями существенная разница: первый не приводит каких-либо условий, второй - четко определяет условия при которых система должна функционировать и может, в отличие от первого, иметь SLA; архитекторы и планировщики ёмкости системы могут спланировать и построить систему основываясь только на втором, верном, требовании; тестировщики могут придумать надежный тест производительности только для второго, верного требования.
Нефункциональные требования не ограничиваются только сценариями использования, должны быть также указаны общие соотношения использования системы. Они описывают общую загруженность системы в течение определённого периода времени, описывая, сколько бизнес транзакций каждого типа выполняется в единицу времени. В общем случае соотношения использования системы определяют типичный бизнес-день разбитый на часы, что позволяет описать как нагрузка на систему меняется в течение дня.
Пример 2:
За целый бизнес-день совершается 1200 транзакций A, 300 транзакций B и 3300 транзакций C; причем за первый час совершается 10% транзакций A, 20% транзакций B, и 5% транзакций C; за второй - 10% транзакций A, 25% транзакций B, и 50% транзакций C, и так далее |
Подобная информация обычно представляется в виде таблицы. В случае, если взаимодействие на уровне транзакций осуществляется разными типами пользователей, этот факт также вносится в нефункциональные требования.
Соотношения использования системы, прописанные в нефункциональных требованиях используются в качестве входных данных для нагрузочного тестирования и стресс-тестирования во время тестирования производительности.
Некоторые задачи Инженерии производительности, относящиеся к тестированию производительности, включающие разработку и валидацию стратегии тестирования; разработку плана тестирования производительности; определение объёмов тестируемых данных; разработка тестовых сценариев, также выполняются на этой стадии.
Для любой системы, которая должна выдерживать значительную нагрузку, на этом этапе также определятся план по её мониторингу и разрабатывается соответствующий дизайн. Инженерия производительности рассматривает задачи, относящиеся к мониторингу системы для нагрузочного тестирования и продакшн-системы.
На этапе проработки пересматриваются риски документированные на предыдущем этапе. План по минимизации рисков определяется для каждого риска, связанного с производительностью системы. Также определяются и документируются стоимость, время и ответственность.
На последней стадии этого этапа выделяются задачи, роли и получаемые результаты для следующего этапа исполнения. Задачи и выделяемые на их выполнение ресурсы вносятся в план проекта этапа исполнения.
В самом начале этого этапа ведётся подготовка инструментарии для анализа производительности, которая включает в себя:
Группа ответственных за улучшение производительности должна иметь базовый чеклист для настройки операционной системы, сети, серверов (приложений, веб-серверов, баз данных, балансировки нагрузки и так далее). По мере того, как команда тестирования производительности собирает данные, группа ответственных за производительность настраивает систему более точно для разворачивания продакшн-системы впоследствии. Эта деятельность требует участие специалистов из соответствующих областей. Например, для тонкой настройки базы данных необходимо подключить DBA, который обладает набором знаний в данной области.
В обычном случае группа тестирования производительности проводит тесты используя не систему сконфигурированную для разработки, а конфигурацию, наиболее близкую к будущей продакшн-системе. Эта команда выполняет тестирование производительности на основе сценариев использования, для того, чтобы удостовериться в том, что критические сценарии использования системы удовлетворяют нефункциональным требованиям. Команда тестирования запускает нагрузочное тестирование, основанное на средней ожидаемой нагрузке на систему ,а также пиковой нагрузке. Также может быть выполнено и стресс-тестирование с целью выявления узких мест. Собранные и проанализированные данные предоставляются группе ответственных за улучшение производительности. В случае необходимости происходит дополнительная настройка системы для соответствия нефункциональным требованиям.
Если подход Инженерии производительности был правильно применен на каждом этапе до этого момента, то с большой вероятностью этого будет достаточно, чтобы система прошла сертификацию по производительности. Однако, если по каким-либо причинам результаты тестов не удовлетворяют требованиям, необходимо вернуть части системы разработчикам для рефакторинга. В некоторых случаях проблемы могут быть решены с помощью использования дополнительных ресурсов аппаратной части, однако такой подход быстро приводит к пониженной эффективности вычислительных мощностей.
Пример 3:
Предположим, мы можем улучшить работу 70% модуля, распараллелив её и запуская сам модуль на 4 ядрах процессора вместе 1. Если принять за α часть последовательных вычислений, тогда (1-α) составляет часть вычислений, выполняемых параллельно, и тогда максимальный прирост скорости может быть достигнут с использованием количества ядер P согласно закону Амдала:
В нашем примере мы получим:
Таким образом, увеличивая количество вычислительных ядер процессора в 4 раза приводит к увеличению производительности всего в два раза (с 1 до 2.105). И мы уже на пути к пониженной эффективности вычислительной мощности. Увеличив вычислительную мощность ещё в два раза, получится:
Таким образом вновь увеличив вычислительную мощность в 2 раза, мы получили прирост производительности на уровне 1/5 (с 2.105 до 2.581). |
В течение финального этапа система разворачивается на продакшн-конфигурации, что требует следующих подготовительных шагов:
При сопровождении системы после её запуска текущими задачами по производительности могут быть:
Во время этапа сопровождения системы Инженерия производительности фокусируется на трёх основных областях: управление уровнем услуг, управление ёмкостью и управление проблемами.
В области управления уровнем услуг Инженерия производительности сосредоточена около соглашения об уровне услуг или SLA и мониторинга соответствующих систем, который служит для определения соответствия уровня услуг, выявлению проблем и анализ динамики поведения. Например, может быть создана система мониторинга за конечными пользователями системы с целью убедиться в том что их транзакции выполняются со скоростью соответствующей нефункциональным требованиям. Время обработки транзакций записывается в базу данных таким образом, чтобы впоследствии можно было сделать выборку из этих данных и проанализировать динамику развития для использовании в управлении ёмкостью. В случае когда время обработки транзакций начинает выпадать из выделенных границ, выдаётся предупреждение о необходимости уделить ситуации внимание.
В области управления ёмкостью системы, цель Инженерии производительности - убедиться в том, что системы продолжают удовлетворять нефункциональным требованиям. Это означает сбор статистики и исторический анализ динамики поведения в объёмах, позволяющих предсказать соответствие или несоответстве требованиям в будущем. Например, если показатели системы показывают тенденцию увеличения времени выполнения транзакции (из-за увеличения объёма данных, увеличения количество одновременно работающих пользователей и т.д.), можно заключить, что в определённый момент система больше не будет удовлетворять критериям производительности, указанным в соглашении об уровне услуг. Управление ёмкостью отвечает за то, чтобы заранее добавлять системе ёмкости в таких случаях (например, дополнительные вычислительные мощности, оперативная память, индексы базы данных и т.д.), таким образом, чтобы удержать показатели производительности в необходимых рамках.
В области управления проблемами, внимание Инженерии производительности фокусируется на разрешении основной причины проблем с производительностью, включая настройку системы, смену операционной системы или параметров устройств или даже рефакторинг ПО с целью устранить проблемы с производительностью, вызванные неудачным дизайном или методами кодирования.
Любая большая система требует наличия мониторинговой подсистемы, обеспечивающей уверенность в наличии корректных статистических данных, позволяющих судить о соответствии системы нефункциональным требованиям. Планирование, инсталляция, конфигурация и контроль мониторинговой подсистемы осуществляется в рамках определённого Процесса Мониторинга, который имеет следующие преимущества:
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.