Что-то, что могло бы включать в себя желаемое среднее время ответа и среднюю частоту запросов в качестве фактора?
Я бы не сказал, что существует алгоритм, по крайней мере, о котором я знаю, поскольку он был бы слишком сложным.
Количество необходимых серверов варьируется и зависит от того, что делает ваш сайт, сколько трафика он получает, насколько важен ваш сайт и какая надежность вам нужна.
Небольшие сайты небольшого размера без кода на стороне сервера могут обрабатывать очень большие объемы трафика, и у вас может закончиться пропускная способность до того, как сервер будет перегружен.
Если ваш сайт очень сложный, с большим количеством обрабатываемых элементов и прочего или требует 100% времени безотказной работы, вам может понадобиться много серверов.
Джефф прав, количество переменных здесь слишком велико, чтобы это зафиксировать. Если вы запустите веб-сервис, конвертирующий видео в MP3, процессор очень быстро уйдет. Если вы запустите сайт, на котором транслируется видео или музыка, пропускная способность перегрузится. Тогда вы знаете, на каком языке вы это написали, насколько хороши были ваши кодеры ...
Конечно - и это будет разным для каждого веб-сайта и всех его компонентов: аппаратное обеспечение серверов (при условии, что все они идентичны, конечно), скорость всех сетевых ссылок (внешних и внутренних, если они перегружены БД).
Итак, для вашего кода вы можете наращивать активность от одного до множества на одном сервере с помощью чего-то вроде LoadRunner и получать график частоты запросов (одновременных пользователей) и времени ответа. Составьте уравнение из этих данных, которое соответствует линии или кривой.
Теперь добавьте второй сервер и проделайте то же самое тестирование. Посмотрите, совпадает ли уравнение. Теперь удвойте количество пользователей и посмотрите, продолжает ли график то же уравнение или другое.
Продолжайте делать это, и у вас есть свой алгоритм. Однако в какой-то момент вы перестанете добавлять веб-серверы для улучшения времени отклика. Вы обнаружили узкое место, связанное с не вашим количеством веб-серверов. Определите, что это такое, и исправьте.
Ага - теперь вы изменили еще одну переменную, кроме количества запросов. Сделайте всю свою работу заново. Также заново выполняйте всю свою работу каждый раз, когда вы меняете код, или добавляете индексы в свою БД, или улучшаете свое оборудование, или даже добавляете больше кеша в вашу SAN (например).
Также - для пользователей, имейте в виду, что существуют разные виды деятельности - подумайте об Amazon. Некоторые пользователи просто много просматривают, проводят ли много времени в обзорах или на досках сообщений, загружают ли некоторые корзины покупок, а затем оформляют заказ? Вы должны измерить тип активности пользователей в производственной системе, чтобы создать классы пользователей для использования в вашем тестировании, в соотношениях, которые, надеюсь, имитируют то, как выглядит производственная нагрузка.
Такие системы моделирования существуют, но они дорогие. Взгляни на Hyperformix и Opnet как решение вашего вопроса. Следует иметь в виду, что все модели в некоторой степени содержат предположения, и в какой-то момент в будущем вам нужно будет запустить фактический тест производительности вашей модели / предлагаемой модели, чтобы увидеть, верны ли эти предположения и что система масштабируется как предсказано. Чаще всего тест реальной производительности приводит к получению новой информации, которая используется для обновления модели, чтобы сделать ее более точным предсказателем реальной производительности приложения.