57

MOM(メッセージ指向ミドルウェア)はどのような問題を解決しますか?スケーラビリティ?統合?

それらはどのドメインで通常使用され、どのドメインで通常使用されませんか?

たとえば、Googleはそのようなソリューションをメインの検索エンジンに使用しているのでしょうか、それともGMailを強化するために使用しているのでしょうか。

Walmart、eBay、FedEx(ほとんどJavaショップ)やbuy.com(ほとんどMSショップ)のような大きなウェブサイトはどうですか?MOMはそこでのニーズを解決しますか?

サーバーサイドを制御し、同種の環境(たとえば、すべてLinux + Java JVMを実行している数十のAmazonEC2インスタンス)があり、クライアントがWebブラウザーであるWebアプリを作成する場合、意味がありますか?

サーバーと通信する必要があるデスクトップアプリにとって意味がありますか?

それとも、何らかの方法で通信する必要のある無数の異なるシステムが幸せに混ざり合っている大企業向けのものだけですか?

それらが何に役立つのかについて少し混乱しています。それらが適切な場所と適切でない場所の例を使用すると、それらの使用法をよりよく理解できたと思います。

4

4 に答える 4

33

これは素晴らしい質問です。

メッセージングの主な用途: スケーリング、作業のオフロード、統合、監視、イベント処理、ルーティング、ネットワーキング、プッシュ、モビリティ、バッファリング、キューイング、タスク共有、アラート、管理、ロギング、バッチ、データ配信、pubsub、マルチキャスト、監査、スケジューリングなど。基本的に: データは必要だがデータベース要求を行いたくないもの。(キャッシングは別の長い話です)。

別の見方をすると、多くのアプリケーションは、ユーザー (人) がデータベース上でトランザクション (読み取り、書き込みを含む) を実行することによって実現されるアクションを実行することを想定して構築されていたことに気付くでしょう。しかし今日、多くのアクションはユーザーが開始するものではありません。代わりに、アプリケーションによって開始されます。たとえば、「購入したい本の在庫がいつになったら教えてください」。このクラスの問題を解決する最善の方法は、何らかのメッセージングを使用することです。それをミドルウェア、Web プッシュ、またはリアルタイム サラダ ドレッシングと呼ぶかどうかは問題ではありません。すべてメッセージです。

アプリケーションがイベントを開始したり、イベントに反応したりできるようにすると、アーキテクチャは疎結合コンポーネントに基づくことができるため、スケーリングがはるかに簡単になります。メッセージングが、できればオープン スタンダードの API とプロトコルを使用する、安定したスケーラブルでサービス可能なツールに基づいている場合、これらのコンポーネントの統合もはるかに簡単です。

これが役立つことを願っています。メッセージングに関する便利なリンクのリストをここに維持するように努めています。

これについての質問やコメントがあれば連絡してください。私たちは簡単に見つけることができます。

于 2010-03-15T09:20:19.977 に答える
14

特定の質問に対処するには:

それらは通常どのドメインで使用され、どのドメインで通常使用されませんか?

データベースと同様に、メッセージング システムはあらゆる場所で発生します。

たとえば、Google はそのようなソリューションをメインの検索エンジンや GMail の強化に使用していますか?

Google は多くの独自技術を使用していますが、彼らのオープン ソースへの貢献と既知のユース ケースの多くは、メッセージングが一部の主要サービスの中心である (またはそうあるべきである) ことを示唆しています。

Walmart、eBay、FedEx (ほとんど Java ショップ)、buy.com (ほとんど MS ショップ) などの大きな Web サイトはどうですか? MOM はそこでのニーズを解決しますか?

まさにその通り。

ユース ケースの例として、Web ページ リクエストのスケーリングがあります。ユーザーが Web 要求を行うと、Web サーバーはそれをバックグラウンド処理のためにキューに入れます。これは、リクエストが処理されている間、Web サーバーが動作し続けることができることを意味します。また、Web サーバーはリクエストがどのように処理されるかを知る必要がなく、主要部分が「分離」されているため、システムのメンテナンス、アップグレード、およびロールバックがはるかに簡単になります。

とにかく、Web リクエストはバックエンド サービスによって処理されるか、または多くのサービスによって処理されます。結果は別のキューに入れられ、Web サーバーによる収集とユーザー応答の準備が整います。通常、システムには約 100 ミリ秒のタイムアウトが含まれているため、遅延したリクエストは破棄されます。ユーザーは、時間間隔内に処理されたものをすべて見ることができます。これが、一部の大規模な e コマース サイトにページが段階的に読み込まれるように見える理由の 1 つです。

他にもたくさんの使用例があります...

サーバー側を制御し、そこに同種の環境 (たとえば、すべて Linux + Java JVM を実行する数十の Amazon EC2 インスタンス) があり、クライアントが Web ブラウザーである Webapp を作成しているとき、それは意味がありますか?

絶対。ユーザー数、サーバー側のインスタンス数、およびアプリケーションのレイテンシーが不明または無制限の場合、ノンブロッキング RPC のスケーラブルな基盤としてだけであっても、メッセージングを使用することは理にかなっています。

サーバーと通信する必要があるデスクトップ アプリにとって、それは理にかなっていますか?

多くの場合。非常に一般的なケースの 1 つは、サーバーがイベントをデスクトップ アプリにプッシュする場合です。たとえば、ゲーム イベント、ツイート、金融の価格フィード、システム アラートなどです。

それとも、何らかの方法で通信する必要がある無数の異なるシステムが正常に混在している大企業向けのものだけですか?

これらの「レガシー統合」のケースだけでなく、それらも重要です。RabbitMQ では、純粋な規模またはメッセージ量の点で最大の顧客は、クラウド プロバイダーと大手 Web アプリケーション プロバイダーです。

