.png)
estou usandoMódulo Nginx-rtmppara transmissão ao vivo. Funciona perfeitamente para 40-50 câmeras em uma única máquina (AWS EC2 C3-grande). Mas se eu tiver mais de 100 fluxos, como posso dimensionar meus servidores para atender ao requisito?
Eu tentei usar o ELB, mas ele encerra as conexões assim que uma nova máquina é iniciada e, após iniciar a nova máquina, ele envia solicitações recebidas em modo round robin. O que eu quero é o seguinte.
- Quando a utilização da CPU do sistema atingir 80%, inicie um novo servidor, mas mantenha as conexões existentes ativas.
- Envie novas solicitações para o servidor recém-criado somente se a utilização da CPU do primeiro servidor for > 80%. (Sem Round Robin)
Como posso conseguir isso? Obrigado pelo seu tempo.
Responder1
Se você estiver disposto a mudar para hls (nginx-rtmp suporta hls) tornaria sua vida - pela minha experiência - mais fácil do que tentar balancear a carga do próprio rtmp. Depois de configurar a transcodificação hls, a única coisa que você precisa é colocar um cdn na frente do seu servidor web e deixar que ele cuide do cache ou fazer o seu próprio usando verniz, squid ou até mesmo nginx (é claro que há mais possibilidades ) - O cache HTTP é tão difundido que tenho certeza que você encontrará uma solução fácil.
Se você quiser continuar com o rtmp, poderá configurar uma infraestrutura semelhante.
Tenha um servidor mestre de ingestão e vários nós de borda, cada umpuxardo servidor de ingestão. Essa configuração seria bastante escalonável e funcionaria bem para sua carga atual.
Editar: parece que entendi mal sua pergunta: provavelmente seria mais fácil ter um endpoint de API no qual você pudesse perguntar para qual servidor rtmp sua webcam deveria transmitir em vez de tentar balancear a carga.
Assim, quando seu servidor rtmp atingir X streams (consulte o módulo nginx-rtmp stat), você inicia uma nova instância e redireciona novos streams para ela.
nginx-rtmp também possui uma funcionalidade de redirecionamento em on_connect (não é possível colocar mais de dois links ainda, basta pesquisar on_connect na página wiki de diretivas) retornando um cabeçalho 3xx com um local. Não tenho certeza se isso suporta o redirecionamento para um nó diferente, mas valeria a pena tentar também - pode evitar a necessidade de consultar manualmente antes de escolher um servidor.
Responder2
Não sei se o nginx suporta escalabilidade com o módulo rtmp, mas se você estiver livre para alterar a solução do servidor, experimente nosso servidor:Monaserver.
Ele permite escalabilidade e oferece suporte nativo a outros protocolos (como RTMFP).
Você tem um exemplo de configuração de escalabilidade com 3 servidores aqui:http://www.monaserver.ovh/scalability.html#exchange-data-and-resources Este exemplo redireciona novas assinaturas quando o servidor tem mais de 400 assinantes. Se você realmente preferir usar a utilização da CPU você pode alterar a seguinte linha:
if _nextServer and _subscribers>=400 then error(_nextServer.host) end
com :
if _nextServer and cpu>80 then error(_nextServer.host) end
Então você está livre para encontrar a melhor maneira de obter carga da CPU (parâmetroCPU). Se você precisar chamar o código c++, dê uma olhada na biblioteca FFI (você pode incorporar código c++ em scripts lua sem incluir qualquer outra biblioteca/plugin)
Você pode entrar em contato conosco no fórum se precisar de ajuda.
Espero que ajude você!