自動縮放 RTMP 直播串流 (NGINX-RTMP)

自動縮放 RTMP 直播串流 (NGINX-RTMP)

我在用Nginx-rtmp-模組用於直播。它非常適合單台機器(AWS EC2 C3-large)上的 40-50 個攝影機。但如果我有超過 100 個串流,我該如何擴展我的伺服器以滿足要求?

我嘗試過使用 ELB,但一旦啟動新機器,它就會終止連接,並且在啟動新機器後,它會以循環方式發送傳入請求。我想要的是以下內容。

  1. 當系統的 CPU 使用率達到 80% 時,啟動新伺服器,但保持現有連線處於活動狀態。
  2. 只有當第一個伺服器的 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 腳本中,而不是任何其他函式庫/外掛程式)

如果您需要協助,可以在論壇上聯絡我們。

我希望它能幫助你!

相關內容