Балансировка нагрузки во Flussonic¶
Балансировка нагрузки — это процесс распределения запросов клиентов между кластером серверов в соответствии с некоторым алгоритмом.
Балансировка преследует следующие цели:
- предотвращение перегрузки одного из серверов кластера;
- оптимизация использования ресурсов группы серверов;
- максимизация пропускной способности.
Кроме того, балансировщик обладает свойствами масштабируемости и отказоустойчивости. Таким образом, по мере необходимости вы можете добавлять серверы в кластер и, если один из серверов выйдет из строя, то балансировщик сможет обеспечить непрерывную работу с клиентскими запросами.
Flussonic может распределять пользователей между несколькими серверами Flussonic Media Server. Балансировка нагрузки достигается за счёт перенаправления запросов клиентов. Поддерживается балансировка как запросов на проигрывание, так и запросов на публикацию.
Существуют разные алгоритмы балансировки нагрузки. Выбор алгоритма зависит от вашей цели и задач. Во Flussonic реализованы следующие методы (режимы) работы балансировщика:
- Наименьшее количество подключений (режим
clients
):
Направляет клиентский запрос на сервер с наименьшим количеством активных подключений. Эффективен в случаях, когда в кластере присутствует большое количество активных подключений, неравномерно распределённых между серверами. Никаких параметров для настройки указывать не нужно.
- Наименьший выходной битрейт (режим
bitrate
):
Направляет клиентский запрос на наименее загруженный сервер по значению выходного битрейта. Можно указать значение параметра max_bitrate
(в бит/с, можно также указать в Мбит/с 40M
или Кбит/с 40К
) — максимальное значение битрейта для каждого пира. Балансировщик будет направлять трафик на сервер с наименьшим текущим выходным битрейтом.
- Наименьшая загрузка (режим
usage
):
Распределяет клиентские запросы, исходя из значения границы пропускной способности сервера. В этом случае необходимо указать max_bitrate
(в бит/с, можно также указать в Мбит/с 40M
или Кбит/с 40К
) — максимальное значение битрейта для каждого пира. Балансировщик будет вычислять загрузку канала как процент от максимального битрейта (current bitrate / max_bitrate * 100) и направлять трафик на сервер с наименьшей загрузкой.
Warning
max_bitrate
необходимо указывать для каждого сервера в кластере, иначе балансировщик будет работать некорректно.
- Наименьшее количество активных потоков (режим
streams
):
Распределяет клиентские запросы, исходя из количества активных потоков. Это режим подходит для распределения публикуемых потоков, полученных через m4s://
от других серверов Flussonic (серверов захвата). Например, если вы публикуете потоки по WebRTC, RTMP или SRT на пуле серверов захвата, а затем отправляете их на пул серверов-транскодеров, каждый публикуемый поток будет перенаправлен на транскодер с наименьшим количеством активных потоков.
В каком случае необходимо использовать балансировку нагрузки?
Если у вашей стриминговой платформы или вашего стримингового сервиса более 10 000 зрителей.
Для того, чтобы использовать балансировщик во Flussonic, добавьте его в файл конфигурации (/etc/flussonic/flussonic.conf
):
cluster_key SOME_CLUSTER_KEY;
balancer lb0 {
mode bitrate;
server p1 max_bitrate=60M;
server p2 max_bitrate=40M;
server p3 max_bitrate=30M;
}
Укажите следующие параметры:
- lb — имя балансировщика;
- server — пир (например,
peer1.example.com
); - mode — режим балансировки (
bitrate
,usage
,clients
,streams
). По умолчанию используетсяmode bitrate
.
Пример URL для обращения к потоку channel1
:
http://FLUSSONIC-IP/lb/channel1/index.m3u8
Вы также можете определить несколько балансировщиков, если в этом есть необходимость.
Warning
Балансировщик нагрузки работает со стриминговыми протоколами на основе HTTP, такими как HLS, MPEG-DASH, а также с WebRTC WHIP/WHEP.
Как настроить балансировщик¶
- Определите группу серверов для распределения нагрузки и укажите один и тот же
cluster_key
в конфигурационном файле каждого из них, чтобы связать их. На серверах настройте необходимые вам потоки. - Выберите один или несколько серверов для балансировки. Запускайте столько балансировщиков в вашем кластере, сколько необходимо для достижения требуемого уровня отказоустойчивости. Это могут быть и выделенные сервера для балансировки, и Edge-сервера.
- Настройте балансировщик с помощью
balancer
в файле конфигурации сервера (также не забудьте указатьcluster_key
):
cluster_key SOME_CLUSTER_KEY;
balancer lb0 {
mode bitrate;
server stream.example.com max_bitrate=60M;
server stream.example.tv max_bitrate=40M;
server stream.exmpl.com max_bitrate=30M;
}
В примере выше мы определили балансировщик lb0
с 3-мя серверами и режимом балансировки по значению выходного битрейта (mode bitrate
).
Пример настройки балансировщика по количеству активных зрителей (mode clients
):
cluster_key SOME_CLUSTER_KEY;
balancer lb0 {
mode clients;
server stream.example.com;
server stream.example.tv;
server stream.exmpl.com;
}
Пример настройки балансировщика по значению загрузки канала (mode usage
):
cluster_key SOME_CLUSTER_KEY;
balancer lb0 {
mode usage;
server stream.example.com max_bitrate=60M;
server stream.example.tv max_bitrate=40M;
server stream.exmpl.com max_bitrate=30M;
}
Пример настройки балансировщика по количеству активных потоков (mode streams
):
cluster_key SOME_CLUSTER_KEY;
balancer lb0 {
mode streams;
server trancoder1;
server trancoder2;
server trancoder3;
}
Балансировка с учетом GeoIP¶
Балансировщик может распределять клиентские запросы по серверам в кластере с учетом региона клиента. Вот как это работает:
- Для каждого сервера в кластере вы можете указать один или несколько кодов страны в параметре
countries
и/или опциюcountry_default=true
, что означает "все остальные страны". - Flussonic определяет страны, используя свободную базу данных геолокации GeoLite2 от MaxMind.
- Для каждого запроса клиента балансировщик нагрузки ищет сервер с кодом страны, соответствующим региону клиента. Если такой сервер найден, запрос перенаправляется на него. Если найдено несколько серверов с соответствующим кодом страны, балансировщик определяет среди них нужный согласно режиму балансировки (например,
bitrate
). - Если сервер с нужным кодом страны не найден, запрос перенаправляется на сервер, для которого указано
country_default=true
. Если таких серверов несколько, балансировщик определяет среди них нужный согласно режиму балансировки (например,bitrate
). Если такого сервера нет, запрос отклоняется.
Пример:
cluster_key SOME_CLUSTER_KEY;
balancer lb0 {
mode bitrate;
server p1 max_bitrate=60M countries=RU;
server p2 max_bitrate=40M countries=RU,CN;
server p3 max_bitrate=30M countries=CN countries_default=true;
server p4 max_bitrate=30M countries_default=true;
}
С такой конфигурацией:
- Если запрос придет из Китая, он будет перенаправлен на P2 или P3 (в зависимости от битрейта).
- Если запрос придет из России, он будет перенаправлен на P1 или P2.
- Если запрос придет из любой другой страны, он будет перенаправлен на P3 или P4.