Pule aplikacji IIS, procesy robocze, domeny aplikacji

88

Czy ktoś może wyjaśnić różnice w usługach IIS między pulami aplikacji, procesami roboczymi i domenami aplikacji? Jak współpracują ze sobą? Przeczytałem kilka artykułów, ale nadal jest to trochę zagmatwane.

  1. Czy każda witryna internetowa utworzona w usługach IIS staje się aplikacją?
  2. Czy każda aplikacja jest powiązana z jednym procesem roboczym?
  3. Gdzie domeny aplikacji pojawiają się na obrazie?
Ravi
źródło

Odpowiedzi:

103

Próbuję je wypowiedzieć innymi słowami.

Na serwerze można mieć wiele działających razem witryn asp.net. Każda witryna jest domeną aplikacji .

Do każdego z nich należy przypisać jedną pulę aplikacji . Wiele domen aplikacji (witryn) może mieć tę samą pulę aplikacji, a ponieważ mają tę samą pulę aplikacji, działają w ramach tych samych procesów i na tym samym koncie - i mają te same ustawienia puli. Jeśli ta pula zostanie ponownie uruchomiona, wszystkie witryny w tej puli zostaną ponownie uruchomione.

Teraz każda pula może mieć jeden lub więcej procesów roboczych . Każdy proces roboczy to inny program, który uruchamia Twoją witrynę, ma własne zmienne statyczne, różne wywołania start stop itp. Różne procesy robocze nie komunikują się ze sobą, a jedynym sposobem wymiany danych są wspólne pliki lub wspólna baza danych. Jeśli masz więcej niż jeden proces roboczy i jeden z nich wykonuje długie obliczenia, drugi może zająć się obsługą połączeń internetowych i wyświetlaniem treści.

Kiedy przypisujesz wiele procesów roboczych do jednej puli, tworzysz tzw. Ogród sieciowy, a Twoja witryna jest uruchamiana z więcej niż jednego komputera, jeśli komputer jest jedną maszyną przetwarzającą.

domeny aplikacji z pulami i procesami

Każdy proces roboczy może mieć wiele wątków.

Wpływ większej liczby procesów roboczych na Ciebie:
Gdy masz jeden proces roboczy, wszystko jest prostsze, w aplikacji wszystkie zmienne statyczne są takie same i używasz lockdo ich synchronizacji.
Kiedy przypisujesz więcej niż jeden proces roboczy , nadal używasz lockdla zmiennych statycznych, zmienne statyczne nie różnią się między wieloma uruchomieniami twojej witryny i jeśli masz jakiś wspólny zasób (np. Tworzenie miniatury na dysku) Następnie musisz zsynchronizować swój proces roboczy z Mutex.

Jeszcze jedna uwaga. Wygląda na to, że kiedy zrobisz więcej procesów roboczych, możesz mieć bardziej płynne asynchroniczne ładowanie strony. Występuje mały problem z programem obsługi sesji asp.net, który blokuje cały proces w celu załadowania strony - to jest dobre i nie zależy od tego, czy znasz to i sobie z tym poradzisz - lub zmienić.

Porozmawiajmy więc tylko o jednej witrynie z wieloma procesami roboczymi. Tutaj napotykasz problem, z którym musisz zsynchronizować wspólną zmianę zasobów Mutex. Ale strony / programy obsługi, które używają sesji, nie są asynchroniczne, ponieważ sesja je blokuje. Jest to dobre na początek, ponieważ unikasz samodzielnej synchronizacji wielu punktów.

Niektóre pytania na ten temat:
Aplikacja sieci Web zablokowana podczas przetwarzania innej aplikacji internetowej przy współużytkowaniu tej samej sesji
Wywołania jQuery Ajax do usługi sieciowej wydają się być synchroniczne
Serwer ASP.NET nie przetwarza stron asynchronicznie
Zastępuje całkowicie sesję ASP.Net

Teraz ta blokada sesji nie ma wpływu na różne witryny.

W przypadku różnych witryn bardziej przepracowany proces może pomóc w zapobieganiu blokowaniu przez jedną witrynę drugiej w przypadku długotrwałego procesu.
Również w przypadku różnych witryn pomocna może być większa liczba pul, ponieważ każda pula ma co najmniej jeden działający proces, ale pamiętaj i zobacz sam za pomocą eksploratora procesów, każdy proces roboczy zajmuje więcej pamięci komputera i jeden duży serwer z pamięcią 16G a jeden serwer SQL nie może mieć zbyt wielu różnych działających procesów - na przykład na serwerze ze 100 współdzielonymi witrynami nie można mieć 100 różnych pul.

