Skip to content

Балансировка нагрузки во 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.

Как настроить балансировщик

  1. Определите группу серверов для распределения нагрузки и укажите один и тот же cluster_key в конфигурационном файле каждого из них, чтобы связать их. На серверах настройте необходимые вам потоки.
  2. Выберите один или несколько серверов для балансировки. Запускайте столько балансировщиков в вашем кластере, сколько необходимо для достижения требуемого уровня отказоустойчивости. Это могут быть и выделенные сервера для балансировки, и Edge-сервера.
  3. Настройте балансировщик с помощью 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

Балансировщик может распределять клиентские запросы по серверам в кластере с учетом региона клиента. Вот как это работает:

  1. Для каждого сервера в кластере вы можете указать один или несколько кодов страны в параметре countries и/или опцию country_default=true, что означает "все остальные страны".
  2. Flussonic определяет страны, используя свободную базу данных геолокации GeoLite2 от MaxMind.
  3. Для каждого запроса клиента балансировщик нагрузки ищет сервер с кодом страны, соответствующим региону клиента. Если такой сервер найден, запрос перенаправляется на него. Если найдено несколько серверов с соответствующим кодом страны, балансировщик определяет среди них нужный согласно режиму балансировки (например, bitrate).
  4. Если сервер с нужным кодом страны не найден, запрос перенаправляется на сервер, для которого указано 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.