ライブストリーミングに Nginx-rtmp-module を使用しています。 1台のマシン(AWS EC2 C3-large)の40〜50台のカメラで完全に機能します。しかし、100を超えるストリームがある場合、要件を満たすようにサーバーを拡張するにはどうすればよいですか?
ELBを使用してみましたが、新しいマシンが起動されると接続が終了し、新しいマシンを起動した後、ラウンドロビン方式で着信要求が送信されます。私が欲しいのは次のとおりです。
どうすればこれを達成できますか?お時間をいただきありがとうございます。
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を検索してください)。これが別のノードへのリダイレクトをサポートしているかどうかはわかりませんが、これも試してみる価値があります。サーバーを選択する前に手動でクエリを実行する必要がなくなります。