Как измеряется масштабируемость программного обеспечения?

21

Меня попросили сделать небольшую техническую презентацию о масштабируемости конкретного приложения. Приложение разработано с использованием Java, Spring MVC, Hibernate. У меня есть доступ к исходному коду приложения.

Как я могу измерить масштабируемость программного обеспечения (используя источники) и какие метрики мне нужно учитывать при измерении масштабируемости программного обеспечения?

Artjom
источник

Ответы:

8

Я бы начал с чтения статьи на эту тему в Википедии .

Короче говоря, масштабируемость - это то, как производительность системы растет с добавлением большего количества ресурсов или, наоборот, как использование ресурсов растет с увеличением нагрузки . Например, сколько одновременных пользователей может обрабатывать ваш сайт, пока время отклика не превысит 0,3 с? Тот же вопрос после того, как вы удвоите доступную оперативную память / диск / процессор / и т.д. Вы, вероятно, можете использовать свои знания внутренних компонентов приложения, чтобы решить, какие параметры стоит проверить.

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

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

Если вы измеряете все приложение, вам обычно не нужен доступ к исходному коду. Тем не менее, вам может быть интересно измерить какую-то конкретную часть кода (например, только DB или UI). Затем вы можете использовать исходный код, чтобы выставить только этот модуль для измерений и запустить свои тесты. Это называется микробенчмарк .

Если вы ищете примеры, их много в научных статьях. Поиск в Google ученый для оценки эффективности + ваши предпочтительные условия.

Илья К.
источник
1

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

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

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

Стивен С
источник