我正在使用模块进行直播。它完美地工作在一台机器上的40-50台相机上(AWS EC2 C3-大型)。但是,如果我有100多个流,我如何才能缩放我的服务器以满足需求?
我试过使用ELB,但是一旦新机器启动,它就会终止连接,并且在启动新机器之后,它会以循环方式发送传入请求。我想要的是以下内容。
我怎样才能做到这一点?谢谢您抽时间见我。
发布于 2015-05-29 16:06:51
如果您愿意切换到hls (nginx支持hls),它将使您的生活-从我的经验-比尝试负载平衡rtmp本身容易。一旦您设置了hls代码转换,您唯一需要的东西就是将cdn放在您的set服务器前面,让它来处理缓存,或者自己使用清漆、鱿鱼甚至是nginx (当然还有更多的可能性)-- HTTP缓存非常广泛,我相信您会找到一个简单的解决方案。
但是,如果您想坚持使用rtmp,可以设置类似的基础结构。
有一个主服务器和多个边缘节点,这些节点是每个拉从所摄取的服务器上获取的。此设置将是相当可伸缩的,并且应该可以很好地工作在当前负载中。
编辑:似乎我误解了你的问题:它可能是最简单的有一个api端点,你可以问你的摄像头应该流向哪个rtmp服务器,而不是试图负载平衡。
因此,一旦您的rtmp服务器到达X流(请参阅nginx stat模块),您将启动一个新实例并将新流重定向到该实例。
nginx还具有on_connect中的重定向功能(还不能放置两个以上的链接,只需在指令wiki页面上搜索on_connect ),方法是返回一个带有位置的3xx头。我不确定这是否支持重定向到另一个节点,但这也值得一试--这样可以避免在选择服务器之前手动查询。
发布于 2015-05-27 08:00:19
我不知道nginx是否支持rtmp模块的可伸缩性,但是如果您可以随意更改服务器解决方案,可以尝试我们的服务器:莫纳塞尔。
它允许可伸缩性,并支持其他协议(如RTMFP)。
这里有一个带有3台服务器的可伸缩性配置示例:http://www.monaserver.ovh/scalability.html#exchange-data-and-resources --当服务器有超过400个订阅者时,此示例重定向新订阅。如果您确实更喜欢使用CPU利用率,则可以更改以下行:
if _nextServer and _subscribers>=400 then error(_nextServer.host) end
有:
if _nextServer and cpu>80 then error(_nextServer.host) end
然后,您可以自由地找到获得CPU负载的最佳方法(参数cpu)。如果您需要调用c++代码,请查看FFI库(您可以将c++代码嵌入到lua脚本中,而无需包含任何其他库/插件)
如果您需要帮助,可以在论坛上与我们联系。
我希望它能帮到你!
https://serverfault.com/questions/693981
复制相似问题