балансировка нагрузки между серверами - PullRequest
0 голосов
/ 14 ноября 2010

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

1 Ответ

1 голос
/ 14 ноября 2010

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

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

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

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

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

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

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

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

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

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

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

...