IIS のアプリケーション プール、ワーカー プロセス、アプリ ドメインの違いを説明できる人はいますか? また、それらはどのように連携しますか? いくつかの記事を読みましたが、まだ少し混乱しています。
- IIS で作成された各 Web サイトはアプリケーションになりますか?
- 各アプリケーションは 1 つのワーカー プロセスに関連付けられていますか?
- アプリ ドメインはどこに登場しますか?
私は他の言葉でそれらを言おうとします。
サーバーでは、一緒に実行される多数の asp.net サイトを持つことができます。各 1 つのサイトがアプリ ドメインです。
それぞれに 1 つのアプリケーション プールを割り当てる必要があります。多くのアプリケーション ドメイン (サイト) は、同じアプリケーション プールを持つことができます。それらは同じアプリケーション プールを持つため、同じプロセスおよび同じアカウントで実行され、同じプール設定を持ちます。このプールが再起動すると、そのプールの下にあるすべてのサイトが再起動します。
現在、各プールは 1 つ以上のワーカー プロセスを持つことができます。各ワーカー プロセスは、サイトを実行する異なるプログラムであり、単独の静的変数を持ち、開始と停止の呼び出しが異なります。異なるワーカー プロセスは互いに通信しません。データを交換する唯一の方法は、共通のファイルまたは共通のデータベースからです。複数のワーカー プロセスがあり、そのうちの 1 つが長時間の計算を行う場合、もう 1 つのプロセスがインターネット コールの処理とコンテンツの表示を処理できます。
1 つのプールに多くのワーカー プロセスを割り当てると、呼び出されるWeb ガーデンが作成され、コンピューターが 1 つの処理マシンである場合、サイトは複数のコンピューターから実行されるようになります。
各ワーカー プロセスは、多数のスレッドを持つことができます。
より多くのワーカー プロセスが与える影響:ワーカー プロセスが 1 つある
場合は、アプリケーション間ですべての静的変数が同じになり、それらを同期するために を使用すると、すべてがより単純になります。複数のワーカー プロセス
を割り当てた場合でも、静的変数にはを使用し続けます。静的変数は、サイトの多くの実行間で違いはなく、共通のリソースがある場合 (ディスク上のサムネイルの作成など)次に、ワーカー プロセスを と同期する必要があります。lock
lock
Mutex
もう1つ注意してください。より多くのワーカー プロセスを作成すると、非同期ページの読み込みがよりスムーズになる可能性があるようです。ページ読み込みのプロセス全体をロックする asp.net のセッション ハンドラーには小さな問題があります。
では、多くのワーカー プロセスを持つ 1 つのサイトについてだけ話しましょう。ここで、共通リソースの変更を と同期する必要があるという問題に直面しますMutex
。ただし、セッションを使用するページ/ハンドラーは、セッションによってロックされるため、非同期ではありません。この多くのポイントの同期を自分で行うことを避けるため、これは開始に適しています。
このトピックに関するいくつかの質問:
Web アプリは、同じセッションを共有する別の Web アプリの処理中にブロックされ
ました Web サービスへの jQuery Ajax 呼び出しは同期しているようです
ASP.NET サーバーはページを非同期的に処理しません
ASP.Net のセッションを完全に置き換えます
現在、このセッション ロックは別のサイトには影響しません。
さまざまなサイト間で、より多くの処理を行うプロセスは、1 つのサイトが長時間実行されているプロセスで他のサイトをブロックしないようにするのに役立ちます。
また、さまざまなサイト間で、より多くのプールも役立ちます。各プールには少なくとも 1 つの作業プロセスがあるためですが、プロセス エクスプローラーを使用して覚えておいてください。各作業プロセスはコンピューターのより多くのメモリを消費し、16G メモリを備えた 1 つの大きなサーバーを使用します。また、1 つの SQL サーバーに多数の異なる作業プロセスを含めることはできません。たとえば、100 の共有サイトを持つサーバーでは、100 の異なるプールを持つことはできません。
ASP.NET 開発者にとっての意味: Web サイトをスケーラブルにするために、インプロセス セッションを使用せず、同期に静的クラス変数ロックを使用しないでください。
はい。ただし、すべてのアプリケーションが Web サイトであるとは限りません。Web サイトの下にネストされたアプリケーションを持つことができます。
はい、すべてのアプリケーションには 1 つのワーカー プロセス (アプリケーション プール) が必要ですが、1 つのアプリケーション プールで複数のアプリケーションを処理できます。単一の Web アプリケーションを分散 (Web ガーデン/ファーム) することができます。つまり、複数のプロセスで実行されます。
各プロセスは独自のアプリ ドメインで実行されます (すべてのアプリケーション プールは個別のアプリ ドメインです)。
MSDN から。
アプリケーションは、Web サイトのルート レベルにあるコンテンツのグループ、または Web サイトのルート ディレクトリの下の別のフォルダーにあるコンテンツのグループです。
アプリケーション プールは、そのアプリケーション プールに割り当てられた 1 つ以上のアプリケーションに要求を処理する共通の設定で構成された、1 つ以上のワーカー プロセスのグループを定義します。アプリケーション プールを使用すると、一連の Web アプリケーションが同様に構成された 1 つ以上のワーカー プロセスを共有できるため、一連の Web アプリケーションをサーバー コンピューター上の他の Web アプリケーションから分離する便利な方法が提供されます。プロセス境界は、各ワーカー プロセスを分離します。したがって、1 つのアプリケーション プールでアプリケーションの問題が発生しても、他のアプリケーション プールの Web サイトやアプリケーションには影響しません。アプリケーション プールは、Web インフラストラクチャの信頼性と管理性を大幅に向上させます。
ソースリンクから:-http://weblogs.asp.net/owscott/archive/2007/09/02/application-vs-appdomain.aspx
アプリケーションはIISの用語ですが、ASP.NETが利用するものです。基本的に、サンドボックスまたは一連の境界を作成して、異なるサイトまたはサイトの一部を他のサイトから分離します。
AppDomainは.NET用語です。(IIS7では、AppDomainsはIIS内でより大きな役割を果たしますが、ほとんどの場合、ASP.NET用語です)
ワーカープロセスは、Webアプリケーションのリクエストを処理するために使用されます。