Jump to content
Cesbo Community
  • Announcements

    • RadioSintetica

      News!   12/10/17

      If you have any questions related to installation and purchase, please check our documentation https://cesbo.com/en/astra/docs/ and terms of service https://cesbo.com/en/terms/
      Also, we have an official Telegram chat: https://t.me/cesbo_en  you can ask any questions or share your experience with colleagues Если у вас возникли вопросы по установке и покупке, ознакомьтесь пожалуйста с документацией по адресу https://cesbo.com/ru/astra/docs/ и условиями использования https://cesbo.com/ru/terms/
      Так же, обращаю внимание, что у нас есть официальный Телеграмм чат: https://t.me/cesbo_ru в котором можно задать вопросы - или поделиться своим опытом с коллегами
Sign in to follow this  
megahertz0

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

Recommended Posts

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

 

И вот тут есть затык. Мы используем Stalker middleware и одноразовые ссылки. В теории можно смотреть на адрес клиента и отправлять его на ближайший стример. В Сталкере есть балансировка по GeoIP и количеству клиентов на стример. Но балансировки просто на основе адресе клиента нет. Можно, конечно, переделать код Сталкера, но очень не хочется этого делать т.к. во все следующие версии придется этот код портировать. В общем, вариант на крайний случай.

 

И тут родилась идея с http-редиректом. Ставим nginx и вот такой конструкцией:

geo $redir_user {
        default 0;
        10.0.100.0/24 1;
    }

server {
        listen 80;
        server_name  localhost;

        if ($redir_user) {
                rewrite ^ $scheme://10.20.1.67:8888$request_uri break;
        }
        }

при помощи модуля geo смотрим на адрес клиента и затем через rewrite перенаправляем клиента на нужный стример. Собрал демку, попробовал - в VLC и на приставках вполне работает.

 

Есть еще вариант с HAProxy. Он тоже умеет HTTP Redirect и кроме балансировки может определять живой стример или нет и таким образом обеспечивать отказоустойчивость. Пока не тестил, но думаю, что тоже будет работать.

 

Так что вопрос к публике - а кто решал подобного рода задачи? Какие подводные камни? И в верном ли направлении я двигаюсь?

Share this post


Link to post
Share on other sites

Решили похожую задачу через DNS %-)

 

не решили, а подставили костыли.

клиент прописал ручками днс и сломался ваш балансир

Share this post


Link to post
Share on other sites

Тут коллективный разум с форума одной широко известной компании из трех букв использует nginx в режиме прокси + кэш чанков в памяти. По мне как еще одно вполне живое решение.

Плюс - стримеров может быть всего два (для резерва), остальное кеширующие серверы на nginx. Второй плюс - каналы отдаются с базы on demand, что заметно экономит полосу на сети.

Share this post


Link to post
Share on other sites

не решили, а подставили костыли.

клиент прописал ручками днс и сломался ваш балансир

Лезть в код Сталкера - это конечно же true way, ага.

И да, если наш умный клиент пропишет днс ручками то сломает он не балансер, а просто начнет отгребать чанки с корневого сервера, а не с ближайшего прокси, для нас это станет заметно когда таких клиентов будет больше 50%... 

Share this post


Link to post
Share on other sites

Подниму тему. Кто как делает балансировку hls?

Если обычный уникаст, по типу xproxy от astra, то можно через dns балансировать, клиент выгребает всё время в рамках одной сессии. С hls такое не проходит, тот-же mag при каждом обращении к m3u8 или чанку спрашивает у dns адрес, и обращается каждый раз к разному серверу. Распределять по ip клиента - а как быть при отказе одного из серверов вещания?

Средствами сталкера? Есть там балансировка, но при том же отказе одного из серверов mag тупит, так как при загрузке списка каналов он получает только 1 сервер от сталкера.

HAproxy? Это лепить дополнительный сервер перед серверами вещания. И что делать если HAproxy ляжет? Делать 2 сервера HAproxy с общим ip?

Вобщем как кто решает проблему отказоустойчивости при нескольких hls серверах?

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this  

×