1

質問のタイトルが良くないことはわかっています。説明させてください。

自然言語を xml に変換する大量のテキスト処理を行っています。これらのテキスト ファイルはかなり高速にアップロードされ、キューに入れられます。そこから、テキストを xml に変換し、関連する部分をデータベースにロードするためにパーサーを呼び出すバックグラウンド ワーカーに 1 つずつプルされます (ブースト スピリットを使用)。

パーサーは、これらを一度に約 100 個実行できます。バックグラウンドワーカーにレートリミッターを設定して、キューを頻繁にポーリングするだけにしているため、パフォーマンスが低下しています。http リクエストが減少し始めているため、現在、複数のバックグラウンド ワーカーをスローすることはできません。バックグラウンド ワーカーと Web サーバーが同じマシン上に存在し、CPU使用率が 80 ~ 95% に達しているためだと思いますが、その上でより多くのRAMを使用することもできます。

これをより適切にスケーリングする必要があります。あなたならどうしますか?

いくつかの質問への回答:

  • 私たちはAmazon Webサービスを使用しているため、安価な追加のハードウェアを購入することは、新しいAmazonインスタンスを生成することとは少し異なります.負荷の量でインスタンスを自動生成するコードを誰かが実行したのでしょうか?

  • ファイルをキューに詰め込むだけのhttpサーバーがあるため、影響を受ける唯一の理由は、CPUが大量の解析関連のものを処理するのに忙しいためです。

  • パーサー自体では使用していませんが、バックグラウンド ワーカーのレートを既に制限しています。

  • 私はまだナイスを試したことはありませんが、過去に使用したことがあります-それについていくつかのベンチマークを書き留める必要があります

  • パーサーは Web サーバーから完全に分離されています。Web/アプリケーション サーバーとして nginx/merb があり、バックグラウンド ワーカーとして c++ を呼び出す rake タスクがありますが、それらは同じマシン上に存在します。

4

10 に答える 10

8

おそらく、バックグラウンドワーカーをより低いスケジューリング優先度に配置するだけで (たとえば、niceを使用して) 役立つでしょう。これは、サーバーが必要なときにリクエストを処理できることを意味しますが、ビジー状態でないときは、テキスト処理を全力で行うことができます。

バックグラウンドワーカーを恣意的にずらすよりもはるかに多くの利益が得られると思います。

于 2008-12-21T22:35:14.047 に答える
4

安価なコンピューターを 2 台購入し、それらでテキスト処理を行います。Jeff が最新の投稿で述べているように、「常に、パフォーマンスの問題から抜け出すために、より高速なハードウェアを投入することで解決するようにしてください。」

于 2008-12-21T22:27:51.287 に答える
3

あなたの質問を正確にフォローしているかどうかはわかりませんが、保留中の作業キューにフィードする HTTP エンジンを使用しているようです。正しい?バックグラウンド スレッドがこれらのキュー リクエストを受け取り、手間のかかる作業を行っています。よろしいですか?

したがって、バックグラウンド プロセスはコンピューティング バウンドであり、フォアグラウンド プロセスは本質的に I/O バウンドのように聞こえます...または、新しい作業を送信できる速度によって最小限に制限されます。

このようなプロセスを最適化する最善の方法は、バックグラウンド プロセスの優先度をフォアグラウンド プロセスよりも低く設定することです。これにより、バックグラウンド プロセスが実行する作業を継続して行うことが保証されます。次に、プロセス間のキューの深さを設定して、サイズが一度に保留したい作業の最大量に制限されるようにします。

于 2008-12-21T22:36:52.000 に答える
1

私が行ったことの 1 つは、これが利用可能であれば、これらの解析サービスをクラウド ホスティング サービスに移行することです。

いくつかの分散サービス (検索エンジン、大量メール送信、エラー ログ) をプライマリ マシンから離れたクラウド コンピューティング サービスに移動しました。

さらに、クラウド コンピューティングはより安価に利用できるようになり、ほぼ無限に拡張できます。

于 2008-12-21T22:49:30.197 に答える
1

CPU が 100% になることを心配する理由がわかりません。ジョブを実行する必要があり、それが IO バウンドでない場合、CPUは100% になるはずです。

残っているのは次のとおりです。

  • 利用可能な時間内に、必要なすべての作業を実行するのに十分な CPU がありますか?

そうでない場合は、より多くのマシン、より高速な CPU、またはより CPU 効率の高いアルゴリズムが必要です。企業の規模にもよりますが、最初の 2 つのオプションはおそらく 3 番目のオプションよりも安価です。

  • 他の仕事よりも応答性が必要な仕事はありますか?

あるようですね。パーサー ジョブが独自のペースで完了できる一方で、HTTP サーバーの応答性を高めたいようです (キューがいっぱいになるよりも早く空になる限り)。他の人が指摘しているように、nice は、優先度の高いプロセスが必要なものを取得した後、優先度の低いプロセスに「残った」CPU サイクルを割り当てるように OS に指示します (ただし、それほど白黒ではありません)。

于 2009-01-04T12:07:06.870 に答える
0

お使いのOSはわかりませんが、ほとんどのOSにはスレッド/プロセスの優先度を指定する機能があります。パーサー プロセスの優先度が HTTP プロセスよりも低い限り、問題はありません。

于 2008-12-21T23:39:31.687 に答える
0

割り込み要求の処理に問題がある場合は、CPU バウンド タスクのナイスネスを上げてみてください。次に、HTTP サーバーの良さを下げます。基本的に、システムのスケジューラを有利に使用するようにし、すべてのタスクを同等に扱わないようにしてください。

于 2008-12-21T22:55:08.483 に答える
0

電気代/ホスティング価格を決して忘れないでください. コードのボトルネックを見つけるプロファイラーを試してください。あなたがそれをしたことがないなら、CPU消費を25-50%に減らすことができると確信しています

于 2009-04-02T19:49:38.977 に答える
0

複数のスレッドがあり、それぞれが 2 つのグループのいずれかに属していると仮定します

  • テキストファイルをダウンロードするグループA
  • テキストを xml に変換するグループ B

グループ B がスループットを制限していると思われる場合は、そのスレッドの優先度を低く設定します。十分な作業がある場合、CPU は引き続き 100% 使用されますが、ダウンロードには影響しません。

上記の仮定が正しければ、マルチコアおよびマルチ CPU マシンも使用する必要があります。パフォーマンスは、より多くの CPU で非常にうまくスケーリングされるはずです。

于 2008-12-21T22:33:23.223 に答える
0

パーサーを専用のマシンに配置します。そうすれば、Web サーバーに影響を与えません。

別のマシンの予算がない場合は、仮想化 ( Web サーバーが Ubuntu または CentOS でホストされている場合はOpenVZが優れています) を使用して、パーサーの CPU クォータを制限します。

于 2008-12-21T22:38:48.657 に答える