Archivo por meses: May 2007

Medir el desempeño de Servicios Web plataforma DotNet.

 

Un cliente, como siempre, me ha preguntado cómo puede medir el desempeño de los Web Services que piensa Construir utilizando DotNet.

Le escribí el siguiente mail, para que pueda usarlo como una guía para hacer mediciones.

 

¿Cómo funcionan los Web Services?

La arquitectura de los Web Services [1] está basada en la infraestructura ASP.NET y usa serialización XML [2]. Cuando un el servidor Web procesa una requerimiento HTTP para un Web Services, Internet Information Server (IIS) [3] mapea la extensión (.asmx) a la interfaz de programación de aplicaciones Internet Server (ISAPI) [4] de ASP.NET (Aspnet_Isapi.dll). Está ISAPI entonces envía el requerimiento al proceso de trabajo de ASP.NET, donde entra en el Pipeline de procesamiento de requerimientos, el cual es contralo por el objeto HttpRuntime [5]. Esto se muestra en el diagrama 1.

 

Diagrama 1: Arquitectura ASP.NET Web Services y flujo de requerimientos

El requerimiento pasa inicialmente por el objeto HttpApplication [6], seguido por la serie de objetos HttpModule [7] registrados. Los objetos HttpModule son registrados en el archivo de configuración Machine.config o en la sección <httpModules> del Web.config de cada Servicio Web. Los objetos HttpModule son los responsables de manejar los aspectos como autentificación, autorización, Caching y otras tareas trasversales.

Luego de pasar el requerimiento a través de los módulos HTTP en el Pipeline, el objeto HttpRuntime verifica con el administrador Webservicehandlerfactory [8] que la extensión .asmx esté registrada. Este crea una instancia del administrador HTTP que es responsable de procesar el requerimiento al Web Services. Este administrador (Handle) deriva de WebServicesHandler [9]. El administrador HTTP usa reflexión (Reflection) [10] para trasformar el mensaje SOAP en invocaciones a los métodos del Web Services.

Medidas de desempeño para Web Services

Para determinar de manera efectiva el desempeño de Web Services en DotNet es necesario poder medir los siguientes aspectos:

  • Throghput: Medida de la cantidad de requerimientos ejecutados por segundo y cuellos de botella relativos al Throghput, como el número de requerimiento en espera de ser ejecutados y el número de requerimientos que se están rechazando.
  • Cost of throghput: Medida del uso de procesador, memoria, I/O de disco y utilización de red para responder a los requerimientos que se están ejecutando.
  • Request Execution Time: medida del tiempo que toma la ejecución de un método del Web Services en el servidor.
  • Latency: Medida del tiempo que toma la ejecución y llegada de la respuesta al cliente de un requerimiento al Web Services.
  • Cache utilization: Medida de la razón entre Cache Hits y Cache misses. Esto necesita ser visto en un contexto amplio porque el uso de memoria virtual afecta el desempeño del cache.
  • Error and Exception: medida del número de errores y excepciones generadas.
  • Xml Serialization: Mide el costo de la serialización de XML, muy importante en los Servicios Web.

¿Cómo medir?

Como los Web Services son un caso particular de ASP.NET es necesario aclarar primero como medir desempeño en ASP.NET. Para esto es necesario preliminarmente utilizar la herramienta Performance Counter [12].

El siguiente diagrama 2 muestra el ciclo de vida de los requerimientos en ASP.NET.

 

Diagrama 2: Ciclo de vida y medidas para un requerimiento ASP.NET

Throughput

  • ASP.NET Applications\Requests/Sec

    Umbral: depende de la lógica de negocio.

    Significado: es uno de los primeros indicadores que se usan para calcular la capacidad necesaria para el sistema.

  • Web Service\ISAPI Extension Requests/sec

    Umbral: depende de la lógica de negocio.

    Significado: La tasa de requerimientos a la ISAPI que se están procesando simultáneamente. Este contador no es afectado por los Work process que se reinician como si lo es ASP.NET Applications\Requests/Sec.

     

Cost of Throughput

