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