IIS-App-Pools, Arbeitsprozesse, App-Domänen

88

Kann jemand die Unterschiede in IIS zwischen Anwendungspools, Arbeitsprozessen und Anwendungsdomänen erklären? Wie arbeiten sie zusammen? Ich habe ein paar Artikel gelesen, aber es ist immer noch etwas verwirrend.

  1. Wird jede in IIS erstellte Website zu einer Anwendung?
  2. Ist jede Anwendung einem Arbeitsprozess zugeordnet?
  3. Wo kommen App-Domains ins Spiel?
Ravi
quelle

Antworten:

102

Ich versuche sie mit anderen Worten zu sagen.

Auf einem Server können viele asp.net-Sites zusammen ausgeführt werden. Jede Site ist eine App-Domain .

Sie müssen jedem von ihnen einen Anwendungspool zuweisen . Viele Anwendungsdomänen (Sites) können denselben Anwendungspool haben, und da sie denselben Anwendungspool haben, werden sie unter denselben Prozessen und unter demselben Konto ausgeführt - und sie haben dieselben Einstellungen des Pools. Wenn dieser Pool neu gestartet wird, werden alle Sites unter diesen Pools neu gestartet.

Jetzt kann jeder Pool einen oder mehrere Arbeitsprozesse haben . Jeder Arbeitsprozess ist ein anderes Programm, das Ihre Site ausführt, seine eigenen statischen Variablen hat, verschiedene Start-Stopp-Aufrufe usw. Verschiedene Arbeitsprozesse kommunizieren nicht miteinander, und der einzige Weg, Daten auszutauschen, besteht aus gemeinsamen Dateien oder einer gemeinsamen Datenbank. Wenn Sie mehr als einen Arbeitsprozess haben und einer von ihnen Langzeitberechnungen durchführt, kann der andere die Internetanrufe bearbeiten und Inhalte anzeigen.

Wenn Sie einem einzelnen Pool mehrere Worker-Prozesse zuweisen , erstellen Sie den aufgerufenen Webgarten, und Ihre Site wird gerne von mehr als einem Computer ausgeführt, wenn ein Computer eine Verarbeitungsmaschine ist.

App-Domains mit Pools und Prozessen

Jeder Arbeitsprozess kann viele Threads haben.

Wie sich der Arbeitsprozess auf Sie auswirkt:
Wenn Sie einen Arbeitsprozess haben, ist alles einfacher. In Ihrer Anwendung sind alle statischen Variablen gleich, und Sie verwenden die lock, um sie zu synchronisieren.
Wenn Sie mehr als einen Arbeitsprozess zuweisen , verwenden Sie weiterhin die lockstatischen Variablen. Statische Variablen unterscheiden sich nicht zwischen den vielen Läufen Ihrer Site, und wenn Sie über eine gemeinsame Ressource verfügen (z. B. das Erstellen einer Miniaturansicht auf der Festplatte). Dann müssen Sie Ihren Arbeitsprozess mit synchronisieren Mutex.

Noch eine Anmerkung. Es hört sich so an, als ob Sie mehr asynchrone Seitenladevorgänge haben , wenn Sie mehr Arbeitsprozesse ausführen. Es gibt ein kleines Problem mit dem Sitzungshandler von asp.net, das den gesamten Prozess für das Laden einer Seite sperrt - das ist gut und nicht gut, hängt davon ab, ob Sie es kennen und damit umgehen - oder es zu ändern.

Lassen Sie uns also nur über eine Site mit vielen Arbeitsprozessen sprechen. Hier sehen Sie sich dem Problem gegenüber, mit dem Sie Ihre allgemeine Ressourcenänderung synchronisieren müssen Mutex. Die Seiten / Handler, die die Sitzung verwenden, sind jedoch nicht asynchron, da die Sitzung sie sperrt. Dies ist ein guter Anfang, da Sie vermeiden, diese Synchronisation vieler Punkte selbst vorzunehmen.

Einige Fragen zu diesem Thema:
Webanwendung blockiert während der Verarbeitung einer anderen Webanwendung beim Freigeben derselben Sitzung
jQuery Ajax-Aufrufe an den Webdienst scheinen synchron zu sein
ASP.NET Server verarbeitet Seiten nicht asynchron
Ersetzt die Sitzung von ASP.Net vollständig

Jetzt wirkt sich diese Sitzungssperre nicht auf verschiedene Sites aus.

Unter verschiedenen Standorten kann der besser funktionierende Prozess dazu beitragen, dass nicht der eine Standort den anderen mit einem lang laufenden Prozess blockiert.
Auch zwischen verschiedenen Standorten können mehr Pools hilfreich sein, da jeder Pool mindestens einen funktionierenden Prozess hat. Denken Sie jedoch daran, dass jeder Arbeitsprozess mehr Arbeitsspeicher Ihres Computers und einen großen Server mit 16G-Speicher benötigt und ein SQL Server kann nicht zu viele verschiedene Arbeitsprozesse haben - auf einem Server mit 100 gemeinsam genutzten Sites können Sie beispielsweise nicht 100 verschiedene Pools haben.