El costo del throughput es la medida del uso de procesador, memoria, I/O de disco y utilización de red para responder a los requerimientos que se están ejecutando. Esto no es específico a los Web Servies ni ASP.NET. Pueden verse los indicadores en detalle en el capítulo 15, sección System Resource [11].

 

 

Request

  • ASP.NET\Requests Current

    Umbral: No tiene un valor específico.

    Significado: Número de requerimientos que está manejando la ISAPI, incluidos encola, ejecutándose y esperando a escribir en el cliente. ASP.NET comienza a rechazar requerimientos cuando el contador excede el número definido en requestQueueLimit.

     

  • ASP.NET Applications\Requests Executing

    Umbral: No tiene un valor específico.

    Significado: Número de requerimientos que se están ejecutando. El objeto HttpRuntime controla este contador, incrementándolo cuando atiende un nuevo requerimiento y disminuyéndolo cuando terminar de procesar el requerimiento.

     

  • ASP.NET Applications\ Requests Timed Out

    Umbral: No tiene un valor específico.

    Significado: Cantidad de requerimientos que dieron TimeOut y no se ejecutaron.

     

Queues

  • ASP.NET\ Requests Queued

    Umbral: No tiene un valor específico.

    Significado: Cantidad de requerimientos actualmente en colas. Los requerimientos encolados tienen un límite fijado por configuración en el parámetro requestQueueLimit que tiene como límite por defecto 5.000.

     

  • ASP.NET Applications\ Requests In Application

    Umbral: No tiene un valor específico.

    Significado: Cantidad de requerimientos actualmente en cola para cada directorio virtual, que es el equivalente a una aplicación. Estos requerimientos encolados tienen un límite fijado por configuración en el parámetro appRequestQueueLimit , cuando es superado este límite retorna el mensaje "Server Too busy".

     

  • Queue ASP.NET\ Requests Rejected

    Umbral: No tiene un valor específico.

    Significado: representa el número de requerimientos rechazados porque la cola de requerimientos está llena. ASP.NET Work Process comienza a rechazar requerimientos cuando sobrepasa el límite configurado en requestQueueLimit la medida ASP.NET\ Requests Queued.

     

  • ASP.NET\ Requests Wait Time

    Umbral: 1.000 milisegundos, El promedio debe tender a cero segundos de tiempo de espera en la cola de requerimientos.

    Significado: representa el tiempo de espera del último requerimiento en la cola Name Pipe entre IIS y el Work Process ASP.NET. Esta medida no incluye ningún otro tiempo de espera.

     

Response Time and Latency

El tiempo de respuesta y la latencia pueden ser medidos desde la perspectiva del cliente o del servidor. Del lado del cliente, se puede medir el tiempo desde que llega el primer y el último byte de la respuesta. La latencia en este caso incluye la latencia de la red (tiempo que agrega la red) y la latencia del servidor (tiempo que toma el servicio en responder al requerimiento). La medida del primer Byte se llama TTFB y la del último TTLB y se pueden capturar con herramientas como ACT [13].

En el lado del cliente es posible medir el tiempo de ejecución de un requerimiento utilizando el contador ASP.NET\Request Execution Time. El diagrama 3 muestra las principales componentes necesarias para estas medidas.

Diagrama 3

  • TTFB

    Umbral: Depende del tipo de requerimiento.

    Significado: Tiempo que pasa entre el envío del requerimiento y la recepción del primer Byte de la respuesta.

     

     

  • TTLB

    Umbral: Depende del tipo de requerimiento.

    Significado: Tiempo que pasa entre el envío del requerimiento y la recepción del último Byte de la respuesta.

 

  • ASP.NET\Request Execution Time

    Umbral: Depende del tipo de requerimiento.

    Significado: Tiempo que se tomó la ejecución del último requerimiento procesado.

     