于 2010-03-15T09:45:52.187 に答える
6

これまでの経験から、答えは 1 つだけです。ここで大企業が採用しているこのミドルウェアを見てください。ミドルウェアには 1 つの目的があります。相互にやり取りしてビジネスプロセスを合理化できます-私が経験したように、Enteraは、Cで書かれたプロセスを使用するUNIXボックスが作成されたフロントエンドを介してメインフレームシステム(DB2、COBOL)とやり取りする中間層を作成しますPowerBuilder で (会社の名前を挙げているわけではありません!)。

私が与えた説明から、Entera は多くのものをホストするミドルウェアです - エンディアン形式に関係なくデータの流れをスムーズに統合し、異なる言語がミドルウェア ブローカーと対話する機能 (ブローカーはCORBAまたはDCEのようなプロセスで、'The Open Group) に準拠し、特定のポートをリッスンし、IDLによって指定されます。これにより、プロセスがローカルに見えるようになります。Microsoft の .NET Framework でのリモート処理で使用される用語を理解していれば、それほど的外れではありません。ミドルウェアは、コンパイル時にリンクされるスタブを生成し、プロセスの作成、ポートからのホスト、実行時のマルチスレッド、および最新のフロントエンド (.NET、Java など) を管理します。 、PowerBuilder でさえ、言葉では言い表せない VB6...OK...VB.NET でさえ、特定の IP アドレスで指定されたポートへの接続を開くことで対話でき、生成されたスタブを使用して直接対話できます。

明らかに、説明したことから、レガシー システムに新しい命が吹き込まれ、プロセスのスケーラビリティがどのように実現されるかがわかります。これの主な欠点は、数千ドルにも及ぶコスト要因です。請求/請求のバックエンド処理システムとしてメインフレームを使用し、莫大な収益を上げている大企業は、明らかにそのような高価な製品を購入する余裕があります。ビジネス プロセスを長引かせ、それに新しい命を吹き込むミドルウェアを使用することで、ビジネスに付けられた「レガシー」タグを気にすることなく、将来にわたってビジネスをかなりの年数延長することができます。

ちなみに、私はこれを学士号の論文の一部として実行しました。この商用フロントエンドをカバーする情報システムで。FreeDCEと呼ばれる sourceforge で利用可能なミドルウェアのオープン ソース バージョンがありましたが、開発努力は衰退または中止されました。

編集: @cocotwo: それはまさにミドルウェアが配管ツールであると言ったように...メッセージ指向のミドルウェアは私の知る限りでは聞いていません。フロントエンドのアプリケーション ドメイン内でローカルに表示されているかのように、簡単に操作できます。

メッセージを使用すると、ネットワークの切断が発生した場合にメッセージが安全な保持領域にキューに入れられるという点で、RPC 呼び出しよりも利点があります。フロントエンドが問題なく続行できるように、その側面内でデータのキャッシュが行われている可能性があります。 ...「特定の請求/請求書番号のステータスを更新する」場合に役立ちます-ミドルウェアを介したバックエンドへの一方向の書き込みデータ。

わかりました。大企業は高度なシステム インフラストラクチャを備えており、技術者が 24 時間体制でデータ フローのスムーズな配信を保証する必要があるため、それを考慮に入れる必要があります。小数点以下 6 ナインで最大稼働率 99% を確保するために...ホットスワップ/バランス クラスター/ミラーリング システムを配置して...

一方、RPC では、切断が発生した場合、フロントエンドを再起動するか、切断イベントを処理する必要があります。メッセージキューイングミドルウェアが各メッセージをリアルタイムで処理し、結果をすぐにフロントエンドに返すかどうかによって異なります...

これは、それぞれ (メッセージ キューイングと RPC 関連のミドルウェア) に長所と短所があります...また、サポート、最大稼働時間、開発作業、トレーニングなどのコスト削減要因もあります。ウェアは本当に独占的であり (「The Open Group」のレイアウト/標準に従っているにもかかわらず)、セットアップが複雑で、スクリプトを介して全体を接着する必要があります。

于 2010-03-05T17:31:26.260 に答える
5

ここで良い答えと議論。私たちのコンサルティングチームは、RabittMQ と高速 RPC ミドルウェアである NXTera (上記の Entera の現代版) という 2 つの「メッセージング」ソリューションを推奨しています。私のパートナーと私は、RabittMQ を使用していくつかのソリューションを開発しました。これは、現在その分野で利用できる最高のツールです。また、たまたまNXTera/Enteraを作っている会社に勤めています。

経験上、これらの製品はどちらも、前述の信頼性と低メンテナンスのニーズを満たしているとはっきり言えます。RabittMQ のようなメッセージング サービスが適切な選択である場合があります。パブリッシュとサブスクライブ、認証済み配信、キューイング、またはストア アンド フォワードが必要な場合です。

それ以外の場合、RPC (リモート プロシージャ コール) は、エンタープライズまたはクラウドベースのアプリケーションのトランザクションおよび分散処理に最適かつ最速のソリューションです。RPC を使用するのは正しいが、SOAP/.NET (はい、これらは RPC 実装です) が遅すぎたり、高価であったり、複雑すぎたりする場合は、NXTera/Entera のような軽量で高速な RPC ミドルウェアが適切な選択です。

RPC ミドルウェアとメッセージ指向ミドルウェアの間にはいくつかのユース ケースが重複しており、どちらもうまく使用できる場合があります。しかし、どちらも強力で信頼できる選択肢です。

私が一緒に働いている大企業では、RPC と MoM の両方を併用しています。インターネット企業に関する限り、Google (Protocol Buffers) と Facebook (Thrift) は、RPC が最新の Web およびクラウドベースの開発で果たす役割があることを示しています。

于 2010-06-28T20:06:33.930 に答える