Mejores Practicas en Aplicaciones Servidor ¿Y qué c#~ es esto? Alejandro Mezcua ByteaByte...

38
Mejores Practicas en Mejores Practicas en Aplicaciones Servidor Aplicaciones Servidor ¿Y qué c#~€ es esto? ¿Y qué c#~€ es esto? Alejandro Mezcua Alejandro Mezcua ByteaByte ByteaByte Microsoft MVP Microsoft MVP Alejandro.mezcua@byteabyt Alejandro.mezcua@byteabyt e.net e.net Jose Murillo Jose Murillo Microsoft Ibérica Microsoft Ibérica ISV Developer Evangelist ISV Developer Evangelist [email protected] [email protected]

Transcript of Mejores Practicas en Aplicaciones Servidor ¿Y qué c#~ es esto? Alejandro Mezcua ByteaByte...

Page 1: Mejores Practicas en Aplicaciones Servidor ¿Y qué c#~ es esto? Alejandro Mezcua ByteaByte Microsoft MVP Alejandro.mezcua@byteabyte.net Jose Murillo Microsoft.

Mejores Practicas en Aplicaciones ServidorMejores Practicas en Aplicaciones Servidor¿Y qué c#~€ es esto?¿Y qué c#~€ es esto?

Alejandro MezcuaAlejandro MezcuaByteaByteByteaByte

Microsoft MVPMicrosoft [email protected]@byteabyte.net

Jose MurilloJose MurilloMicrosoft IbéricaMicrosoft IbéricaISV Developer EvangelistISV Developer [email protected]@microsoft.com

Page 2: Mejores Practicas en Aplicaciones Servidor ¿Y qué c#~ es esto? Alejandro Mezcua ByteaByte Microsoft MVP Alejandro.mezcua@byteabyte.net Jose Murillo Microsoft.

• Pruebas de StressPruebas de Stress• Páginas Web AsíncronasPáginas Web Asíncronas• Instrumentación de AplicacionesInstrumentación de Aplicaciones• Entornos de Alto RendimientoEntornos de Alto Rendimiento• Localización de problemas de memoria con Localización de problemas de memoria con

CLRProfilerCLRProfiler• Microsoft Pattern & PracticesMicrosoft Pattern & Practices• ReferenciasReferencias

Page 3: Mejores Practicas en Aplicaciones Servidor ¿Y qué c#~ es esto? Alejandro Mezcua ByteaByte Microsoft MVP Alejandro.mezcua@byteabyte.net Jose Murillo Microsoft.

Pruebas de StressPruebas de Stress

Page 4: Mejores Practicas en Aplicaciones Servidor ¿Y qué c#~ es esto? Alejandro Mezcua ByteaByte Microsoft MVP Alejandro.mezcua@byteabyte.net Jose Murillo Microsoft.

• QoSQoS

Page 5: Mejores Practicas en Aplicaciones Servidor ¿Y qué c#~ es esto? Alejandro Mezcua ByteaByte Microsoft MVP Alejandro.mezcua@byteabyte.net Jose Murillo Microsoft.

• QoSQoS• Una de las mayores razones por las que Una de las mayores razones por las que

fracasan los proyectosfracasan los proyectos• SoluciónSolución

– Pruebas de carga integradas en los ciclos de Pruebas de carga integradas en los ciclos de compilacióncompilación

– Visual Studio Test EditionVisual Studio Test Edition para automatizarlas para automatizarlas

Page 6: Mejores Practicas en Aplicaciones Servidor ¿Y qué c#~ es esto? Alejandro Mezcua ByteaByte Microsoft MVP Alejandro.mezcua@byteabyte.net Jose Murillo Microsoft.

Visual StudioVisual StudioTeam Test EditionTeam Test Edition

Page 7: Mejores Practicas en Aplicaciones Servidor ¿Y qué c#~ es esto? Alejandro Mezcua ByteaByte Microsoft MVP Alejandro.mezcua@byteabyte.net Jose Murillo Microsoft.

• Aseguraos de definir vuestros requisitos de Aseguraos de definir vuestros requisitos de calidad de serviciocalidad de servicio

• Incorporar las pruebas de carga a vuestro ciclo Incorporar las pruebas de carga a vuestro ciclo de pruebas diarios con Team Testerde pruebas diarios con Team Tester

Page 8: Mejores Practicas en Aplicaciones Servidor ¿Y qué c#~ es esto? Alejandro Mezcua ByteaByte Microsoft MVP Alejandro.mezcua@byteabyte.net Jose Murillo Microsoft.

