Вопрос по балансировке

Alex_b

New Member
Возможна такая ситуация, что имеется несколько origin servers и несколько edge серверов - которые распределены географически(пример: что бы пользователь из европы обращался к ближайшему серверу в европе).
Если на каждом origin будет 200 стримов, то на каждый edge прилетит столько же стримов * на количество origin, что приведет к тому, что просто не хватит пропускной способности канала.

У Wowza реализован механизм балансировки на основе, что при обращение за потоком на edge server, edge проверяет есть ли у него такой видео поток и если есть отдает его пользователю, в противном случае - делает запрос за стримом на origin server и только после этого отдает его пользователю, следующему пользователю, который обратился за этим же стримом он уже сразу берется с edge.
В этом механизме есть плюс - что на edge не висят стримы которые не используются(соответственно меньше нагрузка на сервер и на канал)

Не планируется ли реализация такого же подхода ?
 
Last edited:

Max

Administrator
Staff member
Все что связано с балансировкой нагрузки и масштабированием у нас в приоритете.
Поэтому скорее всего скоро сделаем.

Уже сейчас это можно реализовать, но более сложными сценариями с использованием REST API и REST hooks.
Например так:
1. Пользователь делает play()
2. Сервер отправлят запрос /playStream в backend через REST
3. Backend знает что такой стрим есть на одном из Origin-серверов и командует серверу забрать стрим с него, используя /pull API
4. Backend отправляет пользователю нотификацию /data/send о том, что стрим забрали с Origin-сервера, доставили на Edge-сервер и поток готов к воспроизведению.
5. Пользователь получает нотификацию и делает новую попытку воспроизвести стрим, источником которого уже является Origin.

Конечно, гораздо проще будет с этим работать "из-коробки", чтобы сделать простой play() а сервер пошел на Origin за стримом если такого нет на Edge.
Попробуем это реализовать. По результатам отпишу.
 
Top