Требование к серверу для запуска приложения с огромным сетевым трафиком
То, что я спрашиваю, является очень распространенным вопросом, который приходит в голову любому разработчику, когда он / она хочет разместить сервер, но точный ответ не всегда доступен. Мне нужно разместить сервер, который возвращает HTTP-ответ 20 КБ. Ожидается, что этот сервер будет получать десять миллионов запросов в день, максимум 10 тысяч запросов в минуту. Какую емкость сервера (ОЗУ, пропускную способность и т. Д.) Я должен иметь? Давайте безопасно проигнорируем другие факторы, такие как хранилище, емкость базы данных, например, SQL и т. Д. Основная задача этого вопроса - оценить аппаратное обеспечение с точки зрения пропускной способности и ОЗУ (или другого оборудования), которое может обрабатывать столько одновременных соединений.
Было бы очень полезно не только мне, но и всем, кто интересуется, если человек, отвечающий на этот вопрос, предоставит объяснение факторов, которые, как считалось, пришли к ответу. Формула, управляющая этими факторами, поможет любому изменить требования в моем первоначальном вопросе и прийти к необходимому ответу.
3 ответа
Zoredache прав: вам нужно провести тестирование в реальных условиях с вашим приложением для точного планирования емкости. Но с этим сказал...
Если вы ожидаете получать десять миллионов запросов в день, а каждый запрос равен 20 КБ, это составляет около 190 ГБ в день или 5912 ГБ в месяц. Чтобы получить приблизительное представление о затратах на пропускную способность, Amazon взимает 0,12 долл. США / ГБ за свою услугу S3, поэтому вы смотрите на 709,44 долл. США в месяц только на пропускную способность.
Предполагаемая пиковая нагрузка составляет 10 000 запросов в минуту или 167 запросов в секунду. При 20 КБ каждый это 3,26 МБ / с данных, или около 26 МБ / с, как обычно измеряется пропускная способность.
Если вы обслуживаете небольшие статические файлы, любой современный сервер должен справиться с этой нагрузкой. Если вы выполняете много вычислений для получения этих 20 КБ выходных данных, это может легко сломать даже самые мощные серверы. Не зная больше о вашем приложении, невозможно определить, является ли пропускная способность ограничивающим фактором.
Удачи!
Там нет формулы. Лучший способ - попытаться получить некоторое тестовое оборудование и настроить среду, аналогичную производственной среде и тестированию.
Ну, точной формулы нет, но на основании предоставленных вами цифр можно оценить некоторые необходимые спецификации.
10.000 запросов в секунду
20 КБ за запрос
равно 200.000KB в секунду
Таким образом, игнорируя хранилище и пропускную способность ввода-вывода, вы по крайней мере насытили бы две ссылки 1GE.
Не зная характера ответов, я не могу дать какую-либо оценку потребностей хранения или оперативной памяти
Таким образом, вам нужно будет предоставить больше информации
Сможете ли вы кэшировать контент?
Вы используете PHP, ASP или подобное?
Если вы обслуживаете статический контент, вы можете просто использовать два сервера с огромным количеством оперативной памяти и 1GE Nic на каждом, поставив перед собой 2 балансировщика нагрузки.
Этого должно быть достаточно.
Если вы работаете с динамическим контентом, эта задача становится совершенно другой игрой.