Mejores prácticas de grupo de aplicaciones de IIS 7.x

24

Estamos a punto de implementar un montón de sitios en algunos servidores nuevos. Tengo las siguientes preguntas sobre los grupos de aplicaciones:

  1. Parece aconsejable tener un grupo de aplicaciones por sitio web. ¿Hay alguna advertencia sobre este enfoque? ¿Un grupo de aplicaciones acaparará toda la CPU, memoria, etc.?

  2. ¿Cuándo debería permitir múltiples procesos de trabajo en un grupo de aplicaciones? ¿Cuándo no deberías?

  3. ¿Se puede usar el límite de memoria privada para evitar que un grupo de aplicaciones interfiera con otro? ¿Establecerlo demasiado bajo provocará solicitudes válidas para reciclar el grupo de aplicaciones sin obtener una respuesta válida?

  4. ¿Cuál es la diferencia entre los límites de memoria privada y virtual?

  5. ¿Existen razones convincentes para NO ejecutar un grupo de aplicaciones por sitio?

Eric Burcham
fuente
Primera pregunta: ¿Son estos sitios web (es decir: .htm / .js) o aplicaciones web (es decir .aspx / .php)?
Coding Gorilla
Principalmente aplicaciones .Net 3.5. Uno es una aplicación PHP de terceros.
Eric Burcham
1
Esta es una especie de amplia gama de temas: el tema (y las respuestas de @ CodingGorilla) son interesantes, pero podría no ser la mejor opción para el estilo de preguntas y respuestas de SF
voretaq7

Respuestas:

20

1) Parece aconsejable tener un grupo de aplicaciones por sitio web. ¿Hay alguna advertencia sobre este enfoque? ¿Puede un grupo de aplicaciones, por ejemplo, acaparar toda la CPU, memoria, etc.?

Este es un enfoque bastante bueno; No hay buenas razones por las que se me ocurran para que diferentes "sitios" (aplicaciones) compartan el mismo grupo. A menos que necesiten compartir un solo recurso de algún tipo. Teóricamente, una aplicación podría acaparar mucha CPU o memoria, pero cambiar la forma en que se agrupan las aplicaciones realmente no afectará tanto.

2) Cuándo debería permitir múltiples procesos de trabajo en un grupo de aplicaciones. ¿Cuándo no deberías?

Es mejor dejarlo solo, usando la configuración predeterminada. A menos que realmente sepa lo que está haciendo, esto puede tener un impacto negativo en su sitio web / aplicación.

3) ¿Se puede usar el límite de memoria privada para evitar que un grupo de aplicaciones interfiera con otro? ¿Establecerlo demasiado bajo provocará solicitudes válidas para reciclar el grupo de aplicaciones sin obtener una respuesta válida?

a) teóricamente

b) Sí, configurarlo a un nivel inferior puede tener efectos negativos. Nuevamente, a menos que tenga necesidades específicas y sepa lo que está haciendo, simplemente déjelos en paz.

4) ¿Cuál es la diferencia entre los límites de memoria privada y virtual?

Eso es muy complicado, aquí hay una publicación rápida que encontré que podría ayudar: http://cybernetnews.com/cybernotes-windows-memory-usage-explained/

5) ¿Existen razones de peso para NO ejecutar un grupo de aplicaciones por sitio?

Nuevamente, la única razón por la que puedo pensar es que si hay algún tipo de "recurso compartido" que necesitan las aplicaciones múltiples, entonces querrás ejecutarlas en el mismo proceso.

Para aplicaciones y sitios web de propósito general, IIS está bastante bien configurado con sus valores predeterminados.

****ACTUALIZAR****

En lo que respecta a su solicitud de información adicional en el n. ° 2, no debe hacerlo a menos que tenga una necesidad específica de hacerlo. Incluso con las acciones del servidor que llevan mucho tiempo, las solicitudes se atienden utilizando múltiples subprocesos, y usted querrá usar "Solicitudes asíncronas" para manejar tareas de ejecución prolongada (lo que libera un subproceso de grupo de subprocesos para manejar otras solicitudes). Siendo realistas, no se me ocurre ninguna buena razón para permitir múltiples procesos para un solo grupo.

Una vez que comience a hablar de múltiples procesos, entonces potencialmente se encontrará con cosas como: perder el estado de la sesión porque una sesión está viva en el proceso 1, pero la solicitud está siendo manejada por el proceso 2. O peor aún, tiene que descubrir cómo hacer alguna comunicación entre procesos, lo cual es un verdadero dolor.

