Ваше решение не будет работать, когда все пользователи запрашивают одно и то же видео. Лучшее решение состоит в том, чтобы все видео были доступны на всех серверах и использовать сервер балансировки нагрузки для перенаправления текущего запроса на сервер с самым низким числом открытых каналов.
Обратите внимание, что серверы хранения (RAID-массивы, SAN) могут доставлять данные с очень высокой скоростью, поэтому вы часто можете использовать одну систему хранения для нескольких видеосерверов (т.е. одну систему хранения на N видеосерверов и 1 балансировщик нагрузки (или два, если вы хотите аварийного переключения)).
Хорошим решением здесь является использование команды «redirect» в протоколе:
- Клиент запрашивает балансировщик нагрузки (LB) для видео
- LB сообщает клиенту, какой видеосервер (VS) использовать. Это просто «найти VS с наименьшим количеством открытых каналов».
- Клиент подключается напрямую к VS (чтобы избежать всех накладных расходов)
- VS сообщает LB текущее количество открытых каналов (не используйте инкрементальный подход здесь, чтобы избежать проблем с синхронизацией)
- VS начинает потоковую передачу данных клиенту
- Когда клиент отключается, VS сообщает LB о новом количестве каналов
[РЕДАКТИРОВАТЬ] Основной причиной, по которой клиенты подключаются напрямую к видеосерверам, является пропускная способность сети. Если все VS отправляют свои данные в LB, который передает их клиентам, вы ограничиваете скорость единственной (или двойной) сетевой карты LB. Если у вас 5 VS, вы можете получить пятикратную пропускную способность при прямом подключении. Кроме того, вы можете легко масштабировать свою систему, когда большее количество пользователей «забивают» ее, просто добавив другой видеосервер, подключив его к магистрали и добавив одну запись в список на LB.