Mejores Practicas en Aplicaciones Servidor ¿Y qué c#~€ es esto? Jose Murillo Alejandro Mezcua Microsoft Ibérica ISV Developer Evangelist Josemurl@microsoft.com ByteaByte Microsoft MVP Alejandro.mezcua@byteabyte.net 1
Agenda Pruebas de Stress Páginas Web Asíncronas Instrumentación de Aplicaciones Entornos de Alto Rendimiento Localización de problemas de memoria con CLRProfiler Microsoft Pattern & Practices Referencias
Pruebas de Stress 3
Pruebas de Stress QoS
Pruebas de Stress QoS Una de las mayores razones por las que fracasan los proyectos Solución Pruebas de carga integradas en los ciclos de compilación Visual Studio Test Edition para automatizarlas
Visual Studio Team Test Edition 6
Resumiendo… Aseguraos de definir vuestros requisitos de calidad de servicio Incorporar las pruebas de carga a vuestro ciclo de pruebas diarios con Team Tester
Páginas Web Asíncronas 8
¿Cuál es el problema? IIS 6 Worker Processes
¿Cuál es el problema? ASP.NET Worker Process (w3wp.exe)
¿Cuál es el problema? Cualquier operación que bloquee un working thread reduce la escalabilidad del servidor Si el bloqueo se debe a operaciones de CPU no podemos hacer mucho, pero si son bloqueos en espera de eventos externos (IO, eventos, etc.) podemos usar otro hilo asíncrono Llamadas a otros servicios web Accesos a BDs Acceso a ficheros locales Páginas ASPX pesadas …
Páginas Web Asíncronas 12
Resumiendo… Pasad a páginas asíncronas aquellas que consuman mucho tiempo en espera de IO Ya no es necesario implementar IHttpAsyncHandler “a manubrio” como en ASP.NET 1.x. Todo lo hace el atributo async=true Cuidado, peticiones desde un mismo browser con mismo SessionID son serializadas por ASP.NET Insisto, haced pruebas de stress
Instrumentación de Aplicaciones 14
¿Qué es la instrumentación? Imprescindible en aplicaciones empresariales La instrumentación permite que la aplicación exponga información de monitorización, depuración, rendimiento, etc. Permite hacerlo en un formato estándar para analizarla desde herramientas de monitorización empresariales tipo MOM La única forma de analizarla si la tenemos hospedada en un hoster externo
Logging Application Block Esenciales para instrumentar las aplicaciones con logs, trazas y contadores de rendimiento Módulo 1 Módulo 2 LAB System.Diagnostics LAB System.Diagnostics
Logging Application Block Esenciales para instrumentar las aplicaciones con logs, trazas y contadores de rendimiento Módulo 1 Módulo 2 LAB System.Diagnostics LAB System.Diagnostics Event Log Ficheros DB MSMQ
Logging Application Block Esenciales para instrumentar las aplicaciones con logs, trazas y contadores de rendimiento Módulo 1 Módulo 2 LAB System.Diagnostics LAB System.Diagnostics Event Log Ficheros DB MSMQ WMI
Logging Application Block Esenciales para instrumentar las aplicaciones con logs, trazas y contadores de rendimiento Módulo 1 Módulo 2 LAB System.Diagnostics LAB System.Diagnostics Event Log Ficheros DB MSMQ Performance Monitor WMI
Logging Application Block Esenciales para instrumentar las aplicaciones con logs, trazas y contadores de rendimiento Módulo 1 Módulo 2 LAB System.Diagnostics LAB System.Diagnostics Event Log Ficheros DB MSMQ Performance Monitor WMI Microsoft Operations Manager
Logging Application Block Los detalles de la instrumentación quedan en los ficheros de configuración para los administradores Destino de cada evento o traza (eventlog, fichero, DB, etc.) Nivel de logging (info, verbose, full, etc.) Arquitecturas Distribuidas Distributor Service
Resumiendo… Descargar y utilizar el Logging Application Block y System.Diagnostics en vuestras aplicaciones!! Incluid información para administradores en el log de eventos (errores, avisos, etc.) Incluid información de depuración y log para desarrolladores en ficheros de trazas Incluid contadores de rendimiento para el tuneado de aplicaciones a través del performance monitor
Entornos de alto rendimiento 23
Necesidades planteadas (I) Alta disponibilidad del servicio Objetivo: ‘5 nueves’ ;-) Disponibilidad Tiempo sin sistema al año permitido 99% 3.65 Días 99.9% 8.67 Horas 99.99% 51.98 Minutos 99.999% 5 Minutos
Necesidades planteadas (II) Alto rendimiento continuado El sistema completo ‘escala’ para el número de usuarios planteado El tiempo de respuesta es predecible independientemente del número de usuarios concurrentes (dentro del margen establecido)
Posibles soluciones Escalabilidad vertical Más RAM, mejores discos… Utilizar hardware más potente Más RAM, mejores discos… Escalabilidad horizontal Repartir la carga entre diversos equipos Cluster Server para bases de datos … Network Load Balancing para aplicaciones (Web, FTP, …)
Esquema alta disponibilidad
Implicaciones en aplicaciones (I) Servicios repartidos por varias máquinas físicas Mayor latencia por cada solicitud Más procesadores Ojo con los threads Cluster No fijar nada por código al nombre concreto de una máquina, se usará el nombre virtual del cluster
Implicaciones en aplicaciones (II) Network Load Balancing No fijar por código nada al nombre de una máquina ¿Se usan variables de sesión/aplicación? ¿Es posible codificar los datos en la URL o en un campo de formulario oculto? Si no, en ASP.NET es fácil mover la sesión a un servidor externo Las variables de aplicación están asociadas a la máquina
Tácticas comunes Caching Habilitar/deshabilitar ‘session state’ y ‘view state’ Optimizar el acceso a datos No consultar 1000 registros para mostrar 10 ;-) Impersonar al usuario para acceder a SQL Server deshabilita ‘connection pooling’
Localización de problemas de memoria con CLRProfiler 31
¿CLR Profiler? Aplicación no soportada que permite trazar la memoria en uso de una aplicación .NET Desktop, servicios de sistema o Web Muestra Estado de la memoria en un momento dado mediante gráficos Estadísticas del GC Información sobre los métodos llamados y cargados Mucho más…
CLR Profiler 33
Microsoft Pattern & Practices 34
Microsoft Pattern & Practices Web Services Software Factory Enterprise Library for .NET Framework 2.0 Caching Application Block Configuration Application Block Cryptography Application Block Data Access Application Block Exception Handling Application Block Logging & Instrumentation Application Block Security Application Block
Microsoft Pattern & Practices Data Patterns Web Service Security Guidance Improving .NET Application Performance and Scalability Improving Web Application Security Application Architecture for .NET: Designing Applications and Services Enterprise Solution Patterns Using Microsoft .NET
Referencias Software Tester Team Center http://msdn2.microsoft.com/en-us/teamsystem/aa718941.aspx Asynchronous Pages in ASP.NET 2.0 – Wicked Code http://msdn.microsoft.com/msdnmag/issues/05/10/WickedCod Enterprise Library for .NET Framework 2.0 http://msdn2.microsoft.com/en-us/library/aa480453.aspx http://www.byteabyte.net http://geeks.ms/blogs/amezcua
38