Как выбрать сервер для web приложения - (не)Уникальный опыт

Как выбрать сервер для web приложения


Привет. Можешь помочь с требованиям к прод серверу ? Какой мощности нам хватит?

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

Сразу стоит сказать, что задача с такими входными данными не имеет правильного решения в принципе. Лучшее что тут можно сделать это погадать на частоте моргания светодиодов роутера и выдать что-то вроде:

CPU: 2.6GHz 4 cores; RAM: 8Gb; HDD: 50Gb

Но подойдет ли эта конфигурация под ваше конкретное приложение? Тут все зависит от ряда параметров:

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

Несмотря на это, все же можно привести ряд общих рекомендаций, которые могут быть хорошей отправной точкой для таких расчетов. При этом всегда стоит понимать, что железо бывает разное. Ваш личный “блейд” стоящий в соседней серверной где вы имеете 100% времени CPU и дохлый shared хостинг за 139р./мес это совершенно разные вещи (ваш К.О.) и это тоже добавляет неизвестных в наше уравнение. Но вернемся к рекомендациям.

  1. Взять список компонентов с которыми потенциально будет работать приложение и поискать конкретные рекомендации по железу для этих компонентов. Например в качестве базы данных планируется использовать PostgreSQL. В этом случае гуглим наиболее свежие данные и бенчмарки по железу для этой СУБД. После этого упражнения нужно выявить самый прожорливый компонент и взять его требования к железу в качестве опорной точки. И уже к этой опорной точке “докидывать” мощности ориентируясь на требования других компонентов.
  2. Руководствуясь собственным опытом написания приложений на том или ином фреймворке можно прикинуть конфигурацию железа для нового проекта. Цепочка рассуждений может выглядеть так: на прошлом проекте мы использовали Django + PostgreSQL + Redis + Gunicorn + RabbitMQ и выдерживали 4000 RPS. При этом конфигурация железа у нас была такая-то. После этого можно провести экстраполяцию на текущий проект. Если произвести расчет нужно для неизвестного фреймворка, то тут опять придется гуглить свежие бенчмарки для этого фреймворка или искать информацию на сайте производителя.
  3. Если вам повезло и приложение уже написано, но еще не опубликовано, то можно написать нагрузочный тест и в реальном времени посмотреть сколько ресурсов оно будет жрать под нагрузкой. Это позволит более-менее не промахнуться с выбором серверных мощностей.
  4. Если ожидается интенсивная работа с большими массивами данных на запись/чтение, то лучше отдать предпочтение SSD.

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


Смотрите также