Cache Utilization

  • ASP.NET Applications\Cache Total Entries

    Umbral: no tiene un valor específico.

    Significado: este contador muestra la cantidad de elementos en el cache, tanto internos como externos. ASP.NET usa el chache para almacenar objetos que son caros de crear por ejemplo objetos de configuración.

     

  • ASP.NET Applications\Cache Total Hit Ratio

    Umbral: Con memoria suficiente normalmente se debe tener sobre el 80%.

    Significado: este contador muestra las llamadas al Cache tanto internas como externas.

     

Loading

  • .NET CLR Loading\ Current appdomains

    Umbral: el valor debe ser el mismo que el numero de aplicaciones Web más uno.

    Significado: el número de Appdomains cargados en el proceso.

     

  • .NET CLR Loading\ Current Assemblies

    Umbral: No tiene un valor específico.

    Significado: el número de Assemblies cargados en el proceso.

 

Worker Process Restarts

  • ASP.NET\ Worker Process Restarts

    Umbral: No tiene un valor específico.

    Significado: el número de veces que se recicla al aplicación Web y el Work process.

Xml Serialization

Cuando se serializa y se hidrata un objeto, proceso inverso, es posible calcular el costo de estas acciones en términos del uso de memoria y el tamaño de la data. Para esto se puede utilizar el siguiente código de ejemplo [11].

using System;

using System.IO;

using System.Xml;

using System.Xml.Serialization;

using System.Text;

using System.Data;

//A sample class for serialization

public class MyClass

{

public string name;

public string surName;

public MyClass()

{

name = "FirstName";

surName = "LastName";

}

}

class Class1

{

private static long startMemory, endMemory, gcMemory, actualMemory,

overHeadMemory;

private static double percentOverhead;

static void Main(string[] args)

{

//stream to which the class object shall be serialized

Stream fs = new FileStream("SomeFile.txt", FileMode.Create);

MyClass mc = new MyClass(); XmlSerializer xs = new XmlSerializer(typeof(MyClass));

XmlWriter writer = new XmlTextWriter(fs, new UTF8Encoding());

// Clean up the GC memory and measure the measuring as the baseline before

// performing the serialization

System.GC.Collect();

System.GC.WaitForPendingFinalizers();

startMemory = System.GC.GetTotalMemory(false);

xs.Serialize(writer, mc);

//Calculate the overhead and the amount of data after serialization

CalculateOverhead(fs.Position);

DisplayInfo();

writer.Close();

fs.Close();

Console.ReadLine();

}

public static void CalculateOverhead(long streamPosition)

{

endMemory = System.GC.GetTotalMemory(false);

gcMemory = endMemory – startMemory;

actualMemory = streamPosition;

overHeadMemory = gcMemory – actualMemory;

percentOverhead = ((double)(overHeadMemory * 100)) /

(double)actualMemory;

}

public static void DisplayInfo()

{

Console.WriteLine("Total amount of data after serialization ->" + actualMemory);

Console.WriteLine("Total memory used by GC for serialization ->" + gcMemory);

Console.WriteLine("Overhead memory used serialization ->" + overHeadMemory);

Console.WriteLine("Percent overhead ->" + percentOverhead);

}

}

Código 1: Serialización

 

Referencias

  1. Web Serices, http://en.wikipedia.org/wiki/Web_services
  2. Serialización XML, http://msdn2.microsoft.com/es-es/library/90c86ass(VS.80).aspx
  3. Internet Information Services, http://es.wikipedia.org/wiki/IIS
  4. ISAPI, http://en.wikipedia.org/wiki/ISAPI
  5. HttpRuntime (Clase) ,

    http://msdn2.microsoft.com/es-es/library/system.web.httpruntime(VS.80).aspx

  6. HttpApplication ,

    http://msdn2.microsoft.com/es-es/library/system.web.httpapplication(VS.80).aspx

  7. HttpModules, http://msdn2.microsoft.com/en-us/library/zec9k340(VS.71).aspx
  8. WebServiceHandlerFactory Class,

    http://msdn2.microsoft.com/en-us/library/system.web.services.protocols.webservicehandlerfactory.aspx

  9. Securely Implement Request Processing, Filtering, and Content Redirection with HTTP Pipelines in ASP.NET,

    http://msdn.microsoft.com/library/default.asp?url=/msdnmag/issues/02/09/httppipelines/

  10. Reflection (computer science), http://en.wikipedia.org/wiki/Reflection_(computer_science)
  11. Improving .NET Application Performance and Scalability,

    http://msdn2.microsoft.com/en-us/library/ms998530.aspx

  12. Working with Performance Counters,

    http://www.microsoft.com/technet/prodtechnol/acs/reskit/acrkch10.mspx

  13. Microsoft Application Center Test,

    http://msdn2.microsoft.com/en-us/library/aa287410(VS.71).aspx