Páginas Web AsíncronasPáginas Web Asíncronas

Page 9: Mejores Practicas en Aplicaciones Servidor ¿Y qué c#~ es esto? Alejandro Mezcua ByteaByte Microsoft MVP Alejandro.mezcua@byteabyte.net Jose Murillo Microsoft.

• IIS 6 Worker ProcessesIIS 6 Worker Processes

Page 10: Mejores Practicas en Aplicaciones Servidor ¿Y qué c#~ es esto? Alejandro Mezcua ByteaByte Microsoft MVP Alejandro.mezcua@byteabyte.net Jose Murillo Microsoft.

• ASP.NET Worker Process (w3wp.exe)ASP.NET Worker Process (w3wp.exe)

Page 11: Mejores Practicas en Aplicaciones Servidor ¿Y qué c#~ es esto? Alejandro Mezcua ByteaByte Microsoft MVP Alejandro.mezcua@byteabyte.net Jose Murillo Microsoft.

• Cualquier operación que bloquee un Cualquier operación que bloquee un working working threadthread reduce la escalabilidad del servidor reduce la escalabilidad del servidor

• Si el bloqueo se debe a operaciones de CPU no Si el bloqueo se debe a operaciones de CPU no podemos hacer mucho, pero si son bloqueos en podemos hacer mucho, pero si son bloqueos en espera de eventos externos (IO, eventos, etc.) espera de eventos externos (IO, eventos, etc.) podemos usar otro hilo asíncronopodemos usar otro hilo asíncrono– Llamadas a otros servicios webLlamadas a otros servicios web– Accesos a BDsAccesos a BDs– Acceso a ficheros localesAcceso a ficheros locales– Páginas ASPX pesadasPáginas ASPX pesadas– ……

Page 12: Mejores Practicas en Aplicaciones Servidor ¿Y qué c#~ es esto? Alejandro Mezcua ByteaByte Microsoft MVP Alejandro.mezcua@byteabyte.net Jose Murillo Microsoft.

Páginas WebPáginas WebAsíncronasAsíncronas

Page 13: Mejores Practicas en Aplicaciones Servidor ¿Y qué c#~ es esto? Alejandro Mezcua ByteaByte Microsoft MVP Alejandro.mezcua@byteabyte.net Jose Murillo Microsoft.

• Pasad a páginas asíncronas aquellas que Pasad a páginas asíncronas aquellas que consuman mucho tiempo en espera de IOconsuman mucho tiempo en espera de IO

• Ya no es necesario implementar Ya no es necesario implementar IHttpAsyncHandler “a manubrio” como en IHttpAsyncHandler “a manubrio” como en ASP.NET 1.x. Todo lo hace el atributo async=trueASP.NET 1.x. Todo lo hace el atributo async=true

• Cuidado, peticiones desde un mismo browser Cuidado, peticiones desde un mismo browser con mismo SessionID son serializadas por con mismo SessionID son serializadas por ASP.NETASP.NET

• Insisto, haced pruebas de stress Insisto, haced pruebas de stress

Page 14: Mejores Practicas en Aplicaciones Servidor ¿Y qué c#~ es esto? Alejandro Mezcua ByteaByte Microsoft MVP Alejandro.mezcua@byteabyte.net Jose Murillo Microsoft.

Instrumentación de AplicacionesInstrumentación de Aplicaciones

Page 15: Mejores Practicas en Aplicaciones Servidor ¿Y qué c#~ es esto? Alejandro Mezcua ByteaByte Microsoft MVP Alejandro.mezcua@byteabyte.net Jose Murillo Microsoft.

• ImprescindibleImprescindible en aplicaciones empresariales en aplicaciones empresariales• La instrumentación permite que la aplicación La instrumentación permite que la aplicación

exponga información de monitorización, exponga información de monitorización, depuración, rendimiento, etc.depuración, rendimiento, etc.– Permite hacerlo en un formato estándar para Permite hacerlo en un formato estándar para

analizarla desde herramientas de monitorización analizarla desde herramientas de monitorización empresariales tipo MOMempresariales tipo MOM

• La única forma de analizarla si la tenemos La única forma de analizarla si la tenemos hospedada en un hospedada en un hosterhoster externo externo

Page 16: Mejores Practicas en Aplicaciones Servidor ¿Y qué c#~ es esto? Alejandro Mezcua ByteaByte Microsoft MVP Alejandro.mezcua@byteabyte.net Jose Murillo Microsoft.

