Балансировщик нагрузки приложений AWS и балансировщик нагрузки сети
Я пытаюсь понять, каковы основные различия между ALB (Application Load Balancer) и NLB (Network Load Balancer). Я понимаю, что ALB находится на уровне 7 в модели OSI - это означает, что он существует на уровне приложений - и NLB находится на уровне 4, что означает, что он работает на транспортном уровне.
При этом это означает, что ALB может обрабатывать только запросы HTTP/HTTPS, в отличие от NLB, который может обрабатывать любые типы запросов TCP.
Итак, мой вопрос... это все? Или есть другие отличия?
1 ответ
Балансировка сетевой нагрузки - это распределение трафика на основе сетевых переменных, таких как IP-адрес и порты назначения. Это уровень 4 (TCP) и ниже, и он не предназначен для учета чего-либо на уровне приложения, такого как тип содержимого, данные cookie, пользовательские заголовки, местоположение пользователя или поведение приложения. Он не зависит от контекста и заботится только об информации сетевого уровня, содержащейся в пакетах, которые он направляет так или иначе.
Балансировка нагрузки приложений - это распределение запросов на основе нескольких переменных от сетевого уровня до прикладного уровня. Он учитывает контекст и может направлять запросы на основе любой отдельной переменной так же легко, как и комбинацию переменных. Приложения сбалансированы по нагрузке в зависимости от их специфического поведения, а не только от информации сервера (операционной системы или уровня виртуализации).
Разница между ними важна, поскольку балансировка сетевой нагрузки не может обеспечить доступность приложения. Это связано с тем, что он принимает решения исключительно на основе переменных сети и уровня TCP и вообще не знает о приложении. Обычно балансировщик сетевой нагрузки определяет "доступность" на основе способности сервера отвечать на эхо-запрос ICMP или правильно выполнить трехстороннее квитирование TCP. Балансировщик нагрузки приложения идет гораздо глубже и способен определять доступность на основе не только успешного HTTP GET конкретной страницы, но также и проверки того, что содержимое соответствует ожиданиям на основе входных параметров.
Это также важно отметить при рассмотрении вопроса о развертывании нескольких приложений на одном хосте с общими IP-адресами (виртуальные хосты на старом языке skool говорят). Балансировщик сетевой нагрузки не будет различать приложение A и приложение B при проверке доступности (на самом деле он не может, если порты не различаются), но балансировщик нагрузки приложения будет различать эти два приложения, анализируя доступные ему данные уровня приложения. Это различие означает, что балансировщик сетевой нагрузки может в конечном итоге отправлять запросы в приложение, которое аварийно завершило работу или находится в автономном режиме, но балансировщик нагрузки приложения никогда не совершит такую же ошибку.
Ссылка:
Балансировка сетевой нагрузки и балансировка нагрузки приложений