У меня есть веб-приложение с разными уровнями:
Теперь все работает на одном хосте. Но как я могу добавить еще один сервер, чтобы справиться с более высокой нагрузкой?
Следует ли мне разделить роли (db и web) перед дальнейшим масштабированием?
P.S. Давайте упростим вопрос и проигнорируем в этом вопросе проблемы высокой доступности.
P.P.S. база данных сейчас не является узким местом. Я действительно хочу добавить больше веб-серверов, пожалуйста, помогите
@gotts: Канонический способ масштабирования небольших веб-сайтов выглядит примерно так:
Первый: Разделение на 2 сервера, один из которых запускает ваш HTTP-сервер и код веб-приложения (webapp), а другой - для вашей базы данных. Сервер базы данных должен быть оптимизирован для рабочих нагрузок базы данных, то есть большого количества оперативной памяти, быстрого ввода-вывода на диск, быстрого процессора.
Затем: Выгрузите статический файл, обслуживающий с сервера веб-приложений, либо на другой сервер, либо в сеть доставки контента. Рассмотрите возможность отключения HTTP KeepAlive на сервере веб-приложений.
Затем: Перейдите к установке как минимум с 4 серверами:
это презентация Брэда Фитцпатрика показывает типичную прогрессию на его первых страницах. Если все это для вас в новинку, возможно, вам стоит подумать о найме системного администратора, который делал это раньше ... :-)
В целях безопасности и производительности я бы предпочел перенести обработку входящего HTTP-трафика на уровень представления (1 или несколько серверов). Статический контент может обслуживаться на уровне представления. Кроме того, ваша база данных / бизнес-логика менее подвержена атакам.
Теперь все работает на одном хосте
Глупая идея или? Я имею в виду - что, черт возьми, делает в списке БАЛАНСИР НАГРУЗКИ, если для начала нужен только один хост? Это единственный пункт, который для меня не имеет абсолютно никакого смысла.
Сначала разделите роли. Особенно, поскольку требования сильно различаются (для более крупной БД требуется намного больше операций ввода-вывода в секунду, что означает много дисков).
Затем перепрограммируйте так, чтобы несколько веб-серверов могли легко сосуществовать.
Наконец, добавьте балансировщик нагрузки, если необходимо, или используйте циклический перебор DNS.