• Esenciales para instrumentar las aplicaciones Esenciales para instrumentar las aplicaciones con logs, trazas y contadores de rendimientocon logs, trazas y contadores de rendimiento

Módulo 1

LAB System.Diagnostics

Módulo 2

LAB System.Diagnostics

Page 17: Mejores Practicas en Aplicaciones Servidor ¿Y qué c#~ es esto? Alejandro Mezcua ByteaByte Microsoft MVP Alejandro.mezcua@byteabyte.net Jose Murillo Microsoft.

• Esenciales para instrumentar las aplicaciones Esenciales para instrumentar las aplicaciones con logs, trazas y contadores de rendimientocon logs, trazas y contadores de rendimiento

Módulo 1

LAB System.Diagnostics

Módulo 2

LAB System.Diagnostics

Event Log Ficheros

DB MSMQ

Page 18: Mejores Practicas en Aplicaciones Servidor ¿Y qué c#~ es esto? Alejandro Mezcua ByteaByte Microsoft MVP Alejandro.mezcua@byteabyte.net Jose Murillo Microsoft.

• Esenciales para instrumentar las aplicaciones Esenciales para instrumentar las aplicaciones con logs, trazas y contadores de rendimientocon logs, trazas y contadores de rendimiento

Módulo 1

LAB System.Diagnostics

Módulo 2

LAB System.Diagnostics

Event Log Ficheros

DB MSMQWMI

Page 19: Mejores Practicas en Aplicaciones Servidor ¿Y qué c#~ es esto? Alejandro Mezcua ByteaByte Microsoft MVP Alejandro.mezcua@byteabyte.net Jose Murillo Microsoft.

• Esenciales para instrumentar las aplicaciones Esenciales para instrumentar las aplicaciones con logs, trazas y contadores de rendimientocon logs, trazas y contadores de rendimiento

Módulo 1

LAB System.Diagnostics

Módulo 2

LAB System.Diagnostics

Event Log Ficheros

DB MSMQWMI

Performance Monitor

Page 20: Mejores Practicas en Aplicaciones Servidor ¿Y qué c#~ es esto? Alejandro Mezcua ByteaByte Microsoft MVP Alejandro.mezcua@byteabyte.net Jose Murillo Microsoft.

• Esenciales para instrumentar las aplicaciones Esenciales para instrumentar las aplicaciones con logs, trazas y contadores de rendimientocon logs, trazas y contadores de rendimiento

Módulo 1

LAB System.Diagnostics

Módulo 2

LAB System.Diagnostics

Microsoft Operations Manager

Event Log Ficheros

DB MSMQWMI

Performance Monitor

Page 21: Mejores Practicas en Aplicaciones Servidor ¿Y qué c#~ es esto? Alejandro Mezcua ByteaByte Microsoft MVP Alejandro.mezcua@byteabyte.net Jose Murillo Microsoft.

• Los detalles de la instrumentación quedan en Los detalles de la instrumentación quedan en los ficheros de configuración para los los ficheros de configuración para los administradoresadministradores– Destino de cada evento o traza (eventlog, fichero, Destino de cada evento o traza (eventlog, fichero,

DB, etc.)DB, etc.)– Nivel de logging (Nivel de logging (info, verbose, full, etcinfo, verbose, full, etc.).)

• Arquitecturas DistribuidasArquitecturas Distribuidas– Distributor ServiceDistributor Service

Page 22: Mejores Practicas en Aplicaciones Servidor ¿Y qué c#~ es esto? Alejandro Mezcua ByteaByte Microsoft MVP Alejandro.mezcua@byteabyte.net Jose Murillo Microsoft.

• Descargar y utilizar el Descargar y utilizar el Logging Application Logging Application BlockBlock y y System.Diagnostics System.Diagnostics en vuestras en vuestras aplicaciones!!aplicaciones!!– Incluid información para administradores en el log Incluid información para administradores en el log

de eventos (errores, avisos, etc.)de eventos (errores, avisos, etc.)– Incluid información de depuración y log para Incluid información de depuración y log para

desarrolladores en ficheros de trazasdesarrolladores en ficheros de trazas– Incluid contadores de rendimiento para el Incluid contadores de rendimiento para el

tuneado de aplicaciones a través del performance tuneado de aplicaciones a través del performance monitormonitor

Page 23: Mejores Practicas en Aplicaciones Servidor ¿Y qué c#~ es esto? Alejandro Mezcua ByteaByte Microsoft MVP Alejandro.mezcua@byteabyte.net Jose Murillo Microsoft.

