Назад | Перейти на главную страницу

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

ЗДРАВСТВУЙ

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

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

Я заказал еще один сервер Dual Xeon 4GB RAM.

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

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

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

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

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

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

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

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

IO

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

Мониторинг приложений Rails

Среднее время db 0.00 сек
Средняя длина запроса 10,10 сек.
Среднее время просмотра 9,81 сек.
Запросы 13,93 рэк / мин
Медленные запросы 7,47 запросов / мин
Процент медленных запросов 54%

Загрузка Apache

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

Очередь Exim (exim -bpc)

10475