Можете ли вы оценить производительность приложения перед тестированием?

StackOverflow https://stackoverflow.com/questions/290518

Вопрос

На днях мне задали сложный вопрос...Мы работаем над довольно сложным приложением для телефонии (SIP) со смешанным кодом C++ и PHP, базами данных MySQL и несколькими компонентами с открытым исходным кодом.

Инженер связи попросил нас оценить производительность приложения (которое еще не готово).Он сказал: «Ну, вы знаете, сколько пакетов может проходить через ядро ​​Linux в секунду, плюс вы, возможно, знаете, насколько быстро ваше приложение, поэтому скажите мне, сколько вызовов будет проходить через ваши данные в секунду».

Мне это кажется ерундой, поскольку существует миллион сценариев, которые могут произойти (ну, буквально...)

Однако...Есть ли способ оценить производительность приложения (зная оборудование, на котором оно будет работать, возможность запускать на нем стандартные тесты и т. д.) перед фактическим тестированием?

Это было полезно?

Решение

Вы, конечно, можете ограничить проблему верхними пределами (максимальной пропускной способности).В этом нет ничего глупого.На самом деле, незнание этого указывает на довольно бессистемный подход к проблеме, особенно в мире телефонии.

Вы можете решить эту проблему самостоятельно: какова минимальная «работа», которую вам необходимо выполнить для транзакции или любой другой единицы задачи, которая есть в вашем приложении?

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

РЕДАКТИРОВАТЬ

Чтобы выполнить это упражнение, вам необходимо знать все шаги, которые ваше приложение выполняет для каждого варианта использования.Затем вы можете определить максимальную пропускную способность для каждого варианта использования.Вы обязательно должны знать это перед выпуском и запуском в эксплуатацию.

Я игнорирую анализ наихудшего случая, поскольку, как вы заметили, это немного сложнее.

Другие советы

Видеть Планирование мощности для веб-производительности:Метрики, модели и методы.Есть также несколько инструментов, которые могут выполнять такого рода симуляцию дискретных событий:

Это непросто, и коммерческие инструменты будут стоить вам денег.К книге «Планирование мощности» прилагается компакт-диск с множеством шаблонов книг Excel и примерами моделей, которые помогут вам начать работу.

Удачи :)

Если вам действительно нужно ответить на этот вопрос, вы могли бы сказать что-то вроде этого:

«Я не знаю, что происходит в моей голове.Я хочу оценить это для вас, но это займет время.Очевидно, точность моего ответа зависит от того, сколько усилий (т.е.время) я вложил в расчет своей оценки.Сколько времени мне следует потратить на расчет оценки?»

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

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

Помнить: прототипы широкие, шипы глубокие.

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

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

Регулярно измеряйте производительность вашей системы во время разработки для этих важных случаев использования.Если необходимо, смоделируйте компоненты/другие системы.Проанализируйте результаты.Как они соотносятся с вашей оценкой.Возможно, компоненты привязаны к памяти/базе данных/сети.Возможно, вам нужно больше памяти;меньший доступ к базе данных;более простые запросы;кэширование.Вам не обязательно вносить эти изменения сразу.Однако вы знаете, как работает ваша система и что вам нужно делать.

Результат: Меньше неприятных сюрпризов при тестировании системы.Меньше паники, когда приближается дата релиза.

Вы, безусловно, можете заранее спланировать мощность, но качество оценки будет зависеть от качества доступных данных.

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

  1. Учитывая требования к производительности и мощности (т.е.аппаратное обеспечение) вы можете рассчитать рабочую нагрузку, с которой можете справиться.

  2. Учитывая требования к производительности и рабочую нагрузку, вы можете рассчитать емкость (т.оборудование), которое вам нужно.

  3. Учитывая рабочую нагрузку и мощность, вы можете спрогнозировать ожидаемую производительность.

Это верно в некоторых областях, но если вы не являетесь экспертом в этой области, вы не имеете ни малейшего представления.Например, я пишу код для управления промышленными роботами.Скорость ограничивается движением робота, а не скоростью выполнения кода.Зная, насколько быстр робот и какое расстояние ему нужно пройти, мы можем довольно точно оценить «скорость».Я понятия не имею, как оценить время для вашего приложения.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top