Entornos de alto rendimientoEntornos de alto rendimiento

Page 24: Mejores Practicas en Aplicaciones Servidor ¿Y qué c#~ es esto? Alejandro Mezcua ByteaByte Microsoft MVP Alejandro.mezcua@byteabyte.net Jose Murillo Microsoft.

• Alta disponibilidad del servicioAlta disponibilidad del servicio

Objetivo: ‘5 nueves’ ;-)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

Page 25: Mejores Practicas en Aplicaciones Servidor ¿Y qué c#~ es esto? Alejandro Mezcua ByteaByte Microsoft MVP Alejandro.mezcua@byteabyte.net Jose Murillo Microsoft.

• Alto rendimiento continuadoAlto rendimiento continuado– El sistema completo ‘escala’ para el número de El sistema completo ‘escala’ para el número de

usuarios planteadousuarios planteado•El tiempo de respuesta es predecible El tiempo de respuesta es predecible

independientemente del número de independientemente del número de usuarios concurrentes (dentro del usuarios concurrentes (dentro del margen establecido)margen establecido)

Page 26: Mejores Practicas en Aplicaciones Servidor ¿Y qué c#~ es esto? Alejandro Mezcua ByteaByte Microsoft MVP Alejandro.mezcua@byteabyte.net Jose Murillo Microsoft.

• Escalabilidad verticalEscalabilidad vertical– Utilizar hardware más potenteUtilizar hardware más potente

•Más RAM, mejores discos…Más RAM, mejores discos…

• Escalabilidad horizontalEscalabilidad horizontal– Repartir la carga entre diversos equiposRepartir la carga entre diversos equipos

•Cluster Server para bases de datos …Cluster Server para bases de datos …•Network Load Balancing para Network Load Balancing para

aplicaciones (Web, FTP, …)aplicaciones (Web, FTP, …)

Page 27: Mejores Practicas en Aplicaciones Servidor ¿Y qué c#~ es esto? Alejandro Mezcua ByteaByte Microsoft MVP Alejandro.mezcua@byteabyte.net Jose Murillo Microsoft.

Inte

rnet

Servidores Web IIS Balance de carga NLB

Firewall balance de cargaMicrosoft ISA Server / NLBCheckPoint / StoneBeat

Cluster Base de DatosSQL Server / Microsoft Cluster Server

LAN DMZ

LAN Interna

Usuarios (IE / Firefox)

Page 28: Mejores Practicas en Aplicaciones Servidor ¿Y qué c#~ es esto? Alejandro Mezcua ByteaByte Microsoft MVP Alejandro.mezcua@byteabyte.net Jose Murillo Microsoft.

• Servicios repartidos por varias máquinas Servicios repartidos por varias máquinas físicasfísicas– Mayor latencia por cada solicitudMayor latencia por cada solicitud

• Más procesadoresMás procesadores– Ojo con los threadsOjo con los threads

• ClusterCluster– No fijar nada por código al nombre concreto de No fijar nada por código al nombre concreto de

una máquina, se usará el nombre virtual del una máquina, se usará el nombre virtual del clustercluster

Page 29: Mejores Practicas en Aplicaciones Servidor ¿Y qué c#~ es esto? Alejandro Mezcua ByteaByte Microsoft MVP Alejandro.mezcua@byteabyte.net Jose Murillo Microsoft.

• Network Load BalancingNetwork Load Balancing– No fijar por código nada al nombre de una máquinaNo fijar por código nada al nombre de una máquina– ¿Se usan variables de sesión/aplicación?¿Se usan variables de sesión/aplicación?

•¿Es posible codificar los datos en la URL o ¿Es posible codificar los datos en la URL o en un campo de formulario oculto?en un campo de formulario oculto?

•Si no, en ASP.NET es fácil mover la sesión a Si no, en ASP.NET es fácil mover la sesión a un servidor externoun servidor externo

•Las variables de aplicación están asociadas Las variables de aplicación están asociadas a la máquinaa la máquina

Page 30: Mejores Practicas en Aplicaciones Servidor ¿Y qué c#~ es esto? Alejandro Mezcua ByteaByte Microsoft MVP Alejandro.mezcua@byteabyte.net Jose Murillo Microsoft.

• CachingCaching• Habilitar/deshabilitar ‘session state’ y ‘view Habilitar/deshabilitar ‘session state’ y ‘view

state’state’• Optimizar el acceso a datosOptimizar el acceso a datos

