私は現在、ユーザーがアップロードしたビデオを linode サーバーにトランスコードし、s3 を使用してそれらを保存していますが、私は楽観主義者なので、トランスコーディングを Amazon EC2 に移動して、必要に応じてスケールアップし、それを使用して経験を積みたいと考えています。これまでの私のワークフローは次のとおりです。
- nginx/Rails スタックをバイパスして、動画を s3 に直接アップロードする
- ビデオ URL を使用して Amazon シンプル キュー サービスにエントリを作成する
- EC2 のインスタンスが実行されているかどうかを確認します。そうでない場合は、起動スクリプトとして単純な ruby スクリプトを使用して起動します (Amazon は 6kb 未満の起動スクリプトを許可していると思います)。
- Ruby スクリプトは単純なキューに接続し、ffmpeg コマンドを実行してビデオをトランスコードします
- スクリプトは、追加のキューがあるかどうかを確認して実行します
- キューがなくなったらインスタンスをシャットダウンします (EC インスタンスが実行されている時間の任意の部分に対して Amazon が 1 時間分の料金を請求するため、1 時間実行する可能性があります)。
明らかに、上記は基本的なものであり、EC2 を完全には使用していません。スレッドを使用してキューに接続し、同じ EC2 インスタンスで新しいジョブを実行するか、起動スクリプトが ruby スクリプトを実行する追加の EC2 インスタンスを作成することを考えました。前者では、CPU 使用率に基づいて同じ EC2 内のジョブ数を制限する必要があります。
後者は無駄に思えますが、ビデオ トランスコーディングは CPU を集中的に使用するため、2 つの ffmpeg を同時に実行するのは現実的ではありません。新しいインスタンスを作成するために Amazon の自動スケーリングについても考えましたが、Ruby を使用する方が簡単で簡単に思えます。
- 私の質問は、これを効率的に行うための最良の方法は何ですか?
- 2 つの ffmpeg を実行することは悪い習慣と見なされますか? (ビデオ サイズが平均約 200 mbs になると仮定しましょう。)
- Rubyスレッドの使用は、名前が悪いように見えるため、最適ですか?
- スレッドの代わりに EventMachine を調べる必要がありますか?
必要な場合を除き、EC2 インスタンスを実行したくありません。インスタンスを最大限に活用しますが、動画がトランスコードされるまでユーザーを長時間待たせたくありません。
この記事に基づくhttp://stream0.org/2009/10/h264-video-encoding-on-amazons.htmlhttp://stream0.org/2009/10/h264-video-encoding-on-amazons.html 高-CPU、エクストラ ラージ インスタンスが最適なオプションのようです。もちろん、私自身のテストをいくつか行う予定ですが、飛び込む前に専門家の意見を聞きたかったのです。ありがとう!
エッセイになってしまいました、長文失礼しました。