.png)
我在用Nginx-rtmp-模組用於直播。它非常適合單台機器(AWS EC2 C3-large)上的 40-50 個攝影機。但如果我有超過 100 個串流,我該如何擴展我的伺服器以滿足要求?
我嘗試過使用 ELB,但一旦啟動新機器,它就會終止連接,並且在啟動新機器後,它會以循環方式發送傳入請求。我想要的是以下內容。
- 當系統的 CPU 使用率達到 80% 時,啟動新伺服器,但保持現有連線處於活動狀態。
- 只有當第一個伺服器的 CPU 使用率 > 80% 時,才會向新建立的伺服器發送新請求。 (無循環賽)
我怎樣才能做到這一點?感謝您的時間。
答案1
如果您願意切換到 hls (nginx-rtmp 支持 hls)根據我的經驗,它會讓你的生活比嘗試負載平衡 rtmp 本身更容易。一旦你設定了 hls 轉碼,你唯一需要的就是在你的網站伺服器前面放置一個 CDN 並讓其負責緩存,或者自己使用 varnish、squid 甚至 nginx 進行自己的轉碼(當然還有更多可能性) ) - HTTP 快取非常普遍,我相信您會找到一個簡單的解決方案。
如果您想堅持使用 rtmp,您可以設定類似的基礎架構。
擁有一台主攝取伺服器和多個邊緣節點,每個邊緣節點拉來自攝取伺服器。此設定具有相當的可擴展性,並且應該可以很好地滿足您當前的負載。
編輯:看來我誤解了你的問題:擁有一個 api 端點可能是最簡單的,你可以詢問你的網路攝影機應該流到哪個 rtmp 伺服器,而不是嘗試負載平衡。
因此,一旦您的 rtmp 伺服器到達 X 個流(請參閱 nginx-rtmp stat 模組),您就啟動一個新實例並將新流重定向到該實例。
nginx-rtmp 在 on_connect 中還具有重定向功能(還不能放置兩個以上的鏈接,只需在指令 wiki 頁面上搜索 on_connect 即可),方法是返回帶有位置的 3xx 標頭。我不確定這是否支援重定向到不同的節點,但這也值得一試 - 可以避免在選擇伺服器之前手動查詢。
答案2
我不知道 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負載的最佳方法(參數中央處理器)。如果您需要呼叫 C++ 程式碼,請查看 FFI 程式庫(您可以將 C++ 程式碼嵌入到 lua 腳本中,而不是任何其他函式庫/外掛程式)
如果您需要協助,可以在論壇上聯絡我們。
我希望它能幫助你!