Многоцелевой узел полезен для масштабирования?

У меня есть веб-приложение с разными уровнями:

  • база данных для постоянства
  • пара веб-серверов (шавки)
  • балансировщик нагрузки

Теперь все работает на одном хосте. Но как я могу добавить другой сервер для обработки более высокой нагрузки?

Должен ли я разделить роли (DB и Web), прежде чем масштабировать дальше?

PS давайте упростим вопрос и проигнорируем проблемы высокой доступности в этом вопросе.

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

3 ответа

Решение

@gotts: канонический способ масштабирования небольших сайтов выглядит примерно так:

Во-первых: разделение на 2 сервера, один из которых запускает ваш HTTP-сервер и код веб-приложения (webapp), а другой - для вашей базы данных. Сервер базы данных должен быть оптимизирован для рабочих нагрузок базы данных, т. Е. Большого количества оперативной памяти, быстрого дискового ввода-вывода, быстрого процессора.

Затем: выгрузите статический файл, обслуживающий сервер веб-приложений, либо на другой сервер, либо в сеть доставки контента. Рассмотрите возможность отключения HTTP KeepAlive на сервере веб-приложений.

Затем: перейдите к настройке как минимум с 4 серверами:

  • Один балансировщик нагрузки HTTP спереди, использующий согласованное хеширование на основе исходного IP-адреса.
  • За балансировщиком нагрузки HTTP находятся 2 сервера веб-приложений.
  • За веб-приложениями 1 сервер баз данных.

Эта презентация Брэда Фицпатрика показывает типичную прогрессию на первых страницах. Если все это ново для вас, возможно, вам следует подумать о найме сисадмина, который делал это раньше...:-)

Теперь все работает на одном хосте

Глупая идея или? Я имею в виду - какого чёрта делает LOAD BALANCER в списке, если есть только один хост для начала? Это тот пункт, который не имеет для меня никакого смысла.

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

  • Затем перепрограммируйте так, чтобы несколько веб-серверов могли легко сосуществовать.

  • Наконец добавьте балансировщик нагрузки, если это необходимо, или используйте циклический перебор DNS.

В целях безопасности и производительности я бы склонен перенести обработку входящего http на уровень представления (1 или более серверов). Статический контент может обслуживаться на уровне представления. Также ваша база данных / бизнес-логика менее подвержена атакам.

Другие вопросы по тегам