Transmisiones en vivo RTMP de escala automática (NGINX-RTMP)

Transmisiones en vivo RTMP de escala automática (NGINX-RTMP)

estoy usandoMódulo Nginx-rtmppara transmisión en vivo. Funciona perfectamente para 40-50 cámaras en una sola máquina (AWS EC2 C3-large). Pero si tengo más de 100 transmisiones, ¿cómo puedo escalar mis servidores para cumplir con los requisitos?

Intenté usar ELB pero finaliza las conexiones una vez que se inicia la nueva máquina y, después de iniciar la nueva máquina, envía solicitudes entrantes en forma circular. Lo que quiero es lo siguiente.

  1. Cuando la utilización de la CPU del sistema alcance el 80%, inicie un nuevo servidor pero mantenga activas las conexiones existentes.
  2. Envíe nuevas solicitudes al servidor recién creado solo si la utilización de CPU del primer servidor es > 80 %. (Sin round robin)

Cómo puedo conseguir esto ? Gracias por tu tiempo.

Respuesta1

Si está dispuesto a cambiar a hls (nginx-rtmp admite hls) haría tu vida, según mi experiencia, más fácil que intentar equilibrar la carga del rtmp. Una vez que haya configurado la transcodificación de hls, lo único que necesita es colocar un cdn frente a su servidor web y dejar que se encargue del almacenamiento en caché o utilizar el suyo propio con barniz, squid o incluso nginx usted mismo (por supuesto, hay más posibilidades). ) - El almacenamiento en caché HTTP está tan extendido que estoy seguro de que encontrará una solución sencilla.

Sin embargo, si desea seguir con rtmp, puede configurar una infraestructura similar.

Tenga un servidor de ingesta maestro y varios nodos perimetrales, cada uno de los cualesjalardesde el servidor de ingesta. Esta configuración sería bastante escalable y debería funcionar bien para su carga actual.

Editar: Parece que no entendí bien su pregunta: probablemente sería más fácil tener un punto final de API al que pueda preguntar a qué servidor rtmp debe transmitir su cámara web en lugar de intentar equilibrar la carga.

Entonces, una vez que su servidor rtmp haya alcanzado X transmisiones (consulte el módulo de estadísticas nginx-rtmp), inicie una nueva instancia y redirija nuevas transmisiones a esa.

nginx-rtmp también tiene una funcionalidad de redireccionamiento en on_connect (aún no se pueden colocar más de dos enlaces, solo busque on_connect en la página wiki de directivas) al devolver un encabezado 3xx con una Ubicación. No estoy seguro de si esto admite la redirección a un nodo diferente, pero también valdría la pena intentarlo: puede evitar tener que realizar consultas manualmente antes de elegir un servidor.

Respuesta2

No sé si nginx admite escalabilidad con el módulo rtmp, pero si puede cambiar la solución del servidor, puede probar nuestro servidor:Monaserver.

Permite escalabilidad y admite otros protocolos de forma nativa (como RTMFP).

Tenéis un ejemplo de configuración de escalabilidad con 3 servidores aquí:http://www.monaserver.ovh/scalability.html#exchange-data-and-resources Este ejemplo redirige nuevas suscripciones cuando el servidor tiene más de 400 suscriptores. Si realmente prefiere utilizar la utilización de la CPU, puede cambiar la siguiente línea:

if _nextServer and _subscribers>=400 then error(_nextServer.host) end

con :

if _nextServer and cpu>80 then error(_nextServer.host) end

Entonces eres libre de encontrar la mejor manera de cargar la CPU (parámetroUPC). Si necesita llamar al código C++, eche un vistazo a la biblioteca FFI (puede incrustar código C++ en scripts lua sin incluir ninguna otra biblioteca/complemento)

Puedes contactarnos en el foro si necesitas ayuda.

¡Espero que te ayude!

información relacionada