Aristos
źródło
Rozumiem, że różni się to od sposobu, w jaki usługi IIS 5 obsługują to w porównaniu z usługami IIS 6 i nowszymi. Tak więc w usługach IIS 5 masz jeden proces roboczy i wiele domen aplikacji w porównaniu z usługami IIS 6 masz wiele procesów roboczych (w3wp.exe), po jednym dla każdej puli aplikacji. W usługach IIS 6.0 inetinfo przekierowuje do innego procesu roboczego w zależności od żądania. Jestem tutaj? Oto moje źródło dotnetslackers.com/articles/iis/…
Ravi,
@ user460103 Tak iis5 ma jeden proces roboczy (wiele domen aplikacji może mieć tylko niewielki hack, ale nie współpracują ze sobą). Jeśli masz w jednej witrynie wiele procesów roboczych, tak iis6 może przekierować Cię do innego procesu roboczego.
Aristos
Czy usługi IIS uruchamiają nowy proces dla każdego żądania internetowego? A może tworzy nowy wątek?
zmienna
@variable Rozpręć nowy wątek - proces jest aktywny i działa przez cały czas lub odtwarzają się tak, jak ustawiłeś je na basenie ...
Aristos
Ok, jeśli istnieje wiele procesów, to jak działają sesje - myślałem, że sesja jest na proces
zmienna
18
  • Jeden serwer IIS może mieć wiele pul aplikacji.
  • Jedna aplikacja internetowa jest powiązana z jedną pulą aplikacji.
  • Jedna pula aplikacji może mieć więcej niż jeden proces roboczy (gdy jest włączony Web Garden).
  • Jeden proces roboczy może mieć wiele domen aplikacji. Jedna domena aplikacji istnieje tylko w jednym procesie roboczym.
  • Jedna domena aplikacji może mieć wiele wątków. Jeden wątek może być współużytkowany przez różne domeny aplikacji w różnym czasie.

Znaczenie dla programistów ASP.NET: aby Twoja witryna internetowa była skalowalna, nie używaj sesji w-proc i nie używaj blokady zmiennej klasy statycznej do synchronizacji.

Ying
źródło
7
  1. Tak, chociaż nie każda aplikacja jest stroną internetową. Możesz mieć aplikację zagnieżdżoną w witrynie internetowej.

  2. Tak, każda aplikacja musi mieć jeden proces roboczy (pulę aplikacji), chociaż jedna pula aplikacji może obsługiwać kilka aplikacji. Pojedyncza aplikacja internetowa może być dystrybuowana (ogród / farma internetowa), co oznacza, że ​​będzie działać w wielu procesach.

  3. Każdy proces będzie działał we własnej domenie aplikacji (każda pula aplikacji jest oddzielną domeną aplikacji).


Z MSDN.

Utwórz aplikację internetową :

Aplikacja to grupa treści na poziomie głównym witryny sieci Web lub grupa treści w oddzielnym folderze w katalogu głównym witryny sieci Web.

Pule aplikacji :

Pula aplikacji definiuje grupę jednego lub więcej procesów roboczych, skonfigurowanych ze wspólnymi ustawieniami, które obsługują żądania do jednej lub większej liczby aplikacji przypisanych do tej puli aplikacji. Ponieważ pule aplikacji umożliwiają zestawowi aplikacji sieci Web współużytkowanie jednego lub więcej podobnie skonfigurowanych procesów roboczych, zapewniają wygodny sposób izolowania zestawu aplikacji sieci Web od innych aplikacji sieci Web na serwerze. Granice procesu oddzielają każdy proces roboczy; dlatego problemy z aplikacjami w jednej puli aplikacji nie wpływają na witryny sieci Web ani aplikacje w innych pulach aplikacji. Pule aplikacji znacznie zwiększają niezawodność i łatwość zarządzania infrastrukturą sieci Web.

Oded
źródło
Dlatego proces IIS ma wiele domen aplikacji (pule aplikacji), a każda pula aplikacji może mieć wiele witryn internetowych. Czy jest tak, że wiele witryn znajduje się w jednej domenie aplikacji? A jeśli coś pójdzie nie tak w jednej witrynie, czy spowoduje to zniszczenie całej domeny aplikacji i wszystkich znajdujących się w niej witryn?
Ravi
@ user460103 Jeśli zdarzy się awaria puli, to tak, wszystkie strony, które są z nią połączone, zatrzymają się - i ponownie uruchomią.
Aristos
1
2. Nie. Aplikacja może obejmować więcej niż jeden proces roboczy, jeśli skonfigurowano ogród sieciowy.
Wiktor Zychla
@Wiktor - nie wykluczałem tego. Jednak zaktualizowana odpowiedź, aby wyjaśnić.
Oded
3

Z linku źródłowego: -http: //weblogs.asp.net/owscott/archive/2007/09/02/application-vs-appdomain.aspx

Aplikacja jest terminem IIS, ale jest to termin używany przez ASP.NET. Zasadniczo tworzy piaskownicę lub zestaw granic oddzielających różne witryny lub części witryn od innych.

AppDomain to termin .NET. (W IIS7, AppDomains odgrywają większą rolę w IIS, ale w większości jest to termin ASP.NET)

Proces roboczy służy do przetwarzania żądania aplikacji internetowej.

Rahul Tripathi
źródło