Что такое балансировка нагрузки?

Вступление

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

Веб-инфраструктура без балансировки нагрузки может выглядеть примерно так:

web_server

В этом примере пользователь подключается напрямую к веб-серверу вyourdomain.com. Если этот единственный веб-сервер выйдет из строя, пользователь больше не сможет получить доступ к сайту. Кроме того, если многие пользователи пытаются получить доступ к серверу одновременно и он не может справиться с нагрузкой, они могут испытывать медленное время загрузки или вообще не могут подключиться.

Эту единственную точку отказа можно уменьшить, введя балансировщик нагрузки и, по крайней мере, один дополнительный веб-сервер на серверной части. Как правило, все внутренние серверы будут предоставлять идентичный контент, чтобы пользователи получали согласованный контент независимо от того, какой сервер отвечает.

Diagram 01: Load Balancers / Top-to-bottom

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

Какой тип трафика может обрабатывать балансировщики нагрузки?

Администраторы балансировщика нагрузки создают правила пересылки для четырех основных типов трафика:

  • HTTP - стандартная балансировка HTTP направляет запросы на основе стандартных механизмов HTTP. Балансировщик нагрузки устанавливает заголовкиX-Forwarded-For,X-Forwarded-Proto иX-Forwarded-Port, чтобы предоставить серверной части информацию об исходном запросе.

  • HTTPS - балансировка HTTPS выполняет те же функции, что и балансировка HTTP, но с добавлением шифрования. Шифрование выполняется одним из двух способов: либо с помощьюSSL passthrough, который поддерживает шифрование на всем пути к бэкэнду, либо с помощьюSSL termination, который возлагает бремя дешифрования на балансировщик нагрузки, но отправляет трафик в незашифрованном виде на бэкэнд. .

  • TCP - для приложений, которые не используют HTTP или HTTPS, TCP-трафик также может быть сбалансирован. Например, трафик к кластеру базы данных может быть распределен по всем серверам.

  • UDP - Совсем недавно некоторые подсистемы балансировки нагрузки добавили поддержку основных интернет-протоколов балансировки нагрузки, таких как DNS и syslogd, которые используют UDP.

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

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

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

Проверка здоровья

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

Алгоритмы балансировки нагрузки

Используемый алгоритм балансировки нагрузки определяет, какой из исправных серверов на сервере будет выбран. Вот некоторые из наиболее часто используемых алгоритмов:

Round Robin - Round Robin означает, что серверы будут выбираться последовательно. Балансировщик нагрузки выберет первый сервер в своем списке для первого запроса, затем переместится по списку по порядку, начиная с самого начала, когда он достигает конца.

Least Connections - Наименьшее количество подключений означает, что балансировщик нагрузки выберет сервер с минимальным количеством подключений и рекомендуется, когда трафик приводит к более длительным сеансам.

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

Доступные администраторам алгоритмы различаются в зависимости от конкретной используемой технологии балансировки нагрузки.

Как балансировщики нагрузки обрабатывают состояние?

Некоторые приложения требуют, чтобы пользователь продолжал подключаться к тому же внутреннему серверу. Исходный алгоритм создает сходство на основе информации IP-адреса клиента. Другой способ добиться этого на уровне веб-приложения - использоватьsticky sessions, где балансировщик нагрузки устанавливает файл cookie, и все запросы из этого сеанса направляются на один и тот же физический сервер.

Избыточные балансировщики нагрузки

Чтобы удалить балансировщик нагрузки как единственную точку отказа, второй балансировщик нагрузки может быть подключен к первому, чтобы сформировать кластер, где каждый контролирует состояние других. Каждый из них в равной степени способен обнаруживать и восстанавливать ошибки.

Diagram 02: Cluster / Distributed

В случае сбоя основного балансировщика нагрузки DNS должен перевести пользователей на второй балансировщик нагрузки. Поскольку изменения DNS могут занять значительное время для распространения в Интернете и автоматического переключения при отказе, многие администраторы будут использовать системы, позволяющие гибкое переназначение IP-адресов, напримерfloating IPs. Перераспределение IP-адресов по требованию устраняет проблемы распространения и кэширования, присущие изменениям DNS, предоставляя статический IP-адрес, который может быть легко переназначен при необходимости. Доменное имя может оставаться связанным с тем же IP-адресом, а сам IP-адрес перемещается между серверами.

Вот как может выглядеть высокодоступная инфраструктура, использующая плавающие IP:

Diagram 03: Floating IPs

Заключение

Related