What is: Load Balancing – алгоритмы

Автор: | 27/02/2018
 

Основной задачей балансировщика является определение того, какой из серверов из бекенд-пула может наиболее эффективно обработать входящий пакет данных. Для этого у балансировщика (Load Balancer, LB) имеется несколько алгоритмов, наличие и возможность применения которых зависит от типа LB и его настроек.

Основное различие алгоритмов – это уровень их применения: 7-ой, Application (уровень приложения), 4-ый, Транспортный уровень модели OSI и уровень 3 – Network уровень:

(есть балансировщики уровня 2, но это уже больше относится к hardware и тут рассматриваться не будет).

Если брать в качестве примера AWS Elastic Load Balancer, то это будут Application Load Balancer – 7 уровень, Network Load Balancer – 4 уровень.

Балансировщик уровня 4 способен считывать заголовки пакетов на 4-ом уровне сети и оперировать данными из заголовков TCP и UDP пакетов, например – Source/Destination порты и низлежащим IP, т.е. IP адресом отправителя и получателя. Соответственно – это ограничивает их возможности, т.к. такой балансировщик не может получить данные о состоянии сервера-получателя или данные из заголовков в уровнях выше, например – URL HTTP-запроса.

В отличии от алгоритмов уровня 4 – в алгоритмах балансировки, работающих на уровне приложения сессия клиента заканчивается на самом балансировщике, который анализирует полное содержимое пакета, после чего он создаёт новую сессию к серверу из пула серверов бекенда.

Такие алгоритмы потребляют больше вычислительных ресурсов, но позволяют выполнять балансировку на основе данных из HTTP-заголовков, на основе cookie-данных, URL и URI запроса.

Алогоритмы ниже рассматривают основные способы балансировки, используя данные 4-го уровня OSI.

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

Round Robin

Алгоритм Round Robin DNS (алгоритм кругового обслуживания) – несколько однотипных серверов предоставляют один и тот же сервис и используют одно DNS имя, но каждый имеет собственный IP адрес. Балансировщик передаёт каждое новое соединение на следующий IP в списке серверов, пока список не закончится, после чего возвращается к первому серверу – и повторяет круг. Этот алгоритм подразумевает, что все сервера готовы принять соедеинение и не способен учитывать количество уже обслуживаемых сервером соединений. Round Robin является алгоритмом по умолчанию в NGINX.

Weighted Round Robin

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

Least Connections

Основным недостатком метода Round Robin явояется то, что он никак не учитывает количество соединенией, которые сервер обслуживает в данный момент. Решением может являться метод least connections (буквально – “наименьшее количество соединений”): он способ учиывать сколько соединений установлено с кадждым из серверов беканд-пула, и передавать новое соединение на срвер с наименьшим количетсво м активным клиентов, предполагая что каждое соединение генерирует одинаковую нагрузку на сервер. В NGINX этот метод определяется директивой least_conn.

Weighted Least Connections

Как и алгоритм Weighted Round Robin умеет учитывать заданный коэфициент “веса” для каждого из серверов и распределять нагрузку, учитывая и количество активных соеднинений, и этот коэфициент.

Source IP hash

Использует хеш-сумму, созданную на основе IP-адреса отправителя и получателя, а затем полученный ключ используется для “привязки” клиента к определённому серверу, что позволяет поддерживать сессию после отключения клиента. В NGINX задаётся директивой ip_hash.

The Least Response Time

При использовании этого алгоритма – сервер выбирается на основе времени его ответа: балансировщик передаст новое подключение серверу, ответившему быстрее других серверов пула. В NGINX этот режим доступен только для NGINX Plus (директива least_time).

The Least Bandwidth Method

Алгоритм, основанный на пропускной способности канала сервера за определённый промежуток времени, т.е. балансировщик выберет тот сервер, который за промежуток времени использовал меньше всего мб/с.

Ссылки по теме

What is: модель OSI

Load Balancing Algorithms

Load Balancing Algorithms

8 Load Balancing Algorithms Technique for (Higher) Performance

AWS Elastic Load Balancing

Балансировка нагрузки: основные алгоритмы и методы

Using nginx as HTTP load balancer

Choosing an NGINX Plus Load‑Balancing Technique

TCP Headers and UDP Headers Explained