IISでは、アプリケーションプール、ワーカープロセス、アプリドメインの違いを説明できますか?また、彼らはどのように連携しますか?私はいくつかの記事を読みましたが、それでもまだ少し混乱しています。
- IISで作成された各Webサイトはアプリケーションになりますか?
- 各アプリケーションは1つのワーカープロセスに関連付けられていますか?
- アプリドメインはどこにありますか?
回答:
私は他の言葉でそれらを言うようにしてください。
サーバーでは、多くのasp.netサイトを一緒に実行できます。各サイトはアプリドメインです。
それぞれに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つの機能するプロセスがありますが、プロセスエクスプローラーを使用して自分で覚えて確認すると、各機能プロセスはコンピューターのメモリをより多く消費し、16Gメモリを備えた大きなサーバーを1つ使用しますまた、1つのSQLサーバーがあまりにも多くの異なる作業プロセスを持つことはできません。たとえば、100の共有サイトを持つサーバーでは、100の異なるプールを持つことはできません。
ASP.NET開発者にとっての意味: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アプリケーションのリクエストを処理するために使用されます。