我正在使用Nginx的rtmp模块进行直播。 它适用于单台机器上的40-50台摄像机(AWS EC2 C3-large)。 但是,如果我有超过100个stream,我怎么能扩展我的服务器,以满足要求?
我已经尝试过使用ELB,但是一旦新机器启动后,它终止连接,启动新机器后,以循环方式发送传入请求。 我想要的是以下。
我怎么能做到这一点? 感谢您的时间。
如果你愿意切换到hls( nginx-rtmp支持hls ),它会让你的生活 – 从我的经验 – 比试图负载平衡rtmp本身更容易。 一旦你有转码设置唯一的东西,你需要它把一个cdn在你的networking服务器,让你照顾的caching或滚自己使用清漆,鱿鱼甚至nginx自己(当然有更多的可能性) – HTTPcaching如此广泛我相信你会find一个简单的解决scheme。
如果你想坚持rtmp,你可以build立一个类似的基础设施。
有一个主摄取服务器和每个从摄取服务器拉出的多个边缘节点。 这个设置将是相当可扩展的,应该适合当前的负载。
编辑:似乎我误解了你的问题:这可能是最简单的一个API端点,你可以问你的摄像头应该stream到哪个RTMP服务器,而不是试图负载平衡。
所以一旦你的rtmp服务器到达Xstream(参见nginx-rtmp统计模块),你启动一个新的实例并redirect到新的stream。
nginx-rtmp在on_connect中也有一个redirectfunction(不能放两个以上的链接,只要在指令wiki页面上searchon_connect),返回一个带有Location的3xx头。 我不确定这是否支持redirect到不同的节点,但这是值得一试的 – 可以避免在select服务器之前手动查询。
我不知道nginx是否支持rtmp模块的可扩展性,但如果您可以自由更改服务器解决scheme,则可以尝试使用我们的服务器: Monaserver 。
它允许可伸缩性,并支持其他协议本地(如RTMFP)。
在这里有3个服务器的可伸缩性configuration示例: http : //www.monaserver.ovh/scalability.html#exchange-data-and-resources当服务器有400个以上的用户时,这个示例redirect新的订阅。 如果您确实喜欢使用CPU利用率,则可以更改以下行:
if _nextServer and _subscribers>=400 then error(_nextServer.host) end
与:
if _nextServer and cpu>80 then error(_nextServer.host) end
那么你可以自由地find获取CPU负载(参数cpu )的最佳途径。 如果您需要调用c ++代码,请查看FFI库(您可以将c ++代码embedded到lua脚本中,而无需包含任何其他库/插件)
如果您需要帮助,可以在论坛上与我们联系。
我希望它会帮助你!