Pools de aplicativos IIS, processos de trabalho, domínios de aplicativos

88

Alguém pode explicar as diferenças, no IIS, entre pools de aplicativos, processos de trabalho e domínios de aplicativo? Além disso, como eles funcionam juntos? Eu li alguns artigos, mas ainda é um pouco confuso.

  1. Cada site criado no IIS se torna um aplicativo?
  2. Cada aplicativo está associado a um processo de trabalho?
  3. Onde os domínios de aplicativo entram em cena?
Ravi
fonte

Respostas:

103

Tento dizê-los com outras palavras.

Em um servidor, você pode ter muitos sites asp.net que funcionam juntos. Cada site é um domínio de aplicativo .

Você deve atribuir a cada um deles um pool de aplicativos . Muitos domínios de aplicativos (sites) podem ter o mesmo pool de aplicativos e, como têm o mesmo pool, são executados nos mesmos processos e na mesma conta - e têm as mesmas configurações do pool. Se este pool for reiniciado, todos os sites sob esse pool serão reiniciados.

Agora, cada pool pode ter um ou mais processos de trabalho . Cada processo de trabalho é um programa diferente que executa seu site, tem suas próprias variáveis ​​estáticas, eles iniciam chamadas de parada diferentes, etc. Processos de trabalho diferentes não se comunicam juntos, e a única maneira de trocar dados é de arquivos comuns ou de um banco de dados comum. Se você tem mais de um processo de trabalho e um deles faz cálculos demorados, o outro pode cuidar das chamadas pela internet e mostrar o conteúdo.

Quando você atribui muitos processos de trabalho a um único pool, então você cria o web garden chamado e seu site pode ser executado em mais de um computador se um computador for uma máquina de processamento.

domínios de aplicativos, com pools e processos

Cada processo de trabalho pode ter muitos threads.

Como o processo de trabalho mais afeta você:
Quando você tem um processo de trabalho, tudo é mais simples, em seu aplicativo todas as variáveis ​​estáticas são as mesmas e você usa o lockpara sincronizá-las.
Quando você atribui mais de um processo de trabalho , você ainda continua a usar o lockpara variáveis ​​estáticas, as variáveis ​​estáticas não são diferentes entre as muitas execuções do seu site e se você tiver algum recurso comum (por exemplo, a criação de uma miniatura no disco) então você precisa sincronizar seu processo de trabalho com Mutex.

Mais uma nota. Parece que quando você cria mais processos de trabalho , pode ter carregamentos de página assíncronos mais suaves. Há um pequeno problema com o manipulador de sessão do asp.net que é bloquear todo o processo para o carregamento de uma página - isso é bom e não é bom dependendo se você conhece e trata disso - ou altere-o.

Então, vamos falar sobre um site apenas com muitos processos de trabalho. Aqui você enfrenta o problema com o qual precisa sincronizar sua mudança de recurso comum Mutex. Mas as páginas / manipuladores que usam a sessão não são assíncronos porque a sessão os bloqueia. Isso é bom para começar porque você evita fazer essa sincronização de muitos pontos você mesmo.

Algumas perguntas sobre este tópico:
Aplicativo da Web bloqueado durante o processamento de outro aplicativo da Web no compartilhamento da mesma sessão. As
chamadas jQuery Ajax para serviço da Web parecem ser síncronas.
Servidor ASP.NET não processa páginas de forma assíncrona
Substituindo inteiramente a sessão do ASP.Net

Agora, este bloqueio de sessão não afeta sites diferentes.

Entre diferentes sites, o processo mais trabalhado pode ajudar a não um site bloquear o outro com processo de longa execução.
Também entre sites diferentes, mais pools também podem ajudar, porque cada pool tem pelo menos um processo trabalhado, mas lembre-se e veja por você mesmo usando o explorador de processos, cada processo de trabalho ocupa mais memória do seu computador e um grande servidor com 16G de memória e um servidor SQL não pode ter muitos processos de trabalho diferentes - por exemplo, em um servidor com 100 sites compartilhados, você não pode ter 100 pools diferentes.

