質問のタイトルが良くないことはわかっています。説明させてください。
自然言語を xml に変換する大量のテキスト処理を行っています。これらのテキスト ファイルはかなり高速にアップロードされ、キューに入れられます。そこから、テキストを xml に変換し、関連する部分をデータベースにロードするためにパーサーを呼び出すバックグラウンド ワーカーに 1 つずつプルされます (ブースト スピリットを使用)。
パーサーは、これらを一度に約 100 個実行できます。バックグラウンドワーカーにレートリミッターを設定して、キューを頻繁にポーリングするだけにしているため、パフォーマンスが低下しています。http リクエストが減少し始めているため、現在、複数のバックグラウンド ワーカーをスローすることはできません。バックグラウンド ワーカーと Web サーバーが同じマシン上に存在し、CPU使用率が 80 ~ 95% に達しているためだと思いますが、その上でより多くのRAMを使用することもできます。
これをより適切にスケーリングする必要があります。あなたならどうしますか?
いくつかの質問への回答:
私たちはAmazon Webサービスを使用しているため、安価な追加のハードウェアを購入することは、新しいAmazonインスタンスを生成することとは少し異なります.負荷の量でインスタンスを自動生成するコードを誰かが実行したのでしょうか?
ファイルをキューに詰め込むだけのhttpサーバーがあるため、影響を受ける唯一の理由は、CPUが大量の解析関連のものを処理するのに忙しいためです。
パーサー自体では使用していませんが、バックグラウンド ワーカーのレートを既に制限しています。
私はまだナイスを試したことはありませんが、過去に使用したことがあります-それについていくつかのベンチマークを書き留める必要があります
パーサーは Web サーバーから完全に分離されています。Web/アプリケーション サーバーとして nginx/merb があり、バックグラウンド ワーカーとして c++ を呼び出す rake タスクがありますが、それらは同じマシン上に存在します。