2017-01-24 7 views
-1

AWS SQSキューを実装して、バックエンドサーバとのデータベース対話を最小限に抑えようとしましたが、問題が発生しています。AWS SQSキューパフォーマンスを改善する

  • 私は1つのSQSキューからメッセージを探す消費者プロセスを1つ持っています。
  • クライアントがWebインターフェイスのボタンをクリックすると、JSONメッセージがSQSキューに配置されます。
  • アプリケーションサーバーのバックエンドジョブがSQSキューからJSONメッセージを取得し、そのメッセージをキューから削除して処理します。

機能をテストするために、私は1つのクライアントのロジックを実装しました。それは正常に動作していた。しかし、私は3つのクライアントを追加したとき、正しく動作しませんでした。 SQSキューに500個のメッセージが滞留していて、バックエンドジョブがキューから正しく読み取っていることがわかりました。

バックエンドジョブの数を増やす必要がありますか、クライアントのSQSキューの数を増やす必要がありますか。現在、すべてのクライアントが同じキューにメッセージを送信します。

必要なバックエンドジョブの数を計算するにはどうすればよいですか?また、SQSをより速く動作させるための設定はありますか?

+1

さらに詳しい情報が必要です - 私はSQSを通して何百ものメッセージを何も問題なくプッシュしました。コード/詳細が必要です。 – stdunbar

+1

「500メッセージで立ち往生しました」とはどういう意味ですか?何が正確にここで働いていないのですか?キューにメッセージを追加できないと言っていますか? SQSキューにはメッセージが格納されます。 SQSは「仕事」をしていないので、「仕事をより速く」するという意味を理解していません。このように必要なバックエンドジョブの数を計算します。キュー内のアイテムが必要なだけ速く処理されない場合は、より多くのワーカーを追加します。 –

+0

ありがとうございました。 1秒あたりに格納できるメッセージの数に制限があるのか​​疑問に思っていました。無制限のワーカースレッドを追加してチェックアウトするように見えます。 – Arav

答えて

2

メッセージをキューに格納することは良いことです。実際はキューを使用することが目的です。

バックエンドシステムが、生成された速度でメッセージを消費できない場合、キューは処理されるまでメッセージを保持するバッファとして機能します。良い例が、このAWSの再です:Building Elastic, High-Performance Systems with Amazon SQS and Amazon SNS

その後規模あなたの消費者がメッセージの生成率を一致させるために、すぐにメッセージを処理することが重要である場合は、次のキューが2億の以上のメッセージで示されたプレゼンテーションを発明します(または、より速く、バックログを消費することができます)。

あなたのプロセスは、「SQSキューからJSONメッセージを取り出し、そのメッセージをキューから削除して処理している」と記述します。ベストプラクティスは、キューからメッセージを受信して​​処理し、を削除してから(完全に処理した後)を削除することです。このようにして、プロセスが失敗すると、定義された不可視期間の後にメッセージがキューに自動的に再表示されます。これにより、アプリケーションは障害に対してより復元力があります。

+0

情報ありがとうございました。ビデオリンクを見ます。現在、クライアントが待機している場合は、消費者を増やしています。私が消費者を増やすことを示すことができるawsコンソールの期間に見られるメトリックはありますか? SWFについてもっと知りたいと思っています。私が理論的な部分を議論してきたビデオの大部分としてswfを作成する方法を、良いビデオリンクを共有することができれば幸いです。 – Arav

+0

Amazon CloudWatchには、Amazon SQSキュー内のメッセージ数に関するメトリックがあります。これらのメトリックを自動スケーリングとともに使用すると、キューが必要なサイズを超えて拡大した場合に自動的に容量を追加できます。 Amazon Simple Workflow(SWF)については、[AWS Reinvent video]を見てください。 (https://www.youtube.com/watch?v=HR3XyvHFYEg)。 –

+0

遅延応答のお詫び。どうもありがとう – Arav