2011-01-11 6 views
2

非常に短い質問です。ハイパフォーマンスアプリケーション:データを保存するには? Perl、Ajax、一度にたくさんのリクエスト

私は1つのウェブサイト要求に対して〜4-16のAJAXリクエストを偽造するウェブサイトを持っています。それはメタ検索です。これらのAJAXリクエストの結果を記録したいと思います。

これを行うにはどうすればよいでしょうか?私が考えている

一部

  • A)デシベル - おそらく 複数のスクリプトを実行 - 、あまり良くないサーバーへ の接続は、時間の
  • b)のテキストファイルをたくさん がかかるためサーバ上で (例えば、16個のプロセスが同じ 時間で実行されている場合)、テキストファイルが壊れる可能性があります。それは を植え付けることができますが、 で十分ですか?
  • c)テキストファイル - 1つは perlプロセスです。しかし、それは 要求ごとに16ファイルを作成し、 には、 のように1000リクエストだけがある場合、それはまだ 日あたり16kファイルを意味します。

何が最善の方法でしょうか?

短い要約:これらのスクリプトの Ajaxの要求 - > 16のPerlスクリプトラン>結果は

+0

あなたはそれを「非常に短い」と呼んでいますか? LOL ...それは良い質問ですが、+1。 – DVK

答えて

3

を保存する必要がありますが、高性能のアプリケーションが必要な場合は、良い方法は、FastCGIのようないくつかの永続的な環境を使用することです。このようにして、レスポンスするプロセスはほとんどありません。データベースのアプローチでは、これにより接続を開いたままにすることができ、このオプションがかなり高速になります。

ファイルベースのオプションの場合、ロックが必要です。コンフィグレーションで設定

use Log::Log4perl qw(:easy); 

Log::Log4perl->init(\ qq{ 
    log4perl.logger    = DEBUG, A1 
    log4perl.appender.A1   = Log::Dispatch::File::Locked 
    log4perl.appender.A1.filename = requests.log 
    log4perl.appender.A1.mode  = append 
    log4perl.appender.A1.close_after_write = 1 
}); 

... 
DEBUG "A message into log"; 
... 

お知らせLog::Dispatch::File::Lockedclose_after_writeオプション:私はこのようなモードをロックしてログイン:: Log4perlを使用しています。

+0

ありがとうございます。残念ながら、私はfastcgiを使用することはできません。だから、私は植え付けの解決策に固執し、もう一度感謝します! – Scoox

1

もっと良い解決策は、Apacheの場合はmod_perlで、Apache :: DBIの場合は永続的なDB接続を与えます。

もしfastcgiを使わなければならない場合は、自分のために$ dbh "グローバル"を作成する必要があります。

Log4Perlは常に良いログバックエンドです(使用してください)。ただし、厳密な順序が必要な場合を除いて、バイナリモードではなく追加モードでファイルを開く限り、ロックは必要ありません。 IOバッファは、ランダムな順序で書き込まれますが、同時には書き込まれません。

待つ必要があり、常にオープン/クローズ、および他のプロセスへのIOバッファをフラッシュに力をperlのだろうロックを使用 - WICHは良いアイデアスピード賢明ではないかもしれ通常のケースでは

を(ただし知りません)ファイル内の何かを変更する場合にのみロックが必要です。

1

あなたはmod_perlとApacheを使用できないと言ったので、別のオプションがあります。

ログメッセージ(Webサーバーの外部)を処理するサーバーを作成します。

その後、16個のPerlスクリプトがそれぞれのサーバーに接続します(理想的には、サーバーが待機するTCPポート上にありますが、並行性に注意する場合は他の形式のIPCも可能です)。

次に、ログをとる必要のある各スクリプトは、そのログサーバーに接続して(理想的にはTCPポート上に)、ログにテキストを送信し、16個のスクリプトのうちどれがログに記録されるかを指定します)。

このようにして、各要求を処理するときに、ログサーバーは統一ログを作成し、何か(DBへの書き込み、単一ファイルへの書き込み)を行います。あなたのボリュームを考えると、それは十分速くなければなりません。

関連する問題