Балансировщик нагрузки обычно использует облегченный HTTP-сервер на основе событий (например, NginX), который поддерживает соединение с внутренним сервером для каждого входящего запроса.
Популярная установка:
NginX
| \
| \
Apache Apache ...
Поскольку NginX может обрабатывать гораздо больше соединений и имеет довольно предсказуемый шаблон использования памяти, его обычно можно использовать в качестве интерфейса для нескольких внутренних серверов Apache (работающих на PHP, Python, Ruby и т. Д.).
Замените Apache на Tomcat / Jetty / вставьте сюда ваш любимый контейнер сервлетов и примените ту же логику.
Суть в том, что ваши внутренние серверы обычно делают что-то гораздо более длительное (запуск некоторого языка сценариев, запросы к БД и т. Д.), Что более чем вероятно, что каждый внутренний сервер не является узким местом своего HTTP-сервера компонент, а не логика приложения.
Не существует единого размера, который бы подходил для решения подобных проблем. Другое решение (среди многих), когда вы перерастаете емкость одного компьютера с балансировщиком нагрузки, заключается в использовании циклического перебора DNS между несколькими балансировщиками, поддерживающими несколько внутренних серверов.