0

過去に、私はメッセージキューを使用して需要の急増を処理しました。このシステムは、ログ記録の目的を除いて、正常に機能します。レポートとログ記録のために、正常に処理されたメッセージをデータベースに書き込みます。これは、なぜ最初からメッセージをデータベースに書き込んで、メッセージキューではなく、「ワーカーロール」にデータベースをポーリングさせるのか疑問に思います。

データベースが大きくなるにつれて、処理する1つの「チェックされていない」レコードを探すためだけに巨大なデータベースをポーリングするのは非常に遅くなるので、これは最良の設計ではないと思います。 。

私は何かが足りないのですか?データベースのポーリングよりもメッセージキューを選択する他の理由はありますか?まだ処理されていないもの(キューにフロートしているもの)をユーザーが確認できるようにしたいと思いますが、その操作はデータベースでクエリを実行するよりもはるかに時間がかかるため、トレードオフのようです。

ご入力いただきありがとうございます。

4

1 に答える 1

0

頭に浮かぶもう1つの理由は、ブロック/ロックです。通常、データベースをポーリングして作業を探すだけの場合、メッセージをダイジェストするワーカーが1人だけであれば、それはかなりうまく機能します。ただし、水平方向にスケールアウトし、問題に対してより多くのワーカーをスローする場合は、通常、データベースベースの「キュー」の作業メッセージを「実行する必要がある」から「実行する」に変更すると、ロックがエスカレートすることになります。成功した」など。

メッセージキューを使用すると、すべてのスレッドセーフとロック/ブロックが邪魔にならないため、このトリッキーな処理が行われます。

于 2012-07-18T01:59:06.137 に答える