Aristos
quelle
Ich stelle fest, dass es sich von der Art und Weise unterscheidet, wie IIS 5 damit umgeht, im Vergleich zu IIS 6 und höher. In IIS 5 haben Sie also einen Worker-Prozess und mehrere App-Domänen. Im Vergleich zu IIS 6 haben Sie mehrere Worker-Prozesse (w3wp.exe), einen für jeden Anwendungspool. In IIS 6.0 leitet inetinfo je nach Anforderung zu verschiedenen Worker-Prozessen um. Bin ich hier richtig Hier ist meine Quelle dotnetslackers.com/articles/iis/…
Ravi
@ user460103 Ja, iis5 hat einen Arbeitsprozess (mehrere App-Domänen können nur mit einem kleinen Hack arbeiten, aber sie arbeiten nicht zusammen.) Wenn Sie auf einer Site viele Arbeitsprozesse haben, kann iis6 Sie zu einem anderen Arbeitsprozess umleiten.
Aristos
Startet der IIS für jede Webanforderung einen neuen Prozess? Oder spinnt es einen neuen Thread?
Variable
@variable Starten Sie einen neuen Thread - der Prozess bleibt die ganze Zeit in Betrieb oder sie recyceln die Art und Weise, wie Sie sie im Pool eingerichtet haben ...
Aristos
Ok, wenn es mehrere Prozesse gibt, wie funktionieren dann Sitzungen - ich dachte, Sitzung ist pro Prozess
Variable
18
  • Ein IIS-Server kann mehrere Anwendungspools haben.
  • Eine Webanwendung wird an einen Anwendungspool gebunden.
  • Ein Anwendungspool kann mehr als einen Arbeitsprozess haben (wenn Web Garden aktiviert ist).
  • Ein Arbeitsprozess kann mehrere App-Domänen haben. Eine App-Domain lebt nur in einem Worker-Prozess.
  • Eine App-Domain kann mehrere Threads haben. Ein Thread kann von verschiedenen App-Domänen zu unterschiedlichen Zeiten gemeinsam genutzt werden.

Die Bedeutung für ASP.NET-Entwickler: Um Ihre Website skalierbar zu machen, verwenden Sie keine In-Proc-Sitzung und keine statische Klassenvariablensperre für die Synchronisierung.

Ying
quelle
7
  1. Ja, obwohl nicht jede Anwendung eine Website ist. Sie können eine Anwendung haben, die unter einer Website verschachtelt ist .

  2. Ja, jede Anwendung muss über einen Arbeitsprozess (Anwendungspool) verfügen, obwohl ein Anwendungspool mehrere Anwendungen bedienen kann. Eine einzelne Webanwendung kann verteilt werden (Weingarten / Farm), was bedeutet, dass sie in mehreren Prozessen ausgeführt wird.

  3. Jeder Prozess wird in einer eigenen App-Domäne ausgeführt (jeder Anwendungspool ist eine separate App-Domäne).


Von MSDN.

Erstellen Sie eine Webanwendung :

Eine Anwendung ist eine Gruppierung von Inhalten auf der Stammebene einer Website oder eine Gruppierung von Inhalten in einem separaten Ordner im Stammverzeichnis der Website.

Anwendungspools :

Ein Anwendungspool definiert eine Gruppe von einem oder mehreren Arbeitsprozessen, die mit allgemeinen Einstellungen konfiguriert sind, die Anforderungen an eine oder mehrere Anwendungen bedienen, die diesem Anwendungspool zugewiesen sind. Da Anwendungspools es einer Reihe von Webanwendungen ermöglichen, einen oder mehrere ähnlich konfigurierte Arbeitsprozesse gemeinsam zu nutzen, bieten sie eine bequeme Möglichkeit, eine Reihe von Webanwendungen von anderen Webanwendungen auf dem Servercomputer zu isolieren. Prozessgrenzen trennen jeden Arbeitsprozess. Daher wirken sich Anwendungsprobleme in einem Anwendungspool nicht auf Websites oder Anwendungen in anderen Anwendungspools aus. Anwendungspools erhöhen sowohl die Zuverlässigkeit als auch die Verwaltbarkeit Ihrer Webinfrastruktur erheblich.

Oded
quelle
Der IIS-Prozess verfügt also über mehrere App-Domänen (Anwendungspools), und jeder Anwendungspool kann mehrere Websites umfassen. Befinden sich also mehrere Websites in einer einzigen App-Domain? Was passiert, wenn auf einer Website etwas schief geht, werden dann die gesamte App-Domain und alle darin befindlichen Websites gelöscht?
Ravi
@ user460103 Wenn Sie einen Pool zum Absturz bringen, werden alle damit verbundenen Sites gestoppt und neu gestartet.
Aristos
1
2. Nein. Eine Anwendung kann möglicherweise mehr als einen Arbeitsprozess umfassen, wenn ein Webgarten konfiguriert ist.
Wiktor Zychla
@Wiktor - das habe ich nicht ausgeschlossen. Allerdings aktualisierte Antwort zur Verdeutlichung.
Oded
3

Über den Quelllink: -http: //weblogs.asp.net/owscott/archive/2007/09/02/application-vs-appdomain.aspx

Eine Anwendung ist ein IIS-Begriff, der jedoch von ASP.NET verwendet wird. Im Wesentlichen wird eine Sandbox oder eine Reihe von Grenzen erstellt, um verschiedene Sites oder Teile von Sites von den anderen zu trennen.

Eine AppDomain ist ein .NET-Begriff. (In IIS7 spielen AppDomains eine größere Rolle in IIS, aber zum größten Teil handelt es sich um einen ASP.NET-Begriff.)

Der Arbeitsprozess wird verwendet, um die Anforderung der Webanwendung zu verarbeiten.

Rahul Tripathi
quelle