No importa con lo que venga en relación con una razón para múltiples procesos, estaría dispuesto a apostar que hay una mejor manera de lidiar con eso (en lugar de activar otro proceso).

Gorila codificante
fuente
Agradezco la respuesta reflexiva y la he aceptado. Si tiene información más específica para el # 2, se lo agradecería. "Lo mejor es dejarlo solo" es ciertamente un sabio consejo, pero también sería bueno saber cuándo utilizar múltiples procesos de trabajo. Supongo que esto es más relevante cuando tiene algunas acciones del servidor que tardan mucho tiempo en devolver una respuesta, como un gran informe, un servicio web que acepta grandes publicaciones y similares. También supongo que se aplican todas las cosas de concurrencia de hilo normal.
Eric Burcham
Solo para agregar: si espera que sus aplicaciones no funcionen bien juntas, el cuadro de diálogo de instalación de IIS señala que Windows System Resource Manager se puede instalar y usar para restringir el uso de CPU y memoria por parte de los grupos de aplicaciones.
TristanK
@ TristanK, gracias por el consejo. Eso fue inmensamente útil.
Eric Burcham
@Coding Gorilla - Gracias de nuevo por la información. Decidí investigar seriamente "por qué usar un jardín web" y obtuve varias respuestas. Se aplican todas las advertencias que mencionó, en particular, el acceso asíncrono a recursos compartidos, como varios cachés y sesiones de usuario. La función de jardín web esencialmente le permite cargar solicitudes de saldo en un solo servidor con más que en el núcleo. Por lo tanto, debe lidiar con todas las advertencias con las que normalmente se enfrenta en un escenario de carga equilibrada, excepto para enrutar las solicitudes.
Eric Burcham
@Coding Gorilla - Continúa ... La mejor "razón" que encontré para usar la función de proceso de múltiples trabajadores es aumentar el rendimiento. Echa un vistazo a este enlace: iis-aid.com/articles/performance_testing/… . Por supuesto, es mejor que sepa lo que está haciendo con todos los aspectos asincrónicos de la programación que a menudo descuidamos tener en cuenta con los sitios web, ya que la mayoría de ellos (al menos para empezar) ejecutan un solo hilo de trabajo. Entonces, la respuesta corta a mi pregunta es: Pruébelo si tiene problemas de rendimiento.
Eric Burcham
4

Siempre configuro un grupo de aplicaciones dedicado para un sitio web. Los escenarios de alojamiento de sitios web de bajo costo son donde tiene sentido tener una gran cantidad de sitios por grupo de aplicaciones.

Los límites de memoria son realmente solo umbrales de seguridad primitivos para evitar que un sitio consuma todos los recursos del sistema. Tenga en cuenta que esto es más un problema potencial en Windows 2008 R2 x64 que en IIS 6.0 x86, porque las aplicaciones x86 tenían un límite de memoria natural de 2 GB. Es mucho más fácil en IIS 7.5 que una aplicación con pérdida de memoria consuma grandes cantidades de memoria.

Tampoco soy un gran admirador de los grupos de aplicaciones de reciclaje. Si tengo un grupo de aplicaciones y soy la única aplicación en ejecución, si nuestro código no tiene nada de malo, probablemente no sea necesario reciclar el grupo de aplicaciones. Y si hay un defecto en la aplicación, la última acción apropiada sería corregir el código.

Greg Askew
fuente
Gracias por señalar el límite de 32 bits en la memoria. No sé cómo olvido estas cosas. También creo que el enfoque correcto si tiene una aplicación lo suficientemente defectuosa como para bloquear un grupo de aplicaciones es solucionarlo, suponiendo que tenga acceso al código. Agradezco el consejo!
Eric Burcham
Hicimos algunas pruebas por nuestra cuenta. La ejecución de un grupo de aplicaciones parece tener una sobrecarga de aproximadamente 64K por grupo de aplicaciones arriba de ejecutar todas las aplicaciones en el mismo grupo de aplicaciones. Eso es durante un período de muestra de 12 horas usando el monitor de rendimiento para controlar el consumo de memoria. Esto estaba en un servidor de 64 bits. Creo que si esta simple prueba resulta ser correcta, entonces el costo de recursos de un grupo de aplicaciones por aplicación es básicamente insignificante en el hardware moderno.
Eric Burcham