Mi primera aplicación BlackBerry

Ayer terminé mi primera aplicación BlackBerry (BB) [1] que hace consultas a una base de datos MSSQL [2]. Es un piloto demostrativo para Cliente XXX. El esquema de la solución es muy simple:

1.- Cliente JAVA desarrollado con MDS Studio [3]
2.-Web Services con dos métodos, uno para cada tipo de consulta.
3.- Una base de datos con los datos a consultar.

No es un tema complejo, como son simples consultas nada de la NASA. Ahora, MSD STUDIO es una herramienta hecha para aplicaciones simples, que tiene un Wizard con el cual puedes construir una aplicación de consultas a Web Services con 3 Click’s sin saber nada de JAVA. Utiliza un concepto muy cool, que es Workflow. Si ha usado el ide de desarrollo de BEA [4], hace tiempo que ellos lo tienen. Es una simplificación del concepto de Page Flow.

Una vez ejecutado el Wizard de desarrollo en base a servicios Web, queda customizar la aplicación, proceso que se hace con código JAVA y JAVA SCRIPT [5].
Los resultados son como esto.

 

Salu2

Referencias
[1] BlackBerry: http://na.blackberry.com/eng/developers/
[2] MSSQL: http://www.microsoft.com/sql/default.mspx
[3] MDS Studio: http://na.blackberry.com/eng/developers/downloads/studio.jsp
[4] BEA: http://es.bea.com/
[5] Java Script: http://es.wikipedia.org/wiki/JavaScript

Link’s de Biztalk :)

WCF Referencias

Compañía de Teatro «La Otra Compañía»

La Otra Compañía y El Cachafaz Tango Bar

tienen el agrado de anunciar el re-estreno del exitoso montaje

La Mas Fuerte,

 obra de August Strindberg llevada a escena por La Otra Compañía, bajo la co-direccion de Koke Velis y Verónica Tapia, y merecedora de los premios a "Mejor Actriz" y "Experimentacion de Nuevos Lenguajes Teatrales".

Esta 5ª Temporada se llevará a cabo en el segundo piso de El Cachafaz Tango Bar ubicado en Guardia Vieja 188, metro Pedro de Valdivia, Providencia, todos los Sabados de Junio (2, 9, 16, 23, 30) a las 21 hrs.

El precio es de 3500$ con cover incluido.

El elenco está formado por:

Verónica Tapia Actriz y Bailarina de la Universidad Catolica

Catherine Mazoyer Actriz de teatro y televisión de la Universidad de Chile

Guadalupe Becker – Músico en vivo, composición original.

 

Para Mayor información contactarse con Bárbara Muñoz, productora de La Otra Compañía, al 08 4573741 o visite nuestra pagina web www.laotra.cl

PD: Ya que la sala tiene una capacidad limitada de butacas se ruega reservar con anticipación al mismo telefono 08 4573741

Presentación Técnica de BI

La siguiente es la invitación a un evento de "PreVenta Técnica" que hicimos la semana pasada.

Me tocó hacer las PPT y explicar los conceptos básicos de BI, que son my interesantes.

También mostramos algunas demostraciones del uso de las herramientas Microsoft en este tema.

Vinieron 71 personas, y la encuesta de satisfacción da muy buen feedback

=)

La invitación…….


Estimado/a XXXXXX

Empresa YYYYYYYYYY

Presente

