Облачная платформа Amazon Web Balancer (AWS) развивает предлагаемые сервисы. И теперь на ее серверах функционируют балансировщики нагрузки второго поколения ALB и NLB (Application Load Balancer и Network Load Balancer). Подобные системы применяют многие облачные провайдеры, например timeweb.cloud, обеспечивая рост отказоустойчивости, удобство масштабирования облаков и простоту управления нагрузкой на удаленные мощности.
Независимо от алгоритма работы, суть применения балансировщиков сводится к внедрению в цепь соединения с кластером серверов промежуточного звена. На него возлагается задача фильтрации входящего трафика по заданным критериям, которые и определяют, куда направить запросы (один из бэкэнд-серверов). Такой подход и определяет гибкость облачной IT-инфраструктуры в сравнении с использованием оборудования напрямую.
Системы категории Load Balancing дают 2 основных преимущества:
По схожей схеме работают балансировщики нагрузки провайдера Timeweb Cloud. Все запросы клиентов проходят через этот своеобразный фильтр и перенаправляются на ближайшие свободные хосты, способные решить задачи незамедлительно. Пользователь получает минимальное время отклика от облачного сервиса, а провайдер избегает перегрузок и рекламаций относительно плохого качества услуг. Компания AWS стремится к тем же преимуществам.
Первое поколение балансировщиков Amazon Web Services остается активным в сети EC2 Classic. Отчасти из-за этого они получили название Classic Load Balancer. Более современные используются в остальной инфраструктуре поставщика облачных услуг. Решение ALB относят к 7-му уровню, а NLB – к 4-му. Такое разделение указывает на принадлежность к разным сетевым моделям OSI и отличающемуся принципу функционирования.
Подробное объяснение различий свободно займет полновесную книгу, поэтому в рамках этой статьи будет дано лишь краткое описание различий моделей OSI. Они касаются типа операций, которые осуществляются между приложениями на локальной рабочем месте и удаленном сервере, между отдельными хостами с активными виртуальными машинами. Но есть и общие моменты, дающие довольно четкое представление о сетевом общении.
Соединение между клиентом и сервером происходит так:
Все балансировщики, включая и AWS Load Balancer, принимают данные напрямую с физического уровня. Сервис 7-го уровня преобразует пакеты до прикладного уровня согласно модели сети OSI. И уже на этом шаге определяет, куда перенаправить его для обработки. Затем по логике подключается балансировщик 4-го уровня, которому требуется преобразовать пакеты данных до транспортного уровня, и только после этого появляется возможность принимать дальнейшие решения.
Применение балансировщиков обусловлено их техническими различиями. Их придется учитывать при проектировании и разработке приложений и интегрировать поддержку конкретного решения, возможности которого соответствуют задачам. Рассмотрим различия на примере обработки запросов, зашифрованных по технологии SSL/TLS, передачи данных без сквозного шифрования.
Применяется несколько методик реализации общения между клиентом и веб-сервером, хотя во всех случаях используются одни и те же протоколы SSL/TLS. Например, при использовании ALB, балансировщика нагрузки 7-го уровня, пользователь получает снижение нагрузки на серверные ресурсы. Потому что часть работы по шифрации и дешифрации сетевого трафика ложится на блок Application Load Balancer.
Серверу остается обработать «готовый материал» и отправить ответ в открытом виде, который будет зашифрован опять-таки за счет ресурсов балансировщика. Но такой подход не всегда хорош. Например, если регламент безопасности требует передачи данных строго в зашифрованном виде, система будет дешифровать их дважды, на уровне ALB и на самом сервере. Обратный процесс тоже «задвоится», а это приведет к росту латентности, рисков утечки информации.
В таком случае выгоднее использовать NLB, работающий на уровне транспорта без дешифрации поступающих пакетов. Такой подход ускоряет передачу данных клиента серверу и обратно, но при необходимости криптографической защиты увеличивает нагрузку на удаленный хост, зато целиком и полностью обеспечивает канал связи по-настоящему сквозным шифрованием.
При работе без сквозного шифрования чаще обращаются к двум функциям балансировщика ALB – «маршрутизации на основе хоста» (Host-Based Routing) и «маршрутизации на основе пути» (Path-Based Routing). Их применение позволяет организовать сравнение запросов с настроенными шаблонами и распределение согласно соответствию. Такой прием широко используют, когда один облачный ресурс подключен по API к нескольким распределенным архитектурам.
Балансировщик ALB больше заточен под веб-ресурсы, работающие по протоколу HTTP. Поэтому любые приложения, рассчитанные на применение собственных стандартов взаимодействия по сети, с ним несовместимы. Он просто не увидит передаваемые пакеты, отличные от HTTP. Поможет в ситуации NLB, способный транслировать данные в обе стороны «как есть». Он не трансформирует запросы и ответы, поэтому и считается более универсальным решением.