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

AWS Application Load Balancer против Network Load Balancer

Я пытаюсь понять, в чем основные различия между ALB (Application Load Balancer) и NLB (Network Load Balancer). Я понимаю, что ALB находится на уровне 7 модели OSI - это означает, что он существует на уровне приложения - а NLB находится на уровне 4, что означает, что он работает на транспортном уровне.

При этом это означает, что ALB может обрабатывать только запросы HTTP / HTTPS, в отличие от NLB, который может обрабатывать любые типы запросов TCP.

Итак, мой вопрос ... это все? Или есть еще отличия?

Балансировка сетевой нагрузки - это распределение трафика на основе сетевых переменных, таких как IP-адрес и порты назначения. Это уровень 4 (TCP) и ниже и не предназначен для учета чего-либо на уровне приложения, такого как тип контента, данные cookie, настраиваемые заголовки, местоположение пользователя или поведение приложения. Он не зависит от контекста, заботится только об информации сетевого уровня, содержащейся в пакетах, которые он направляет туда-сюда.

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

Разница между ними важна, поскольку балансировка сетевой нагрузки не может гарантировать доступность приложения. Это связано с тем, что он основывает свои решения исключительно на переменных сети и TCP-уровня и вообще не знает о приложении. Обычно подсистема балансировки сетевой нагрузки определяет «доступность» на основе способности сервера отвечать на эхо-запрос ICMP или правильно завершить трехстороннее установление связи TCP. Балансировщик нагрузки приложения идет гораздо глубже и способен определять доступность на основе не только успешного HTTP GET конкретной страницы, но и проверки того, что контент соответствует ожиданиям на основе входных параметров.

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

Ссылка:

Балансировка сетевой нагрузки и балансировка нагрузки приложений