年間を通じて非常に多くのトラフィックが発生することが予想される Web サイト アプリケーションがあります。私たちは現在、忙しい時期にユーザーを「保留中」のページにリダイレクトするサードパーティ製の負荷分散ソフトウェアを使用しており、大量のリクエストが殺到してウェブ アプリケーション サーバーが窒息するのを防いでいます。
今後は、このプロセスをより細かく制御し、何らかの仮想キューを実装したいと考えています。現在のロード バランサーにはキューイング機能はなく、レート制限に基づいてトラフィックを通過させるだけです。これはランダムで、ページを更新したとき (または自動更新されたとき) に運がいいです。
これについてオンラインで読んだことがありますが、非常に基本的な仮想 HTTP 要求キューを実装する方法に関する実装の詳細はほとんど見つかりませんでした。もちろん、 queue-itやNetpreceptなどの本格的なサービスとしてこれを提供している会社もありますが、これらは現在のニーズに対して過剰に思えます (そして非常に高価です)。
問題の Web アプリケーションは、ASP.Net MVC で記述されています。現時点では「キューの優先度」などの高度な機能は必要ないことを念頭に置いて、静的キュー マネージャー クラスなどを使用して非常に基本的な概念実証を作成しましたConcurrentQueue<T>
が、これが有効でスケーラブルなアプローチですか? これは、メインのアプリケーション層の一部になり得るものですか? それとも別々に保管するべきですか?この種の機能を ASP.Net MVC アプリに実装する方法に関する技術的なノウハウを持っている人はいますか?
編集:これまでの回答に感謝します。答えのほとんどは、キャッシングについて非常に詳細に説明されているようです。これは、ASP.Net Web キャッシング、ロード バランサー レベルでのフル ページ リクエストのキャッシング、および AppFabric を使用したオブジェクト キャッシングを使用して、当社の Web サイトですでに (非常に) 頻繁に採用されています。
キューを管理できる理由は、プロセスが非常にデータベース書き込み負荷が高いためです。特定の製品の注文をウェブサイト経由で効果的に作成しています。これは、これらの DB トランザクションが直前の在庫チェックなどを考慮していることを意味します。これがパフォーマンスの問題が発生する場所であり、何らかのキューイング システムを実装したい理由です。
データベース サーバーにより多くのリソースを投入することは、現実的なオプションではありません。この性質のキューイングシステム(C#またはその他)の技術的な実装の詳細を本当に探しています。これが最初に明確にされていなかった場合は申し訳ありません。