Понимание балансировщиков нагрузки L4 и L7 для эффективного управления трафиком
10 января 2024 г.Если вам необходимо обрабатывать большое количество входящих запросов, вам следует управлять входящим трафиком, распределяя нагрузку между разными серверами. Вам следует рассмотреть возможность добавления балансировщика нагрузки: это уровень абстракции, который централизованно обрабатывает запросы, доступность и безопасность.
При обработке огромного количества запросов системе обычно необходимо балансировать входящую нагрузку, чтобы избежать перегрузки одного сервера. Для этого мы обычно используем балансировщик нагрузки перед нашими приложениями для обработки всего входящего трафика.
В этой статье мы узнаем, что такое балансировщик нагрузки и какие проблемы он решает, а также углубимся в основные категории балансировки нагрузки: L7 и L4.
Что такое балансировщик нагрузки?
Балансировщик нагрузки – это часть сетевой архитектуры, которая обрабатывает входящие запросы и посредством определенного процесса перенаправляет каждый запрос на определенный узел «внутренней» архитектуры.
Это может быть как отдельное аппаратное обеспечение, так и программный компонент, уже являющийся частью сетевой архитектуры.
Несмотря на название, балансировщик нагрузки не только балансирует нагрузку; Вот некоторые из его основных функций:
- Балансировка нагрузки: конечно, есть способ определить, какой сервер будет обрабатывать конкретный запрос;
- Обнаружение служб: чтобы понять, куда перенаправлять запросы, балансировщику нагрузки необходимо отслеживать доступные ресурсы и их адреса;
- Абстракция: клиенты не будут знать реальный адрес целевых серверов; они будут знать только адрес балансировщика нагрузки;
- Проверка работоспособности: целевой сервер должен не только существовать, но и находиться в работоспособном состоянии. Неработоспособные серверы исключены из числа возможных целевых серверов.
Проверка работоспособности – одна из важнейших частей балансировщика нагрузки, а борьба с неработоспособными службами — сложная тема.
Предположим, у вас есть два сервера, Server1 и Server2, каждый из которых может обрабатывать 50 запросов в секунду. Внезапно Сервер1 становится неработоспособным, и балансировщик нагрузки удаляет его из списка доступных серверов. Те же 100 пользователей продолжают обращаться к сервису, но теперь, поскольку Сервер1 недоступен, Сервер2 должен будет обрабатывать 100 запросов в секунду. Если он не сможет справиться с этим всплеском, все приложение будет отключено, и ни один из пользователей не сможет получить доступ к системе. Таким образом, следует избегать простого перемещения всего трафика в один экземпляр и следует подумать о более сложном механизме.
В зависимости от типа балансировщика нагрузки (L4 или L7) вы также можете иметь больше функций, таких как Аутентификация и Наблюдаемость.
Модель OSI
Прежде чем перейти к уровням L4 и L7, нам нужно взглянуть на модель OSI.
Модель OSI — это определение абстракций, используемых в сети. Он состоит из семи различных уровней (от L1 до L7), каждый из которых имеет свои особые обязанности, протоколы и поведение.
- L7 — уровень приложений: является точкой входа в стек, к которой обращаются компьютеры; он работает с HTTP, FTP и т. д.;
- L6 — уровень представления: проверяет формат данных, применяет шифрование и сжатие данных; он шифрует данные при использовании SSL и проверяет форматы данных, такие как JPEG или TXT;
- L5 — сеансовый уровень: поддерживает соединение с портом назначения; работает через сетевые сокеты;
- L4 — Транспортный уровень: передает данные с использованием протокола передачи (а именно TCP и UDP), гарантируя надежность соединения и обрабатывая ошибки передачи;
- L3 – сетевой уровень: при работе с пакетами данных этот уровень определяет, по какому физическому пути будут идти данные; работает с IP и ICMP;
- L2 – уровень канала передачи данных: он определяет формат данных в сети, разделяя источник данных на более мелкие фрагменты (кадры);
- L1 – физический уровень: этот уровень передает необработанный поток битов по физической среде (например, проводу);
Когда клиент пытается получить доступ к хосту, каждый запрос проходит через все семь уровней. Балансировщик нагрузки, работающий на определенном уровне, может выполнять разные операции, поскольку он «знает» разные метаданные одного и того же соединения.
L7 Load Balancer: обрабатывайте запросы, просматривая содержимое
Балансировщик нагрузки L7 действует на уровне приложений. Поскольку балансировщик нагрузки работает на этом уровне, он может балансировать запросы на основе всей полезной нагрузки запроса.
Например, балансировщик нагрузки L7 может обрабатывать:
* Маршрутизация: поскольку он знает полный URL-адрес, он может перенаправить запрос на определенный сервер. Например, если путь — /images/avatar.png, балансировщик нагрузки может отправить запрос на сервер, выделенный для изображений; * Завершение SSL: шифрование и дешифрование требуют больших ресурсов. Вы можете освободить некоторые ресурсы на целевых серверах, делегировав шифрование и дешифрование балансировщику нагрузки, что позволит вашим приложениям обрабатывать больше запросов (поскольку им больше не нужно шифровать и расшифровывать данные); * Аутентификация: учитывая, что балансировщик нагрузки L7 имеет доступ ко всем метаданным, связанным с запросом, таким как заголовки HTTP, он может работать как уровень аутентификации, который возвращает 401 — неавторизовано, например, в случае: отсутствует конкретный заголовок HTTP. * Наблюдаемость: балансировщик нагрузки L7 можно использовать для обеспечения наблюдаемости ресурса путем отслеживания входящих запросов, времени ответа и т. д.; * Безопасность: балансировщик нагрузки L7 может защитить ваше приложение от DDoS-атак;
Вы можете найти множество балансировщиков нагрузки, которые работают на уровне приложения, например:
- Шлюз приложений Azure
- AWS Classic/Application Load Balancer
- Traefik (с открытым исходным кодом)
- NGINX (с открытым исходным кодом)
Балансировщик нагрузки L4: обрабатывает запросы, просматривая соединения и IP-адреса
Балансировщик нагрузки L4 действует на уровне TCP/UDP: он не имеет доступа к телу запроса или его заголовкам HTTP, поэтому не может принимать разумные решения на основе фактического содержимого запроса. .
Хотя он и не такой умный, как балансировщик нагрузки L7, у него все же есть некоторые преимущества:
- Поскольку он работает на транспортном уровне и не выполняет никакой проверки полезной нагрузки запроса, он намного быстрее, чем балансировщик нагрузки L7;
- Он не знает, какой тип данных он получает: байты могут поступать как из HTTP-запроса, так и из соединения MongoDB;
- Можно выбрать целевой сервер на основе IP-адреса;
Как вы понимаете, многие команды предпочитают балансировщик нагрузки L7 балансировщику нагрузки L4.
Однако в Интернете можно найти несколько хороших балансировщиков нагрузки L4:
* Azure Load Balancer * AWS Network/Gateway/Classing Load Balancer * HAProxy Technologies * VMWare а>
Дополнительная литература
Мы только прикоснулись к теме.
Конечно, чтобы лучше понять различия между L7 и L4, взгляните на определение и структуру модели OSI:
Затем замечательная статья о всех возможных функциях балансировщика нагрузки, а также о его различных типах (Edge, Sidecar, Middle):
🔗 Введение в современную балансировку сетевой нагрузки и проксирование | Мэтт Кляйн
Эта статья впервые появилась на сайте Code4IT 🐧
Наконец, короткая, но ценная статья о балансировщиках нагрузки L4 и L7 с демонстрацией, созданной с помощью Docker и Envoy:
🔗 Балансировка нагрузки L4 и L7 | Мохак Пури
Подведение итогов
В этой статье мы узнали, чем отличаются балансировщики нагрузки L7 и L4, а также какие функциональные возможности предоставляют оба типа.
Вот короткая таблица, в которой суммированы различия.
| Балансировка нагрузки L4 | Балансировка нагрузки L7 | |----|----| | Работает на транспортном уровне | Работает на уровне приложений | | Использует протоколы TCP и UDP | Использует протоколы HTTP и SMTP | | Принимает решения о маршрутизации на основе простых алгоритмов и сетевой информации, такой как порты и протоколы | Принимает решения о маршрутизации на основе информации о содержимом, такой как заголовки, содержимое сообщения, тип URL-адреса и данные файлов cookie | | Не проверяет и не расшифровывает сообщения | Завершает, проверяет и расшифровывает сообщения | | Быстро, эффективно и безопасно | Комплексный, информированный и ориентированный на применение | | Сделки с отдельными потоками подключений | Сделки по индивидуальным запросам | | Невозможно выполнить интеллектуальную балансировку нагрузки или оптимизацию контента на основе типа носителя, правил локализации и т. д. | Может выполнять интеллектуальную балансировку нагрузки и оптимизацию контента в зависимости от типа носителя, правил локализации и т. д. |
Надеюсь, вам понравилась эта статья! Давайте поддерживать связь в Twitter или LinkedIn< /а>! 🤜🤛
Удачного программирования!
🐧
Также опубликовано здесь.< /п>
Оригинал