2016-09-24 11 views
0

1日あたり10M +ジョブを処理しており、インフラストラクチャが高価になっているため、PHPベースのAWS SQSキューワーカーアーキテクチャをアップグレードしたいと考えています。10M + /日ジョブキューのワーカーのスケーリング

私たちのジョブはほとんどメモリを使用しませんが、HTTP応答が遅いために5~10秒間実行できます。

同じマシン上で数十人のワーカーを同時に実行することをサポートする言語、アプローチ、またはツールを誰も推奨することはできませんか、同時に非常に効率的に数十のジョブを同時に実行できますか?

ありがとうございます!

答えて

1

ボトルネックがHTTP要求にある場合は、node.jsの使用を検討する必要があります。非同期で実行するようにコードをプログラムするのが非常に簡単です。あなたの現在の実装では、HTTP要求がCPUスレッドをブロックしていると仮定します。これは非効率的です。なぜなら、CPUはを実行し、は完了を待ってから結果を解析することができるからです。これはnode.jsと優れたasyncライブラリではほとんど問題ありません。

非同期の実装では、プログラムのスピードを10-100倍にすることができます。特に、「HTTP要求を待っている」が実際の計算よりも多くの時間を要する場合。ナノまたはナノインスタンスの艦隊を使用すると、node.js(または一般的なjavascript)は単一のスレッド言語です。したがって、通常は複数のコアが必要ありません。

もう1つのアプローチは、SNSサービスをSQSに接続し、チケットを解析するラムダ関数を設定することです。イントロについてはAWS Lambdaのページをご覧ください。多分あなたはピーク時と低日を持っているでしょう、そして、このアプローチはより費用効果が高いはずです。負荷が均等に分散されている場合、AWS LambdaはEC2よりも高価です。

+0

ありがとうございます!この場合、誰が非同期ライブラリを使用するのか説明できますか? Node.jsのクラスタを使用して同じマシン上で複数のワーカーを起動し、そのワーカーで非同期ライブラリを使用するとします。 – Till

+1

SQSバッチAPIコールを使用してチケットのバッチを取得し、すべてのチケットで 'async.each'関数を使用できます。 HTTPリクエストが完了すると、同時にダウンロードが開始され、処理されます。 node.jsは1つのコアのみを使用するため、マイクロインスタンスを使用できます。また、マルチコアインスタンスを取得してコードの複数インスタンスを起動することもできますが、代わりに多くのシングルコアマシンを使用することをお勧めします(より詳細な制御) –

1

多くのマシンでPHP CLIベースのワーカーを30〜200個コピーした同様のシステムを実行しました。私はSupervisordでそれらを始めました。そこには、その特定のプログラムのどれくらいが起動するのかを指定する「numprocs」設定があります。このような構成グループを複数持つことができます。

コストを最適化するという点では、1台のマシンにつき1時間当たりの価格を下げるために「スポットインスタンス」を検討してください。できるだけ早く各システムを稼動させるためには、必要なすべてのインストール済みソフトウェアと設定があらかじめセットアップされていることを確認する必要があります。

+0

ありがとう!つまり、同じマシンで同時に20〜200人の作業者を実行しますか?あなたは特定の労働者を使用していますか? – Till

関連する問題