– No consultar 1000 registros para mostrar 10 ;-)No consultar 1000 registros para mostrar 10 ;-)– Impersonar al usuario para acceder a SQL Server Impersonar al usuario para acceder a SQL Server

deshabilita ‘connection pooling’deshabilita ‘connection pooling’

Page 31: Mejores Practicas en Aplicaciones Servidor ¿Y qué c#~ es esto? Alejandro Mezcua ByteaByte Microsoft MVP Alejandro.mezcua@byteabyte.net Jose Murillo Microsoft.

Localización de problemas de Localización de problemas de memoria con CLRProfilermemoria con CLRProfiler

Page 32: Mejores Practicas en Aplicaciones Servidor ¿Y qué c#~ es esto? Alejandro Mezcua ByteaByte Microsoft MVP Alejandro.mezcua@byteabyte.net Jose Murillo Microsoft.

• Aplicación no soportada que permite trazar la Aplicación no soportada que permite trazar la memoria en uso de una aplicación .NETmemoria en uso de una aplicación .NET– Desktop, servicios de sistema o WebDesktop, servicios de sistema o Web

• MuestraMuestra– Estado de la memoria en un momento dado Estado de la memoria en un momento dado

mediante gráficosmediante gráficos– Estadísticas del GCEstadísticas del GC– Información sobre los métodos llamados y cargadosInformación sobre los métodos llamados y cargados– Mucho más…Mucho más…

Page 33: Mejores Practicas en Aplicaciones Servidor ¿Y qué c#~ es esto? Alejandro Mezcua ByteaByte Microsoft MVP Alejandro.mezcua@byteabyte.net Jose Murillo Microsoft.

CLR ProfilerCLR Profiler

Page 34: Mejores Practicas en Aplicaciones Servidor ¿Y qué c#~ es esto? Alejandro Mezcua ByteaByte Microsoft MVP Alejandro.mezcua@byteabyte.net Jose Murillo Microsoft.

Microsoft Pattern & PracticesMicrosoft Pattern & Practices

Page 35: Mejores Practicas en Aplicaciones Servidor ¿Y qué c#~ es esto? Alejandro Mezcua ByteaByte Microsoft MVP Alejandro.mezcua@byteabyte.net Jose Murillo Microsoft.

• Web Services Software FactoryWeb Services Software Factory• Enterprise Library for .NET Framework 2.0Enterprise Library for .NET Framework 2.0

– Caching Application BlockCaching Application Block– Configuration Application BlockConfiguration Application Block– Cryptography Application BlockCryptography Application Block– Data Access Application BlockData Access Application Block– Exception Handling Application BlockException Handling Application Block– Logging & Instrumentation Application BlockLogging & Instrumentation Application Block– Security Application BlockSecurity Application Block

Page 36: Mejores Practicas en Aplicaciones Servidor ¿Y qué c#~ es esto? Alejandro Mezcua ByteaByte Microsoft MVP Alejandro.mezcua@byteabyte.net Jose Murillo Microsoft.

• Data PatternsData Patterns• Web Service Security GuidanceWeb Service Security Guidance• Improving .NET Application Performance and Improving .NET Application Performance and

ScalabilityScalability• Improving Web Application SecurityImproving Web Application Security• Application Architecture for .NET: Designing Application Architecture for .NET: Designing

Applications and ServicesApplications and Services• Enterprise Solution Patterns Using Enterprise Solution Patterns Using

Microsoft .NETMicrosoft .NET

Page 37: Mejores Practicas en Aplicaciones Servidor ¿Y qué c#~ es esto? Alejandro Mezcua ByteaByte Microsoft MVP Alejandro.mezcua@byteabyte.net Jose Murillo Microsoft.

• Software Tester Team CenterSoftware Tester Team Center– http://msdn2.microsoft.com/en-us/teamsystem/aa71

8941.aspx

• Asynchronous Pages in ASP.NET 2.0 – Wicked Asynchronous Pages in ASP.NET 2.0 – Wicked CodeCode– http://msdn.microsoft.com/msdnmag/issues/05/10/

WickedCod

• Enterprise Library for .NET Framework 2.0Enterprise Library for .NET Framework 2.0– http://msdn2.microsoft.com/en-us/library/aa480453.

aspx

• http://www.byteabyte.net • http://geeks.ms/blogs/amezcua

Page 38: Mejores Practicas en Aplicaciones Servidor ¿Y qué c#~ es esto? Alejandro Mezcua ByteaByte Microsoft MVP Alejandro.mezcua@byteabyte.net Jose Murillo Microsoft.