martes, 29 de julio de 2008

Un pool para cada aplicación web ASP.NET

Empiezo el post reconociendo que el título es algo exagerado... pero sí, sí se puede hacer eso:
Ir al IIS y crear un pool de aplicaciones para cada aplicación web.

Para los que no sepan qué es un pool de aplicaciones, lo explico con mis palabras:
Es un gol de media cancha!! llegó con el IIS6.
consiste en agrupar o separar aplicaciones web ASP.NET en grupos... eso quiere decir que si tengo 5 pools de aplicaciones, y en cada pool tengo 10 aplicaciones, de las cuales por lo menos 1 aplicación de cada pool se está ejecutando en un momento dado... entonces habrán 5 procesos w3wp.exe (proceso ASP.NET) corriendo en la máquina servidor.
Exacto!!! se abre un proceso w3wp.exe aislado por cada pool de aplicación que tenga por lo menos una aplicación web corriendo.
Exacto!!! creamos un pool para que las aplicaciones web contenidas allí funcionen aisladas de las otras aplicaciones web...

Un proceso es una unidad aislada de código y datos ejecutándose... osea, consumo de memoria y recursos.

Qué le pasa niño Juanito, lo veo preocupado... quiere preguntar algo?
sí Profesor, profesor... por qué tienen que estar separando las aplicaciones en grupos o pools?
jaja, por muchos motivos:
No puedes meter aplicaciones hechas con el framework 1.1 y 2.0 en un mismo costal, hay que ponerlas en pools separados.

También hay que saber que crear pools de aplicaciones "a lo bestia" osea sin criterio, no es la solución a algo... porque cada pool de aplicaciones consume recursos... y ese consumo puede degradar la performance de las demás aplicaciones.
Entonces, primero hay que tener una buena maquina como servidor... sino en lugar de aprovechar esta bondad, estamos creando un problema.

Otro buen motivo para crear un pool de aplicaciones es para usar otra identidad con la que corre la aplicación ASP.NET. Claro, puede ser que necesitemos que el usuario bajo el cual corre ASP.NET tenga más derechos sobre el servidor que el usuario ASP.NET, entonces creamos un nuevo pool de aplicaciones e impersonamos el usuario con el que correrán por defecto las aplicaciones web de ese pool.
Quieres saber cómo se crea un pool de aplicaciones?
es muy simple... sólo abre el IIS, ve al nodo que dice Grupo de aplicaciones (Application pools) y hazle click derecho, añadir nuevo Pool de aplicaciones, le pones un nombre, le eliges bajo qué framework correrá y listo!
Luego puedes asignarle la identidad (usuario) bajo la cual correrán las aplicaciones que usen ese pool.

Ahora te estarás preguntando... cómo asocio una aplicación ASP.NET a un determinado pool de aplicaciones?
simple:
1.- Crea una aplicación ASP.NET con Visual Studio... ponle cualquier nombre
2.- Abre el IIS y ve a las propiedades de la aplicación que acabas de crear... y elige el pool de aplicaciones bajo el cual deseas que se ejecute:
Windows Server 2003 + IIS6
















Windows Vista + IIS7















Si deseas saber bajo qué identity está ejecutándose tu aplicación, puedes poner este código en tu páginas.aspx
Label1.Text = "Esta aplicación se ejecuta bajo la identidad del usuario : " & System.Security.Principal.WindowsIdentity.GetCurrent().Name

Qué es lo recomendable?
Tampoco hay que irse la extremo de crear un pool por cada aplicación web ASP.NET.
Lo recomendable es crear sólo unos cuantos pools de aplicaciones, según varios criterios, por ejemplo:
-un pool de aplicaciones para las aplicaciones que usan el framework 1.1 que están en producción.
-un pool de aplicaciones para las aplicaciones que usan el framework 2.0 que están en producción.
-un pool de aplicaciones para las aplicaciones que usan el framework 2.0 que aún están en desarrollo (claro, en el caso que no tengas un servidor de pruebas).
-Un pool de aplicaciones para una aplicación que sea crítica... osea, prefiero ponerla en un pool de aplicaciones sola porque me reduce el riesgo de caída, a la vez que me mejora la performance de la aplicación.

O sino también, puedo separar mis aplicaciones según un criterio de seguridad... es decir, en un pool pongo aplicaciones que requieran alto nivel de seguridad y en otro pool pongo las que no requieran mucha seguridad... uds vean cuál es la mejor distribución que pueden tener, según las características de las aplicaciones que manejan.

No hay comentarios.: