Назад | Перейти на главную страницу

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

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

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

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

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

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