Как работает типичный балансировщик нагрузки http(s)?

Я знаю, что в некоторых ситуациях мы сталкиваемся с большой нагрузкой http(s) на сервере, и мы должны использовать балансировщик нагрузки для распределения нагрузки между несколькими внутренними серверами.
Но у меня тут путаница! Предположим, что слишком много пользователей (скажем, 100000) пытаются одновременно получить доступ к example.com:80 и балансировщик нагрузки (например, Apache mod_proxy_balancer или любой другой автономный балансировщик нагрузки) хочет распределить эту нагрузку между несколькими внутренними серверами, но все же весь трафик должен проходить через интерфейсный сервер, что приводит к интенсивному трафику на этом сервере и даже при том, что все запросы разбираются на внутренних серверах, интерфейсный сервер все еще должен управлять ими (предположим, что в лучшем случае он должен создавать один уникальный поток для каждого запроса, который вызывает просто сбой этого сервера после создания 100000 потоков в данный момент!).
Теперь мой вопрос (это может звучать смешно для эксперта!) Заключается в том, как балансировщик нагрузки может справиться с такой ситуацией? Другими словами, как интерфейсный сервер может устанавливать связь напрямую между клиентами и внутренними серверами без необходимости выдерживать такую ​​большую нагрузку на сеть? (Я знаю, что в этой ситуации мы не можем назвать фоновые серверы действительно "back-end"! Но предположим, что пока все в порядке) Нужен ли какой-либо сценарий изменения для конкретного приложения? (например, чтобы просто перенаправить клиентов с http Location заголовок на другие серверы)

1 ответ

Это зависит от назначения балансировщика нагрузки, т. Е. От типа рабочей нагрузки, которую предполагается сбалансировать. Балансировщики нагрузки HTTP(S) на основе обратного прокси-сервера распределяют нагрузку между серверными приложениями, генерирующими контент.

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

Например, доступ к базе данных также может быть сбалансирован по нагрузке. Большинство запросов к базе данных включает только чтение из базы данных, поэтому, хотя записи должны быть немедленно реплицированы на все серверы базы данных, чтения могут распределяться равномерно.

Балансировка сетевой нагрузки - это другая область. Например, одним из распространенных методов балансировки (сетевой) нагрузки между серверами кластера являются циклические DNS-записи, где одно имя хоста просто имеет более одного A записей.

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