Как оценить оборудование, необходимое для поддержки X количества пользователей / транзакций? - PullRequest
6 голосов
/ 16 июня 2009

Мне интересно, как все подходят к вопросу следующего характера:

'нам нужно создать Приложение A (например, сайт электронной коммерции). Он будет использовать технологию B (например, Java). Он должен поддерживать C (например, 200) число одновременных пользователей. Какое оборудование нам нужно? '

Спецификация оборудования будет включать количество требуемого ЦП и, возможно, объем памяти для базового ответа.

Чтобы упростить мой пример, я остановлюсь на технологии Java в своем вопросе, но мне бы очень хотелось получить технологически нейтральный совет.

Я понимаю, что такой вопрос связан со многими дополнительными факторами. Например, другая структура (архитектура Wicket vs Struts vs Spring против pure EJB J2EE), количество распределенных уровней (одна настройка блока или 3 уровня настройки).

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

Я думал о решении проблемы требуемой памяти, оценивая объем памяти, который может занять каждый пользовательский сеанс, но определенно будут накладные расходы фреймворка / виртуальной машины.

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

Надеюсь, что сообщество сможет посоветовать хорошие подходы к этому.

Спасибо.

Ответы [ 5 ]

3 голосов
/ 16 июня 2009

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

  • Каждый пользователь просматривает новую страницу или ресурс каждые 5 секунд (при условии AJAXy)
  • Каждый запрос обрабатывается в среднем 200 мс.
  • Обычно хорошо иметь среднее использование, которое составляет 25% емкости, чтобы учесть пики, и даже больше для сайтов социальных сетей, где пики могут быть больше.

Тогда вы скажете:

200 пользователей (200 мс / 5 с) => средняя потребность в 8 процессорах * 4 (при нагрузке 25%) => 32 процессора.

Я не думаю, что это особенно ориентировано на язык. Памяти не дорого, хватит.

1 голос
/ 16 июня 2009

Честно говоря, я не видел ни одного хорошего способа получить разумную оценку, кроме как выполнить нагрузочный тест образца. В приложении просто слишком много переменных любого заметного размера: аппаратное обеспечение (архитектура памяти, количество процессоров, архитектура диска), программное обеспечение (подробности реализации, операционная система, виртуальная машина [если есть], система баз данных и т. Д. И т. Д.), Окружающая среда (сеть, охлаждение) и др.

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

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

1 голос
/ 16 июня 2009

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

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

Надеюсь, вы научитесь этому и в следующий раз сделаете более точную оценку.

0 голосов
/ 16 июня 2009

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

0 голосов
/ 16 июня 2009

Вы спрашиваете, как количественно оценить ваши требования к оборудованию.

Я, однако, подхожу к этому с другой точки зрения. Разработайте свое приложение так, чтобы оно могло масштабироваться (для любых уровней). Оттуда разверните итерацию # 1 вашего оборудования. Запустите публичную бета-версию. Соберите несколько реальных чисел. И перенастроить систему, чтобы она соответствовала метрике с более высокой производительностью. Повторите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...