手伝っていただけませんか?サーバーに非同期リクエストを送信するWebベースのシステムを開発しました。サーバーは db から大きなデータを取得してキャッシュします。約 5 秒かかります。次にキャッシュ内のサーバー検索を呼び出すため、約 0.05 秒かかります。初めて5秒で問題ありませんが、一度に5つ以上の非同期リクエストを送信すると、各スレッドがキャッシュを作成するため、最初は20秒以上かかります。どうすればこれを改善できますか?
2 に答える
興味深いシナリオ。ただし、情報をキャッシュする方法とコードの実行方法を指定していません。ASP.Net キャッシュ (および WCF / Web サービス) を使用している場合、このようなより複雑なシナリオはサポートされていないと思います。回避策のアイデアが必要な場合 (私が言ったように、単なるアイデアであり、以前に試したことはありません)、ステータスが「NotCached」、「Caching」、および「Cached」のフラグをキャッシュしてみてください。2 つの要求がまったく同時に行われると、並行性に問題が生じる可能性があることに注意してください。キャッシュされていない場合は、プロセスを開始し、フラグを「キャッシュ」に設定します。キャッシュしている間に、他の来るべきリクエストをどうするかを決めることができます。スレッド スリープを使用するか (お勧めしません)、データベースに移動しますが、再度キャッシュしないでください。最初のリクエストがキャッシュを完了すると、フラグを Cached に設定すると、ジョブが完了します。他のテクノロジを使用している場合は、要求をキューに入れ、キャッシュ処理中に 1 つだけを処理できる場合があります。詳細を提供すると、シナリオの分析に役立ちます。
私は以前にこれを持っていました.解決策は、すべてのリクエストを何らかのキューにマーシャリングするか、データベース/キャッシュにビジーフラグを設定して、後続のリクエストが問題に取り組んでいることを認識できるようにすることです.
したがって、最初のリクエストはビジーとしてフラグを立て、リクエストを実行します。次のリクエストは、ビジーであることを確認し、フラグがビジーとしてマークされなくなるまで待機します。これらのリクエストは、キャッシュされたコピーをプルできるはずです。