2

私は、イベント ドリブン アーキテクチャ (基本的な pub/sub) となるシステムの設計の初期段階にいます。実際のツールとフレームワークはまだ選択されていないため、この質問はテクノロジ固有というよりも概念的なものです (.Net で行われますが)。

この状況のほぼ完璧な類推は、金融取引システムです。市場データを常に受信しているサーバーを想像してみてください (リアルタイムまたは間隔で、問題ではありません)。サーバーは、特定の証券の価格の更新を公開します。この質問の目的のために、サーバーが「監視」して公開している証券が 1000 あるとします。

このサービスのサブスクライバーである 100 のクライアント アプリケーションがあります。各クライアントは、公開されている証券の小さなサブセットのみに関心があります。

クライアントが 1000 の証券すべてのメッセージを受信した場合、それらを解析する必要があります。これにより、ネットワーク トラフィックが増加し、クライアントの負荷が増加することは明らかです。

一方、サーバー側でメッセージ コンテンツを解析する必要があると、パブリッシュ/ルーティング時に負荷がかかるように見えます。

このタイプのアーキテクチャでは、これは通常どのように処理されますか?

4

4 に答える 4

2

RabbitMQ が提供するチュートリアルのいくつかを見てみましょう

リンク

ルーティングとトピックを使用して、該当するクライアントにメッセージを配信できることに特に注意してください。ここでの「サーバー」は単にメッセージをキューにドロップし、クライアントはサブスクライブしたルーティング/トピックに基づいて特定のメッセージをリッスンするだけです。おそらく他にも多くのオプションがありますが、これはRabbitMQ にはいくつかの .Net クライアントがあり、私は彼らの製品に非常に満足しています。

IBM MQ と MSMQ も使用しましたが、Rabbit の方がずっと気に入っています。主な理由は、オープン プロトコルである AMQP に基づいており、独自のドライバーの代わりに .Net、Python、Java などを使用して接続したり、JMS ですべてをラップしようとしたりするためです。決して専門家ではないので、他の人があなたの問題についてより良い洞察を持っているかもしれません.

幸運を。

于 2012-08-03T21:34:12.807 に答える
2

一般に、サーバーは重いタスクを実行できるより強力なマシンです。クライアントは情報のサブセットのみを必要とするため、私の意見では、サーバーは情報を解析し、必要な情報のみをクライアントに送信する必要があります。

于 2012-08-03T21:36:32.033 に答える
1

株価の配信はまさに、パブリッシュ/サブスクライブ アドレッシングの特許取得につながったユース ケースです。これは、JMS やその他のメッセージング テクノロジで「トピック」として知られ、愛されています (特許 EP0412232)。

この場合、サーバーはティッカー シンボルを含むサブジェクトの株価情報 (「ティック」) を公開します...一般的には、シンボルに関する階層情報を提供するサブジェクトの名前空間を使用します。たとえば、NASDAQ.TECHNOLOGY.HARDWARE.AAPL などです。

クライアントは、サブジェクト ワイルドカードを使用して、シンボルまたはシンボルのグループにサブスクライブします。pub/sub メカニズムにより、適切なサブスクライバーのみへの配布が保証されます。マルチキャスト ネットワークを使用すると、これを非常に効率的に行うことができます。

したがって、あなたの質問に答えるために、この場合、パブリッシャー (サーバー) は、メッセージを分類し、関連するトピックで公開するために必要なロジックを実行しています。サブスクライバーは、関連するメッセージを取得するために多くの作業を行う必要はありません。

于 2012-08-05T23:44:59.493 に答える
0

あなたが提供した簡単な説明から、あなたのシナリオは OMG DDS (Data Distribution Service) の実装に適しているように見えます。これは言語に依存しない仕様であり、C# API を提供するいくつかの製品が利用可能です。

非常に簡単な紹介と参考文献のリストについては、このウィキペディアのエントリを参照してください。

DDS は、強力な型指定とコンテンツ認識データバス、分散状態管理、履歴データ アクセスなど、多くの高度なデータ管理機能をサポートしています。その豊富な QoS 設定のセットにより、アプリケーションからミドルウェアへの多くの複雑さをオフロードできます。

特に、あなたが説明したコンテンツ フィルタリング要件は重要な機能です。入手可能な製品の中には、拡張性に優れ、ネットワーク上のトラフィック量とフィルターの評価に必要な CPU 負荷との間のスマートなトレードオフを持つ高度なフィルタリング メカニズムが実装されているものがあります。これらのフィルターはWHERE、a の句のように、SQL 構文で表現されますSELECT

通常、DDS の実装は拡張性が高く、本質的に分散化されています。DDS インフラストラクチャに参加しているコンポーネントは、空間的にも時間的にも分離されています。一部の DDS 製品は、多数のミッション クリティカルなシステムやビジネス クリティカルなシステムに導入されています。

興味があれば、もっと多くの情報を提供できます。私は 10 年以上 DDS を専門としてきましたが、今でも気に入っており、最も有用な技術の 1 つだと思います。

于 2012-08-03T23:49:49.640 に答える