5

大きな MP3 ファイルの固定在庫の小さな任意のセグメントを提供する Web サービスがあります。MP3 ファイルは、Python アプリケーションによってオンザフライで生成されます。モデルは、必要なセグメントを指定して URL に GET 要求を行い、audio/mpeg応答でストリームを取得することです。これは高価なプロセスです。

フロントエンドのリクエスト ハンドラとして Nginx を使用しています。Nginx は、一般的なリクエストに対するレスポンスのキャッシュを処理します。

最初に、バックエンドで Tornado を使用して Nginx からのリクエストを処理しようとしました。ご想像のとおり、MP3 操作のブロックにより、Tornado は本来の機能 (非同期 I/O) を実行できませんでした。そのため、マルチスレッド化を行った結果、ブロックの問題が解決され、非常に優れたパフォーマンスを発揮しました。ただし、まだ診断や再現ができていない微妙な競合状態 (実際の負荷の下) が発生しました。競合状態により、MP3 出力が破損します。

そこで、アプリケーションを単純な WSGI ハンドラとして Apache/mod_wsgi の背後に設定することにしました (まだ Nginx を前に置いています)。これにより、ブロッキングの問題と競合状態が解消されますが、実際の条件下ではサーバー上にカスケード負荷 (つまり、Apache が作成するプロセスが多すぎる) が発生します。現在、Apache/mod_wsgi の調整に取り組んでいますが、まだ試行錯誤の段階です。(更新: Tornado に戻しました。以下を参照してください。)

最後に、質問があります。何か足りないものはありますか? HTTP 経由で CPU コストの高いリソースを提供するより良い方法はありますか?

更新: Graham の情報に基づいた記事のおかげで、これは Apache のチューニングの問題であると確信しています。その間、Tornado の使用に戻り、データ破損の問題を解決しようとしています。

すぐに問題に対処した人にとっては、Tornado と少しのマルチスレッド (スレッドによって導入されたデータの整合性の問題にもかかわらず) は、小さな (シングル コア) Amazon EC2 インスタンスで許容できる負荷を処理します。

4

5 に答える 5

2

スポーンを試しましたか?これは、柔軟なスレッド化モードを備えた WSGI サーバーです。

于 2009-12-18T18:18:12.880 に答える
1

AJAX通知メソッドを使用したキューイングシステムを検討することもできます。

高価なリソースに対するリクエストがあり、そのリソースを生成する必要がある場合は常に、そのリクエストをキューに追加します(まだ存在しない場合)。そのキューイング操作は、ステータスを取得するためにクエリできるオブジェクトのIDを返す必要があります。

次に、ワーカースレッドを起動するバックグラウンドサービスを作成する必要があります。これらのワーカーは、要求をデキューし、データを生成してから、データの場所を要求オブジェクトに保存するだけです。

Webページは、サーバーに対してAJAX呼び出しを行って、生成の進行状況を確認し、ファイルが利用可能になったらファイルへのリンクを提供できます。

これがLARGEメディアサイトの仕組みです。特にビデオを扱う必要があるサイトです。ただし、MP3の作業にはやり過ぎかもしれません。

または、負荷を分散するために2台のマシンを実行することを検討してください。Apacheのスレッドは引き続きブロックされますが、少なくともWebサーバーのリソースを消費することはありません。

于 2009-12-18T17:46:05.680 に答える
1

Apache/mod_wsgi の組み込みモードの使用を間違えていませんか? 読んだ:

http://blog.dscpl.com.au/2009/03/load-spikes-and-excessive-memory-usage.html

Apache/mod_wsgi を使用する場合は、必ずデーモン モードを使用してください。

于 2009-12-20T04:51:15.770 に答える
1

一般的な意味はありませんので、「カスケード ロード」と定義してください。

最も可能性の高い問題は、あまりにも多くの Apache プロセスを実行している場合です。

このような負荷の場合、prefork mpm を使用していることを確認し、適切な数のプロセス (CPU あたり 1 つ以上、2 つ以下) に制限していることを確認してください。

于 2009-12-20T22:48:36.053 に答える
0

CPU パワーが不足しているだけです。これらの MP3 を生成するプロセスで CPU に負荷がかかっていると判断できますか?

次にやらなければならないことは、他のマシンで MP3 をレンダリングするためのハードウェアを追加することだと思います。または、事前にレンダリングされた MP3 を配信する方法を見つけます (メディアの一部をキャッシュできますか?)

ところで、Web のスケーリングは、今年の PyCon Brasil に関する Jacob Kaplan-Moss による基調講演のテーマであり、クローズドな問題ではありません。処理する必要がある技術のスタックは非常に印象的です - (プレゼンテーションのオンライン コピーは見つかりませんでしたが、申し訳ありません)。

于 2009-12-18T17:50:19.023 に答える