Archivo del Autor: Liarjo

Avatar de Desconocido

Acerca de Liarjo

....

Premio para el Equipo de Ma José, Asociación Latinoamericana de Fitopatología (ALF)

Los técnicos que se desarrollan en cualquier industria ven muchas veces vemos al mundo universitario distante y teórico.

En el mundo universitario se están haciendo muchas cosas importantes, muchas veces más significativas de lo que hace la industria.

En el siguiente link hay una muestra de ello, un trabajo sobre el conocimiento molecular de la Botrytis [2]  premiado en la ALF [1].

Premio de la Asociación Latinoamericana de Fitopatología (ALF)

[1] Asociación Latinoamericana de Fitopatología, http://www.fitopatologia.org/

[2] Botrytis, http://en.wikipedia.org/wiki/Botrytis_cinerea

Reginal Architect Forum 2007

Me llegó está invitación para participar en el Foro de arquitectos del cono sur.

Mi relación con este evento es accidentada, el año 2005 se realizó en Isla Margarita. En esa oportunidad me invitaron como expositor. Yo queriendo hacer las cosas lo mejor posible, la noche anterior a partir me quedé preparando mi presentación hasta las 3 de la mañana. El vuelo salía a las 7, así que decidí dormir un poco antes de irme. Bueno, no fue tan poco lo que dormí porque perdí el vuelo.

El año 2006, también me invitaron esta vez como participante. No pude ir porque estaba de viaje en la fecha del evento.

Al fin el 2007, me inscribo para participar. Tantos problemas para participar me han generado altas expectativas sobre el evento!.

Esta es la invitación.  

Estimado Juan Pablo ,

El 14 y 15 de Junio en Colonia, Uruguay, llevaremos a cabo la tercera edición de nuestro más importante evento anual para Arquitectos de Software y Gerentes de Desarrollo: el Regional Architect Forum (RAF07).

Nos acompañarán arquitectos y gerentes de desarrollo de las principales empresas de Argentina, Bolivia, Chile, Paraguay y Uruguay.

El evento estará basado en los siguientes tres pilares:  

  • Architectural trends:
    Software plus Services (S+S), Service Oriented Architecture (SOA)
  • Software methodologies “unleashed”
  • Enhanced User Experience (UX):
    Rich Internet Applications, Office-Based Applications, (OBAs) & new trends in UX

El RAF07 es una muy buena oportunidad para estar en contacto con los temas de actualidad  relacionados con la Arquitectura de Software, participar en sesiones de discusión e intercambiar experiencias con colegas de Sudamérica.

Agenda resumida

13/6   :  Arribo de los asistentes  /  Cena de Bienvenida

14/6   :  Día completo de presentaciones  /  Cena-show

15/6   :  ½ día de presentaciones  /  Cierre  /  Almuerzo  /  Partida de los asistentes

Staff de Speakers

  • Eduardo Mangarelli
    Director del Grupo de Nuevas Tecnologías – Microsoft Cono Sur
  • Ezequiel Glinsky
    Gerente del Grupo de Arquitectura .NET – Microsoft Cono Sur
  • Wilson Pais
    Gerente de Socios Desarrolladores – Microsoft Cono Sur
  • Roberto Schatz
    Arquitecto de Software – Microsoft Argentina
  • Alejandro Pacheco
    Arquitecto de Software – Microsoft Chile
  • Martin Cabrera
     Arquitecto de Software – Microsoft Chile
  • Pablo Cesar García
    Arquitecto de Software – Microsoft Uruguay
  • José Mauricio Alvarez
     Arquitecto de Software – Microsoft Región Andino
  • Ramiro Iturregui
    Gerente de Socios Desarrolladores – Microsoft Argentina
  • Lalo Steinmann 

Microsoft LATAM

  • Germán Matosas Senior Consultant – Microsoft Chile
  • Wilson Chiesa Software Architect Consultant – Microsoft Argentina

Invitados Especiales

  • Daniel Yankelevich Pragma Consultores
  • Luis Hereira Jefe Depto. Arquitectura, Ministerio de Salud – Chile
  • Marcelo Scasso Administración Federal de Ingresos Públicos (AFIP) – Argentina
  • Gustavo Larriera Administración Federal de Ingresos Públicos (AFIP) – Argentina
  • Claudio Sesto Administración Nacional de la Seguridad Social (ANSES) – Argentina
  • Roberto Pereyra Administración Nacional de la Seguridad Social (ANSES) – Argentina
  • Adrian Lasso Baufest
  • Rodolfo Finochietti Arquitecto .NET – Lagash Systems

Salu2

Proyecto MiniESB sobre Biztalk/WCF Código Abierto

Hace tiempo que estoy pensando en buscar algunos colaboradores para hacer un proyecto de código abierto para construir un mini ESB [1] con desarrolladores locales sobre BizTalk [2] / WCF [3].

Vamos por partes, código abierto para que sirva al resto de los miembros de la comunidad tanto como ejemplo de código y también como base para otros desarrollos.

Un mini ESB, porque es uno de los temas más confuso con los que me he topado en los proyectos relacionados con SOA [4] que he hecho. Además, la información disponible no es tan clara como se ve en otras plataformas.

Usando BizTalk porque es un excelente servidor para montar un ESB, el problema es que nadie te dice cómo. Por otra parte, WCF es una excelente Framework con el cual construir este tipo de aplicaciones.

No estoy seguro si hacerlo en BizTalk o con WCF, será resorte del equipo de trabajo ver cuál se usa.

Bueno, esto es una idea lanzada ahora queda reclutar el equipo y madurar el proyecto.

Un esquema de altísimo nivel de la solución sería

 

[Cliente] —–> [ESB(autentificación, autorización, catálogo)] —> [ServicioN]

 

Bueno, seguiré desarrollando esta idea, si alguien se quiere sumar es bienvenido.

Salu2

Referencias

[1]ESB, Enterprise Services Bus, http://en.wikipedia.org/wiki/Enterprise_service_bus

[2]BizTalk, Microsoft BizTalk Server, http://www.microsoft.com/biztalk/default.mspx

[3] WCF, Windows Communication Foundation, http://msdn2.microsoft.com/en-us/library/ms735119.aspx

[4]SOA, Service-oriented architecture, http://en.wikipedia.org/wiki/Service-oriented_architecture

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