Приветствую, встала задача разработать сервер для онлайн вещания (стрим), погуглив нашел решение
nginx-rtmp-module, он работает стабильно, проблем с ним не возникает, проблема в другом.
И так есть HLS стрим через OBS и сервер, где все это работает и раздается, вот
nginx config.
Возникает проблема при большом количестве подключенных к стриму, если в ситуации, когда стрим смотрит пару десяток пользователей, .ts файлы отдаются примерно за 200-300мс, а в случае если к серверу подключается 500-1000 пользователей, то уже отдача растягивается от 5 секунд до 20 секунд
Я подумал, что проблема в нехватке ширины канала, каждый файл .ts весит около 2мб, вообщем создал кучу серверов вот с таким конфигом nginx:
nginx.conf
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=pagecache:50m inactive=50m max_size=1G;
default:
proxy_cache_valid 200 301 302 304 5m;
proxy_cache_key "$request_uri";
proxy_hide_header "Set-Cookie";
proxy_ignore_headers "Cache-Control" "Expires";
proxy_cache_use_stale error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_cache pagecache;
location ~ \.ts$ {
proxy_pass http://сервер-стрима;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_buffering on;
add_header X-Cache-Status $upstream_cache_status;
add_header X-Cache-Key $request_uri;
}
А на клиенте уже рандомно обращаемся к одному из кеш серверу
в такой ситуации увеличивается способность стрима работать с большим количеством пользователей, но и это работает до определенного количества пользователей, например 5 тыс пользователей
Дальше еще возникает проблема с отдачей плейлиста .m3u8 файла, так как в него вносятся новые .ts файлы он должен отдаваться непосредственно из стрим сервера, то его нельзя кешировать и при большом количество пользователей его отдача с 40мс увеличиваетсч до нескольких секунд.
Прошу помочь с созданием правильной структуры серверов и кэширования, сервера поднимаю в vscale.io
Хочу заметить, что идеально работает если использовать cloudflare и настроить page rules на полное кеширование .ts файлов (cache-level: cache everything), но через некоторое время cloudflare отключает от зоны, так как видимо не разрешает на бесплатном тарифе или вообще кеширование .ts файлов, если это решается с помощью cloudflare, это было бы удобнее, другая фирма поднимает похожий стрим и они используют cloudflare, но почему то у нас не работает.
До этого использовал aws cloudfront, работает не стабильно и стоит очень дорого, стрим может идти 2 часа и выгоднее просто временно поднять кучу серверов из бэкапа на каком нибудь облачном сервисе и заплатить очень малые деньги
Вообщем подскажите пожалуйста, как решить проблему с зависанием стрима, с помощью nginx или cloudflare