2010-11-14 3 views
0

У меня есть веб-сервис, работающий на 3 серверах. Woreking выглядит следующим образом: -Server 1 получает запросы пользователя, хранящие его на локальном db, и выполняет некоторую работу над ним. -Сервер 2 и 3 идентичны и основные рабочие лошади, они по запросу запрашивают информацию из Интернета и возвращают ее. -Server 1 вызывает сервер 2/3 через HTTP-запрос через lan. (На сервере есть php-скрипт 2 & 3, поэтому сервер 1 называет его http://localip/script.php) -Server 1 alternatevely вызывает сервер 2 или 3 (это делается для распространения load) Каждый запрос на сервере 2/3 занимает приблизительно 8 секунд для обработки. Теперь, когда я установил средство мониторинга на всех серверах, он обнаружил, что сервер1 имеет слишком большую нагрузку (он показал число процессов> критический предел) Разве это не способ сбалансировать нагрузку? Как уменьшить нагрузку на Server1?балансировка нагрузки по серверам

ответ

1

Сервер 1 отвечает на входящие запросы от ваших пользователей. Поэтому, если вы определили, что это узкое место, вам нужно сосредоточить свое внимание там.

Если сервер 2 и 3 выполняют запросы только в Интернете, они, вероятно, не слишком много обрабатывают процессор/диск.

Если у вас есть 2 сервера, настроенных на выполнение достаточно простой задачи, и ваш основной сервер, ориентированный на пользователя, перегружается, лучше просто запустить все 3 сервера с обращением к пользователю.

Из того, что вы описали, это похоже на то, что сервер № 1 блокирует ответ от серверов 2 & 3, что означает, что он должен удерживать многие потенциальные соединения. Если серверы 2 & 3 на самом деле не так много работают, потому что их задача - это просто интернет-запросы, которые, вероятно, лучше обслуживать путем слияния серверов, ориентированных на пользователя, и механизма запросов на один сервер и распределения нагрузки пользователя на все 3 сервера ,

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

Только некоторые мысли для вас. Невозможно быть полностью окончательным, не зная больше о вашем приложении.

Дополнительных комментарии

Как уже упоминался в комментариях, вы должны смотреть в правильную балансировку нагрузки, хорошая балансировка нагрузки оборудования является первой рекомендацией. Где вы работаете на своих серверах? Если они находятся в облачном центре обработки данных, таком как Amazon EC2, Rackspace и т. Д., То услуги балансировки нагрузки легко доступны для вас.

Вы также можете использовать балансировщик программного обеспечения. Apache предоставляет эту функциональность даже:

http://httpd.apache.org/docs/current/mod/mod_proxy_balancer.html

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

+0

серверы 2 и 3 извлекают информацию из Интернета и возвращают ее серверу 1, что означает сервер 2 и 3 блокирующий сервер 1, а не другой путь – ajreal

+0

@ajreal это мобильная служба на самом деле и когда пользователь отправляет смс на номер он попадает на наш ip ie Server 1. Я не могу установить каждый sms, чтобы набрать другой ip. Поэтому мне нужно как-то разделить нагрузку с сервера1 –

+0

@Ashwin - наверняка у вас может быть много оборудования для балансировки нагрузки, доступного на рынке, вам просто нужно настроить виртуальный IP-адрес на публичный IP-адрес, и когда ваше оборудование балансировки нагрузки получит запрос, он может следовать запросу на сервер 1 до N – ajreal

Смежные вопросы