web-dev-qa-db-ja.com

メッセージキューと負荷分散。違いがよくわかりません

私が何かを理解するのを手伝ってください。いくつかのエンタープライズアプリケーションアーキテクチャを調べましたが、それらのいくつかがActiveMQやRabbitMQなどのメッセージキューサービスを使用していることに気付きました。私はメッセージキューサーバーが何をするかについて表面レベルの知識を持っていますが、HAProxyなどの標準的な負荷分散テクノロジーと比較して、それを使用するアプリケーションインフラストラクチャを構築することを選択する理由を本当に理解していません。

2つの本当の違いは何ですか?どちらも、キューまたはプールにサブスクライブしているノードにトラフィックやメッセージをルーティングしているようです。これらのそれぞれに長所/短所はありますか?

4
Jason Clark

Michaelが述べたように、これら2つは機能と機能が大きく異なります。

メッセージキューシステム

メッセージキューサービスの主な機能は、アプリケーションのさまざまな部分間の非同期通信を許可することです。 MQサーバーでは通常、メッセージがアプリケーションの一部によって公開され、アプリケーションの他の部分によってサブスクライブされる、任意の数のルーティングルールやキューなどを構成できます。

たとえば、ビデオトランスコーディングアプリケーションを考えてみましょう。必要な基本機能は次のとおりです。

  1. ユーザーがビデオファイルをアップロードする
  2. システムはビデオを別の形式にトランスコードします
  3. システムは、トランスコードされたビデオをダウンロードできるようにします

手順1が完了した後、トランスコーディングが行われている間、ユーザーのブラウザセッションを45分間ハングさせますか?いいえ、そうは思わないでください。したがって、トランスコーディングを同期的に実行する代わりに、実行する必要のあるメッセージをメッセージキューにダンプします。次に、このメッセージはアプリのバックエンド処理部分によって取得されます。この部分はトランスコーディングを実行し、完了すると「完了しました」と公開します。別のキューへのメッセージ。これにより、アプリケーションの3番目の部分がトリガーされ、ジョブが完了したことをユーザーに電子メールで送信します。

MQシステムは、アプリケーションの異なる部分を分離することに加えて、ジョブがキューに入れられるようにします。ハードウェアでは30分ごとに1つのビデオしか処理できないが、負荷のピーク時には、ユーザーはそれ以上のビデオをアップロードするとします。 MQを使用すると、これらのジョブを適切にキューに入れ、バックエンドで処理できるように順番に処理できます。

負荷分散システム

負荷分散の主な機能は、クライアントからの着信要求を処理し、それらの要求を1つ以上のバックエンドアプリケーションサーバーに分散することです。

結論

別の言い方をすれば、メッセージキューイングサービスは非同期異なるアプリケーションパーツ間の通信に焦点を合わせ、負荷分散サービスは同期クライアントと1つ以上のプール間の通信に焦点を合わせますバックエンドサーバー。

13
EEAA