web-dev-qa-db-ja.com

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

ライブストリーミングに Nginx-rtmp-module を使用しています。 1台のマシン(AWS EC2 C3-large)の40〜50台のカメラで完全に機能します。しかし、100を超えるストリームがある場合、要件を満たすようにサーバーを拡張するにはどうすればよいですか?

ELBを使用してみましたが、新しいマシンが起動されると接続が終了し、新しいマシンを起動した後、ラウンドロビン方式で着信要求が送信されます。私が欲しいのは次のとおりです。

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

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

1
Junaid

Hlsに切り替えても構わないと思っている場合( nginx-rtmpはhlsをサポートしています )、rtmp自体の負荷を分散しようとするよりも、私の経験から、あなたの人生が楽になります。 hlsトランスコーディングを設定したら、ウェブサーバーの前にcdnを配置してキャッシュを処理するか、ニス、イカ、さらにはnginxを使用して自分でロールするだけです(もちろん、もっと多くの可能性があります) )-HTTPキャッシングは非常に普及しているので、簡単な解決策が見つかると確信しています。

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

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

編集:私はあなたの質問を誤解したようです:負荷分散を試みる代わりに、ウェブカメラがどのrtmpサーバーにストリーミングするかを尋ねることができるAPIエンドポイントを持つのがおそらく最も簡単でしょう。

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

nginx-rtmpには、場所を含む3xxヘッダーを返すことにより、on_connectにリダイレクト機能もあります(まだ3つ以上のリンクを配置することはできません。ディレクティブのwikiページでon_connectを検索してください)。これが別のノードへのリダイレクトをサポートしているかどうかはわかりませんが、これも試してみる価値があります。サーバーを選択する前に手動でクエリを実行する必要がなくなります。

1
imer