3

毎秒 40,000 件のメッセージを処理できるシステムを構築する必要があります。ソフトウェアまたはハードウェアの障害が発生した場合でも、メッセージが失われることはありません。

各メッセージのサイズは約 2 ~ 4Kb です。

メッセージの処理は、メッセージの検証、単純な算術計算の実行、結果のデータベースへの保存、(場合によっては) 他のシステムへの通知の送信で構成されます。

望ましいソフトウェア技術は .Net です。

そのようなタスクに最も適したソフトウェアとハ​​ードウェアのパターンは何ですか?

どのくらいのハードウェアが必要ですか?

4

6 に答える 6

9
  1. メッセージ キューイング。あなたのプロセス フローは、その主要なターゲットのように思えます。
  2. クラスタリング / 負荷分散。
  3. コードを合理化する

最初に行うことは、通知をキューに入れることです。次に、値を返す必要のないすべてのデータベース書き込みをキューに入れます。次に、スケールアウトを検討します。

その他の考慮事項: * 必要以上に舞台裏で多くの作業を行う大きくて不格好なフレームワークは避けてください。* 可能な限りキャッシュ変数と静的変数を使用してください。

1 秒あたり 40,000 メッセージは実行可能ですが、IO をミックスに追加すると、大量のメモリを備えた超高速ハードウェアであっても予測不能になる可能性があります。できる限り帯域外処理を行うようにしてください。それが失敗した場合は、(マルチコアまたはマルチプロセスのマシンで) 複数のスレッドを実行できるかどうかを確認し、必要に応じてクラスター内の複数のサーバーを調べます。

編集:

このようなシナリオでの負荷テストの利点はいくら強調してもしすぎることはありません。簡単なプロトタイプを作成して負荷テストを行います。希望する結果が得られるまでプロトタイプを改良します。次に、プロトタイプに基づいて最終的なソリューションを設計します。目的のパフォーマンス レベルをテストするまでは、解決策を推測しています。

于 2009-05-17T07:46:24.390 に答える
3

4k * 40.000/s = 160MB/s はかなりの帯域幅です。

メッセージ損失がないという要件は、すべての通信相手が両方向で送受信することを意味するため、おそらく両方向にその帯域幅が必要です。

その数値をネットワーク カードの平均スループットまたはハード ディスクの書き込み速度で割ると、これが高度な並列性と冗長性を備えたシステムになることがわかります。

また、必要なハードウェアの見積もりを得るために、データベース操作と各メッセージの計算をベンチマークし、40.000 (または、1 日で 35 億) を掛ける必要があります。

.Net 要件は、あなたの問題の中で最も少ないと思います。

于 2009-05-17T07:55:19.967 に答える
2

MSMQを使用してメッセージを回復可能としてマークする場合は、メッセージをキューから確実に削除するように十分に注意してください。そのプロセスを可能な限りフェイルセーフにします。何か問題が発生した場合、メッセージが非常に速く蓄積され、ドライブがほんの一瞬でいっぱいになり、システムがクラッシュする可能性があるためです。その後、すべての着信メッセージが失われます。どうやって知っているのか聞いてください。(私はそれを作成しませんでした、私はそれをサポートする必要がありました。楽しくありません。)

メッセージをC:以外のドライブに永続化するようにMSMQに指示する方法を理解したことはありませんが、それは必要です。少なくともそうすれば、システムは問題があることを通知できるようになります。

前述のように、ディスクとデータベースがボトルネックになります。特にトリガーなどを回避する場合、MSMQはそのボリュームを処理できると思います。

IBMのMQは、おそらくこのタスクにより適しています。

于 2009-05-17T13:06:44.477 に答える
2

私が最初にすることは、あなたの要件が何を意味するのかを正確に見つけようとすることです. 「ソフトウェアまたはハードウェアの障害が発生した場合にメッセージが失われることはありません」は不可能です。5000 の異なる場所にある 5000 の異なるディスクにメッセージを書き込むとします。これらのディスクすべてに同時に障害が発生すると、やむを得ずデータが失われます。

同様に、どこかにバグがあると、データが失われる可能性がありますシステムのどこかにバグがあっても常に機能するソリューションを設計できるという考えは不可能です。

本当に必要な冗長性と信頼性のレベルを決定したら、それを支援することがより実現可能になります。また、そのレベルの信頼性に達したという自信を持つことも容易になります。

于 2009-05-17T07:43:20.323 に答える
2

Microsoft スタックを使用している場合は、ほぼ確実に MSMQ (Microsoft Message Queueing) を使用する必要があります。信頼性やパフォーマンスのために構成できる多くのオプションがあります。MSMQ FAQをご覧ください。

ボトルネックは処理ではなく、ディスク I/O です。大量の RAM を用意し、メモリ内でできるだけ多くのことを行います。

MSMQ はメモリ内でそのキューを管理しますが、ハードウェアに障害が発生すると、メモリ内のすべてが失われます。メッセージを回復可能としてマークすると、メッセージはディスクに書き込まれますが、簡単にボトルネックに陥る可能性があります。

于 2009-05-17T08:25:03.267 に答える
1

私のアドバイスは、すでに同様のシステムを構築した人を雇うことです。彼らにアーキテクチャと開発ツールを選ばせましょう。このような高いトランザクション率に対処するには、ハードウェアとソフトウェアの専門知識が必要であり、そのような知識を得る最も安価な方法は、お金を払うことです。

于 2009-05-17T09:06:09.890 に答える