3

クライアントサーバーアプリケーションの2つのオプションから選択しています-

まず、マルチスレッド サーバーで TCP/IP (ピュア ソケット ベース) アプローチを採用し、送受信の同期を自分で管理します。

2 番目 - WebSphere MQ アプローチ (MQI) を使用します。基本的に、サーバーには 1 つの入力キューと 1 つの出力キューがあります。クライアントはサーバーの入力キューに書き込み、サーバーは応答を相関識別子などとともに出力キューに入れます。そのため、必要なキューは 2 つだけです。サーバー プログラムはマルチスレッド (スレッド プール) であり、複数のスレッドが入力キューを読み取り、書き込みます。出力キュー。

質問 - 私は 2 番目のアプローチに傾いていますが、少し疑問があります -

  1. MQI 呼び出しはスレッドセーフですか? キューに対して相互排除を使用する必要がMQGETありますか。MQPUT

  2. MQ ベースのアプローチのパフォーマンスは、ソケット ベースよりも低くなりますか。パフォーマンスとは、2 つのことを意味します。

    を。一般に、IBM MQ キューの操作は、直接ソケット接続よりも遅くなりますか?

    b. 相互排除によってロックがMQGETかかりMQPUT、メッセージ処理が遅くなりますか?

    c. 1 秒あたり約 10000 メッセージ (それぞれ約 100 バイト) の負荷を持つことを計画しています。返信は約 5 KB になります (XML メッセージ)。これは、IBM MQ ベースのアプローチの実用的な負荷ですか?

注 - 言語は C++ で、サーバーのオペレーティングシステムは Solaris です。

4

1 に答える 1

3

あなたが説明しているユースケースは非常に狭いです。これは「ソケットまたはキュー」だけのケースではありませんが、他の考慮事項をビジネス ケースに織り込む必要があります。

  1. 物事はどのように監視および管理されますか? システムの状態を NOC に報告し、メッセージの統計情報を提供するすべての部分を作成する必要がありますか? それとも、MQ が提供するものを使用できますか?
  2. キューイングが必要ですか、それとも本当に同期アプリですか?
  3. これは本当にポイント ツー ポイントなのか、それとも関連するアプリがサービスのエコシステムとアップストリーム/ダウンストリーム接続に参加しているのか? 他に何と統合する必要がありますか?
  4. メッセージのエンリッチメント、ルーティング、ファンイン、ファンアウト、pub/sub、またはその他の機能が必要ですか? コードを書くか、WMQ/WMQ Broker のネイティブ機能を使用しますか?
  5. 接続には認証が必要ですか? 暗号化?コードを書くか、WMQ ネイティブ機能を使用しますか?
  6. 関連する規制順守要因はありますか? もしそうなら、カスタム コードと COTS トランスポートの監査コストはいくらですか?
  7. ショップには C++ の深いスキルがあり、コードの存続期間中その深さのベンチを維持する準備ができていますか?
  8. 接続構成はどのように管理され、HA と DR をシームレスにサポートしますか? コードを書くか、WMQ ネイティブ機能を使用しますか?
  9. 例外ロジックと自動再接続はどのように管理されますか? コードを書くか、WMQ ネイティブ機能を使用しますか?

ビジネス ケースでは、生の速度以上のことを考慮する必要があります。これは、両方の代替手段がスループット要件を満たすことができる場合に特に当てはまります。機能要件が満たされたら、ビジネス ケースで考慮しなければならないのは、これらすべての他の側面 (および、頭の中で考えていなかったその他の側面) です。

具体的な質問については...

キューへのアクセスは、希望どおりに管理されます。複数のスレッドが同じメッセージを求めて競合しますが、あるスレッドに配信されたメッセージは別のスレッドには配信されません。例外は、メッセージがロールバックされて再び利用可能になった場合、またはアプリが pub/sub を使用してメッセージの複数のコピーを意図的に受信した場合です。

アプリ側では、呼び出しはセッション内でスレッド セーフです。したがって、すべてのスレッドが同じセッションCOMMITを一緒に使用します。通常、リクエスト/リプライを使用するスレッドのペアが協調して動作します。それ以外の場合は、スレッドごとに 1 つのセッションで必要なものが得られます。

パフォーマンスに関しては、これはリンゴとオレンジの比較です。問題は、非同期メッセージング トランスポートのすべてのサービス、診断、回復力、およびその他の機能を提供する C++ ソケット プログラムが、そのトランスポートと同等に機能するかどうかです。答えは通常ノーです。WMQ は、1 つのことを非常にうまく行うために 20 年間最適化されてきました。新しいカスタム C++ ソケット プログラムはデータをより高速に移動しますが、同じ機能は提供しません。したがって、最終的には、アプリが WMQ の機能をほとんど必要としないため、必要ないくつかの機能をカスタム コードでコーディングし、それをアプリの存続期間にわたって維持する方が長期的に安価になるかどうかにかかっています。繰り返しますが、答えは通常ノーです。

メッセージ スループット レートの詳細については、SupportPacsページに移動し、必要なプラットフォームとバージョンの MP__ で始まる名前のものを探してください。小さなメッセージで 10k MPS を達成することは、控えめなハードウェアでも可能です。

于 2013-03-12T19:34:12.350 に答える