Как я могу распределить 1 приложение между 2 серверами

ПРИВЕТ

У меня есть приложение Email Marketing Rails, работающее на сервере CentOS QuadCore 16GB RAM. Но в настоящее время наш веб-сервер занимает слишком много времени, чтобы отвечать на запросы в часы пик (Mongrel Cluster + Apache). Мы контролируем это с помощью ScoutApp ( www.scoutapp.com).

Максимальное время (3 секунды) для предупреждений разведчика превышено на 668 запросах Максимальное время (3 секунды) превышено для 120 запросов

Я заключил контракт с другим сервером Dual Xeon 4GB RAM .

Как лучше всего распределить это приложение между двумя серверами? Я думаю об использовании SERVER-1 (16 ГБ ОЗУ) с Mysql и Exim и перенести приложение на SERVER-2 (4 ГБ ОЗУ) и использовать его только в качестве WEB-сервера (кластер Mongrel + Apache).

Кто-нибудь может предложить мне лучшую настройку, советы или идеи?

3 ответа

Решение

... вы должны сузить сферу темы до "рельсов" в частности. (предмет немного вводит в заблуждение) Я настоятельно рекомендую посмотреть журналы и попытаться определить, откуда исходит отставание.

Существует несколько причин, по которым приложение Rails будет работать медленно... и в большинстве случаев оно не имеет ничего общего с базой данных или самим веб-сервером. Я хотел бы убедиться, что кэширование НЕ отключено. (в режиме разработки кэширование по умолчанию отключено) Rails получает значительное повышение производительности благодаря множеству алгоритмов кэширования, которые он имеет... Кроме того, некоторые из отладочных битов, которые включены в разработку, также снижают производительность.

Если все будет сделано, то это можно сделать... есть несколько шагов в направлении к "кластерной среде рельсов". Отладка, которую я предложил ранее, также может сказать вам, что вам нужно для расширения. Если вы постоянно ждете ответа от базы данных... тогда все, что вам нужно, - это перенести сервер базы данных из этого блока на свой собственный... или кластеризовать базу данных в одиночку. Если вы обнаружите, что сервер www отстает... увеличьте масштаб на веб-сервере.

Разделение хостинга web/http и хостинга баз данных на отдельные серверы - это хороший первый шаг. Хороший второй шаг - получить дубликат веб-сервера и настроить его на первый с некоторым типом балансировки нагрузки. Либо оборудование, которое находится перед обоими серверами, либо программное обеспечение.

редактировать: это предполагает, что вы уверены, что база данных не является вашим ограничивающим фактором (что вполне может быть). Перемещение веб-сервера с сервера базы данных поможет в этой ситуации, но второй веб-сервер, который я предлагаю, поможет только в том случае, если замедляется обработка каждого запроса, а не базы данных.

Проблема не в базе данных. Когда ответы начали замедляться, я проверил процессы mysql, и у mysql не было ожидающих процессов. Я думаю, что слишком много запросов достигает веб-сервера (кластер apache + mongrel). Даже сайты, работающие на PHP, недоступны в час пик. У меня есть только ScoutApp, контролирующий мой сервер.

IO

Ожидание ввода-вывода 11,9 мс Чтение кБит / с 422,8 КБ / с Чтение / сек 61 Загрузка 82% Запись КБ / с 2 435,9 КБ / с Запись / сек 196

Rails Aplication мониторинг

Среднее время дБ 0,00 сек
Средняя продолжительность запроса 10,10 сек.
Среднее время просмотра 9.81 сек
Запросы 13,93 рэк / мин
Медленные запросы 7,47 запросов / мин.
Процент медленных запросов 54%

Apache Load

Запросов в секунду 1,80 запросов / с
Всего обращений: 19169 - Общий трафик: 461,9 МБ
Загрузка процессора: u4 с.11 cu1.31 cs0 - .0648% загрузка процессора
2,29 запросов / сек - 56,5 кБ / сек - 24,7 кБ / запрос
12 запросов в настоящее время обрабатываются, 9 свободных рабочих

Exim Queue (exim -bpc)

10475

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