Aristos
fonte
Estou descobrindo que é diferente da maneira como o IIS 5 lida com isso em comparação com o IIS 6 e superior. Portanto, no IIS 5, você tem um processo de trabalho e vários domínios de aplicativo, em comparação com o IIS 6, você tem vários processos de trabalho (w3wp.exe), um para cada pool de aplicativos. No IIS 6.0, o inetinfo redireciona para diferentes processos de trabalho, dependendo da solicitação. Eu estou bem aqui? Aqui está minha fonte dotnetslackers.com/articles/iis/…
Ravi
@ user460103 Sim, o iis5 tem um processo de trabalho (vários domínios de aplicativo podem ter apenas com um pequeno hack, mas eles não funcionam juntos.) Quando você tem em um site muitos processos de trabalho, sim, o iis6 pode redirecioná-lo para diferentes processos de trabalho.
Aristos
O IIS ativa um novo processo para cada solicitação da web? Ou cria um novo tópico?
variável de
@variable Spin up a new thread - os processos permanecem ativos e rodando o tempo todo, ou eles reciclam da maneira que você os configurou no pool ...
Aristos
Ok, se houver vários processos, como funcionam as sessões - pensei que a sessão é por processo
variável
18
  • Um servidor IIS pode ter vários pools de aplicativos.
  • Um aplicativo da web se liga a um pool de aplicativos.
  • Um pool de aplicativos pode ter mais de um processo de trabalho (quando o Web Garden está ativado).
  • Um processo de trabalho pode ter vários domínios de aplicativo. Um domínio de aplicativo reside apenas em um processo de trabalho.
  • Um domínio de aplicativo pode ter vários threads. Um thread pode ser compartilhado por diferentes domínios de aplicativos em momentos diferentes.

O significado para os desenvolvedores ASP.NET: para tornar seu site escalonável, não use sessão in-proc e não use bloqueio de variável de classe estática para sincronização.

Ying
fonte
7
  1. Sim, embora nem todo aplicativo seja um site. Você pode ter um aplicativo aninhado em um site.

  2. Sim, cada aplicativo deve ter um processo de trabalho (pool de aplicativos), embora um pool de aplicativos possa servir a vários aplicativos. Um único aplicativo da web pode ser distribuído (web garden / farm), o que significa que será executado em vários processos.

  3. Cada processo será executado em seu próprio domínio de aplicativo (cada pool de aplicativos é um domínio de aplicativo separado).


Do MSDN.

Crie um aplicativo da web :

Um aplicativo é um agrupamento de conteúdo no nível raiz de um site ou um agrupamento de conteúdo em uma pasta separada no diretório raiz do site.

Pools de aplicativos :

Um pool de aplicativos define um grupo de um ou mais processos de trabalho, definidos com configurações comuns que atendem a solicitações para um ou mais aplicativos atribuídos a esse pool de aplicativos. Como os pools de aplicativos permitem que um conjunto de aplicativos da Web compartilhe um ou mais processos de trabalho configurados de forma semelhante, eles fornecem uma maneira conveniente de isolar um conjunto de aplicativos da Web de outros aplicativos da Web no computador servidor. Os limites do processo separam cada processo do trabalhador; portanto, os problemas de aplicativo em um pool de aplicativos não afetam sites ou aplicativos em outros pools de aplicativos. Os pools de aplicativos aumentam significativamente a confiabilidade e a capacidade de gerenciamento de sua infraestrutura da web.

Oded
fonte
Portanto, o processo IIS tem vários domínios de aplicativos (pools de aplicativos) e cada pool de aplicativos pode ter vários sites. Então, é que vários sites residem em um único domínio de aplicativo? E se algo der errado em um site, todo o domínio do aplicativo e todos os sites que residem nele serão desativados?
Ravi
@ user460103 Se você travar um pool, então sim, todos os sites que estão conectados a ele param - e reiniciam novamente.
Aristos
1
2. Não. Um aplicativo pode abranger mais de um processo de trabalho se um web garden estiver configurado.
Wiktor Zychla
@Wiktor - Eu não excluí isso. No entanto, resposta atualizada para esclarecer.
Oded
3

Do link de origem: -http: //weblogs.asp.net/owscott/archive/2007/09/02/application-vs-appdomain.aspx

Um aplicativo é um termo do IIS, mas é usado pelo ASP.NET. Basicamente, ele cria uma caixa de areia, ou um conjunto de limites para separar diferentes sites, ou partes de sites, dos outros.

Um AppDomain é um termo .NET. (No IIS7, AppDomains desempenham um papel maior dentro do IIS, mas na maior parte é um termo ASP.NET)

O processo de trabalho é usado para processar a solicitação do aplicativo da web.

Rahul Tripathi
fonte