2

私はASP.NET Webサイトを実行しています。サーバーはデータベースへのデータの読み取りと書き込みの両方を行いますが、頻繁にアクセスされるデータをキャッシュとしてプロセスメモリに直接保存します。新しいリクエストが来ると、DB に書き込まれる前に、キャッシュ内のデータに応じて処理されます。

私のホスティング プロバイダーは突然、サーバーをロード バランサーの下に置くことにしました。これは、複数のサーバーがランダムにリクエストを処理するため、私のキャッシュ システムが不安定になることを意味します。そのため、パフォーマンスを低下させるためだけに、アプリケーションの大部分を書き直す必要があります。これは、メモリ変数チェックで超高速ではなく、データベースにクエリを実行する必要があるためです。

まず、私の経験では DB クエリがボトルネックであることがほとんどであるため、iis サーバーに負荷を分散するポイントが実際にはわかりません。現在、DB はさらに多くの負荷をかける必要があります。第 2 に、ホスティング プロバイダーがすべてのクライアントに対して設定し、すべてのアプリケーションがクライアントに合わせて作成されることを期待するだけでなく、慎重な計画が必要になるようです。

この種のことは一般的ですか、それともそもそもプロセスメモリをキャッシュとして使用するのは愚かでしたか?

新しいホスティング プロバイダーを探し始める必要がありますか?それとも Web ファーミングが遅かれ早かれどこかに到着することを期待できますか? このような移行を、今後作成するすべてのアプリで考慮し、インプロセス キャッシングや同様の設計を完全に回避する必要がありますか?

(これを農業対非農業の戦いにしないでください。開発時に覚えておく必要があるほど一般的であるかどうか疑問に思っています。)

4

1 に答える 1

1

私は間違いなく、ネットワーク/展開の第一人者というよりは開発者です。したがって、私はこれらの概念 (および落とし穴/制限に関するいくつかの直接の経験) について全体的にかなりよく理解していますが、他の SO'er に頼って、私の意見をより徹底的に精査します。その注意点で...

最初に注意すること: 「Web ファーム」は「Web ガーデン」とは異なります。Web ファームは通常、一連の (物理または仮想) マシンであり、通常はそれぞれが一意の IP アドレスを持ち、何らかのロード バランサーの背後にあります。ほとんどのロード バランサーは、セッション アフィニティをサポートしています。つまり、特定のユーザーは、サイトへの最初のヒットでランダムなマシンを取得しますが、その後のすべてのヒットで同じマシンを取得します。したがって、メモリ内の状態管理は引き続き正常に機能し、セッション アフィニティにより、特定のセッションがその存続期間を通じて同じアプリケーション キャッシュを使用する可能性が高くなります。

私の理解では、「Web ガーデン」は IIS に固有のものであり、本質的には同じマシン上で並行して実行される Web サーバーの「複数のインスタンス」です。これは、Web ファームと同じ主な目的を果たします (より多くの同時接続をサポートします)。ただし、私の知る限り、いかなる種類のセッション アフィニティもサポートしていません。つまり、各リクエストが異なる論理アプリケーションで終了する可能性があるため、それぞれが異なるアプリケーション キャッシュで動作する可能性があります。また、インプロセス セッション処理を使用できないことも意味します。ASP セッション状態サービス、または SQL を使用したセッション構成に移動する必要があります。私のクライアントがウェブガーデンモデルに移行したとき、これらは私を苦しめた大きなものでした.

私の経験では、ほとんどの場合 DB クエリがボトルネックであるため、iis サーバーに負荷を分散するポイントがよくわかりません。」IIS で使用できるワーカー スレッドの数は有限であるため (構成可能ですが、それでも有限です)、したがって、限られた数の同時接続しか処理できません。各リクエストが非常に迅速な操作であっても、忙しい Web サイトでは上限が限られているため、ユーザー エクスペリエンスが遅くなる可能性があります。Web ファーム/ガーデンは、CPU 負荷の平準化に完全に対応していなくても、同時要求の数を増やします。

この種のことはよくあることですか、それともそもそもプロセス メモリをキャッシュとして使用する私がばかだったのでしょうか?」 これは実際には「または」の質問ではありません。はい、私の経験では、Web ファームは非常に一般的です (Web ガーデンはそれほど多くありませんが、それは私が一緒に仕事をしたクライアントだけかもしれません)。とにかく、メモリ キャッシュの使用に問題はありません。メモリ キャッシュは ASP.NET の不可欠な部分です。もちろん、それらを誤って使用して問題を引き起こす方法は数多くありますが、それはより大きな議論であり、システムが Web ファームに展開されるかどうかに固有のものではありません。

私の意見では、次のことを想定してシステムを設計する必要があります。

  • それらは Web ファーム/ガーデンで実行する必要があります
  • あなたはセッションアフィニティを持っています
  • アプリケーションレベルのキャッシュアフィニティはありません

これは、分散展開の完全なガイドではありません。しかし、農場/庭の風景の一部を理解することに少しでも近づくことができれば幸いです.

于 2011-07-26T16:09:54.637 に答える