RTMP ライブ ストリームの自動スケール (NGINX-RTMP)

RTMP ライブ ストリームの自動スケール (NGINX-RTMP)

使っていますNginx-rtmp-モジュールライブストリーミング用。1 台のマシン (AWS EC2 C3-large) で 40 ~ 50 台のカメラに完璧に動作します。ただし、ストリームが 100 を超える場合、要件を満たすようにサーバーを拡張するにはどうすればよいでしょうか。

ELB の使用を試みましたが、新しいマシンが起動すると接続が終了し、新しいマシンを起動した後、着信リクエストがラウンドロビン方式で送信されます。私が欲しいのは次のことです。

  1. システムの CPU 使用率が 80% に達すると、新しいサーバーを起動しますが、既存の接続は維持されます。
  2. 最初のサーバーの CPU 使用率が 80% を超える場合にのみ、新しく作成されたサーバーに新しいリクエストを送信します (ラウンドロビンなし)

どうすればこれを実現できますか?お時間をいただきありがとうございます。

答え1

hlsに切り替える場合は(nginx-rtmp は hls をサポートします) 私の経験から言うと、rtmp 自体の負荷分散を試みるよりも、作業が簡単になります。hls トランスコーディングを設定したら、あとは、Web サーバーの前に cdn を配置してキャッシュを処理させるか、varnish、squid、または nginx を使用して自分でキャッシュを作成するだけです (もちろん、他にも可能性はあります)。HTTP キャッシュは非常に普及しているので、簡単な解決策が見つかるはずです。

ただし、rtmp を使い続ける場合は、同様のインフラストラクチャをセットアップできます。

1つのマスター取り込みサーバーと複数のエッジノードがあり、それぞれ引く取り込みサーバーから。この設定はかなりスケーラブルであり、現在の負荷に対して問題なく動作するはずです。

編集: あなたの質問を誤解していたようです。負荷分散を試みることなく、Web カメラをどの RTMP サーバーにストリーミングするかを問い合わせることができる API エンドポイントを用意するのがおそらく最も簡単でしょう。

したがって、rtmp サーバーが X ストリームに到達すると (nginx-rtmp stat モジュールを参照)、新しいインスタンスを起動して、新しいストリームをそのインスタンスにリダイレクトします。

nginx-rtmp には、on_connect にリダイレクト機能もあります (まだ 2 つ以上のリンクを配置することはできません。ディレクティブの wiki ページで on_connect を検索してください)。この機能は、Location を含む 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負荷(パラメータ)を取得するための最適な方法を自由に見つけることができます。CPU)。C++ コードを呼び出す必要がある場合は、FFI ライブラリを参照してください (他のライブラリ/プラグインを含めずに、C++ コードを Lua スクリプトに埋め込むことができます)。

サポートが必要な場合は、フォーラムでお問い合わせください。

お役に立てれば幸いです!

関連情報