Datco Chile S.A. y Microsoft  tienen el agrado de invitar a desayuno y demostración en vivo de Solución Business Intelligent 2007 Microsoft: “Potencialidades de la Inteligencia de Negocios”, basados en la plataforma de soluciones para BI 2007 de Microsoft (entre ellas, SQL Server 2005, Reporting Services, Analysis Services, Business Scorecard, Sharepoint 2007, Excel 2007)

Situación del Negocio: Las personas que trabajan en su compañía, están preparadas para llevar adelante estrategias ganadoras. Es una realidad… pero ¿cómo se puede concretar? Sólo precisan contar con información relevante y herramientas de fácil utilización, que hagan posible un análisis certero y poderoso, que se transforme en productividad: resultado de decisiones inteligentes.

¿Por qué asistir?: Las herramientas y soluciones de Inteligencia de Negocios, implementadas y desarrolladas por  DATCO  ponen en las manos de su gente una estructura integrada de datos que favorece la planificación, análisis de impacto y riesgo previo a cada decisión, eliminando a su vez los tiempos y costos de la administración de entornos tecnológicos complejos. 

Este Desayuno está orientado a toda Compañía que desee aumentar las posibilidades para su estrategia de negocios actual, que busquen optimizar el desempeño en decisiones inteligentes y críticas de todas sus áreas. Por medio de demostraciones en vivo, Ud. podrá aumentar su visión de soluciones factibles con la plataforma 2007 de Microsoft.

Ventaja: Ver demos funcionales en este Desayuno, que aclararán su visión y estado actual de madurez estratégica de su negocio.

Lugar : Hotel Ritz Carlton

Fecha : 17 de Mayo de 2007

Hora  : 8:30Hrs

Serie de Conferencias Técnicas: WCF en MSDN, Lista Tercera Conferencia

El jueves 17 realizamos la tercera conferencia MSDN del ciclo Windows Comunication Fundation.
Resultó muy bien, llegaron unas 41 personas y tuvimos interesantes preguntas y respuestas durante la presentación.

El cansancio nos pasó la cuenta, tres semanas seguidas no es facil =)

La presentación se encuentra en el siguiente Link:
[5] Presentación WCF: Avanzada

Los demos se encuentran en el siguiente Link:
[6] Demostarciones WCF: Avanzada

Fue un gusto hacer este ciclo de conferencias, con las evaluaciones en la mano haré un POST de evaluación.

Salu2, nos vemos en Agosto despues del PDC.

 

Data in SOA, Part I: Transforming Data into Information

 

La administración de datos es un tema central en cualquier solución de sistemas.

En este notable articulo Web “Data in SOA, Part I: Transforming Data into Information”, se enfoca la administración de datos desde la perspectiva de SOA. Un modelamiento y administración de datos efectiva es un requisito fundamental para el éxito de una iniciativa SOA.

El Link es:

Data in SOA, Part I: Transforming Data into Information

Que lo disfruten, ojo que viene una segunda parte el próximo mes.

Serie de Conferencias Técnicas: Lista WCF en MSDN, Segunda Conferencia

 

El jueves 10 realizamos la segunda conferencia MSDN del ciclo Windows Comunication Fundation.
Resultó muy bien, llegaron unas 61 personas y tuvimos interesantes preguntas y respuestas durante la presentación.

Pecamos los presentadores de “estimación optimista del tiempo”. Un error común entre los desarrolladores al hacer estimaciones de tiempo =)

Queríamos hacer 13 demostraciones pero sólo pudimos hacer 9.

La presentación se encuentra en el siguiente Link:
[3] Presentación WCF: How To

Los demos se encuentran en el siguiente Link:
[4]Demos WCF: How To 

El próximo jueves realizaremos la tercera y última conferencia del sitio, la que entre nosotros llamamos “avanzada”. No se trata de temas crípticos que nadie entenderá sino de los tópicos que nunca se alcanzan a tratar en estas conferencias para desarrolladores, quedando así cubiertos todos los aspectos relacionados con WCF.

Pueden ver el detalle de la tercera y última conferencia Aquí

Los esperamos!