Virtualización de Servicios con Managed Services Engines

Desde mis primeras incursiones en el desarrollo de Servicios empresariales, básicamente desde la aparición de las primeras betas de WCF, ha habido un miedo escénico que me ha atormentado y es la programación déspota e incontrolada de servicios, servicios y más servicios, lo que deriva en la producción de 300 servicios, con 300 enlaces distintos (no más de 10 comunes), en 50 endpoints y cuyo valor operativo era equivalente a 50 servicios bien diseñados y gobernados.  No concebía una arquitectura sólida de servicios sin una “torre de control” o una “cabina de mando” desde dónde poder ver, gestionar y modificar nuestros servicios.

Más adelante tuve la oportunidad de trabajar en una arquitectura SOA desarrollada en J2EE, dirigida por un ESB de Oracle y gestionada con herramientas de gobernabilidad SOA, que manejaban más de un centenar de servicios (proxy y legacy) y dónde la publicación y consumo de dichos servicios se realizaban a través de estrictas normas protocolarias (seguridad, documentación,…).

Ahora vuelvo, de nuevo, a tener la misma necesidad, diseñar una infraestructura de servicios y cuando hablo de infraestructura hablo de ese tipo de herramientas fundamentales para el control de todos y cada uno de los servicios. Pero ahora (en realidad hace ya un tiempo que existe) me encontré con un software, bajo licencia  Microsoft Public License (Ms-PL) y código abierto, que adopta de forma práctica la idea de Virtualización de Servicios, llamado Managed Services Engine.

Virtualización de Servicios

La idea básica del patrón de Virtualización de Servicios es el de aislar la complejidad de los servicios expuestos del cliente que los consume ya que  tras cada servicio se alberga una gran cantidad de aspectos tales como las localizaciones de los endpoints, las configuraciones de los enlaces, la aplicación de políticas, etc. Además muchas de las adopciones SOA a la practica no ofrecen soluciones sobre versionado de servicios, aplicación de políticas de seguridad o cambios operativos sin necesidad volver a codificar el servicio así como el cumplimiento del SLA entre el proveedor –nosotros- y el cliente.

Aparece la idea de Servicio Intermediario que desacopla el cliente de la implementación del servicio. Como tal, podemos ofrece varios servicios virtuales de una misma implementación para, por ejemplo, utilizarlo en distintos escenarios. Es aquí dónde encontramos la clave de la virtualización, en el servicio intermediario, pues todas las llamadas se realizaran a través de este y podremos modificar su comportamiento sin comprometer los modelos del servicio.

 

Managed Services Engine

Microsoft Services SOA Infraestructure ofrece una solución de virtualización de servicios a través de Managed Services Engine (MSE). Como cabe esperar, MSE está basado en la plataforma Windows, esto es, Windows Server 2003/2008, SQL Server 2005/2008 y .NET Framework 3.5, especialmente con Windows Communication Foundation para la interceptación de comunicaciones entre servicios virtuales y reales.

MSE puede integrarse tanto con MS Biztalk Server 2006 R2 / 2009 para proporcionar capacidades adicionales tales como la monitorización de las actividades de negocio (BAM), el Business Rules Engine o el ESB Toolkit, entre otros. Además también podemos utilizar los servicios Azure a través de Azure AppFabric, especialmente con .NET Service Bus.

MSE consiste, básicamente, en tres componentes:

  • Messenger: proporciona la normalización del mensaje de entrada a través de los servicios virtuales. Este componente soporta además la aplicación de políticas (de transformación por ejemplo, tanto de peticiones como de respuestas) así como el mapeo de protocolos.
  • Broker: este componente obtiene el mensaje normalizado y lo reconvierte a la operación (es decir la implementación de un método del servicio) y su respectiva versión (pues podemos tener más de una operación con distintas versiones).
  • Dispatcher: una vez se tiene el mensaje y la operación pertinente, dispatcher invoca el método del servicio y se transmite dicho mensaje.

Recalcar que estos tres componentes están totalmente desacoplados unos de otros con lo que podríamos distribuirlos de forma que obtendríamos una gran cantidad de tipologías del sistema. Todo esto es gracias a la catalogo del servicio (Service Catalog), también conocido como repositorio de metadata o simplemente repository o repositorio, ya que contiene todos los modelos de los servicios que hospeda el runtime del MSE –incorpora asistentes para la importación de servicios a través del WSDL y otros mecanismos para servicios POX o REST-. Como dije anteriormente, MSE contiene una implementación de WCF así que es fácil intuir que la comunicación entre ellos se realizan a través de canales de mensajería. El repositorio, por último, utiliza una base de datos SQL Server y la información puede ser publicada en un registry externo UDDI 2.0/3.0.

Por último, MSE contiene una interfaz para la administración de los servicios –MSE Model Viewer– así como una herramienta de test –MSE Universal Service Tester-.

image

image

En próximos posts hablaré de las diferentes posibilidades que ofrece MSE desde el punto del vista del rol (developer, IT, architect,…) y como familiarizarse MSE.

3 comentarios en “Virtualización de Servicios con Managed Services Engines”

  1. Hola José Miguel.

    Enhorabuena por tu articulo. Sinceramente me ha resultado muy interesante.

    No obstante, me gustaría comentar contigo si ves,a medio y largo plazo, que la virtualización de servidores, de alguna forma, acabara con las soluciones de virtualización de aplicaciones. O por el contrario, crees que pasara lo contrario, que la virtualización de aplicaciones “acabara” con la virtualización de servidores. Quizás un sistema híbrido? No se, me gustaría saber tu opinión al respecto.

    Muchas gracias,
    Jose Maria Gonzalez

  2. Hola Jose Maria, gracias a ti por el comentario.

    Respecto a tu pregunta, ambos conceptos de virtualización conviviran juntos y no veo que se solapen ni que uno acabe con el otro. Todo depende, como siempre, de la forma de utilizarlo. Por ejemplo, hoy por hoy se tiene a virtualizar por hadware todo lo que se menea, y olvidamos, con demasiada frecuencia, los features de performance de las aplicaciones, aspecto q por otro lado se tiene muy latente en virtualizacion de apps.

    En fin, espero haberte hecho llegar mi punto de vista ;-))

    Saludos!!

  3. Hola,

    lo primero de todo agradecerte este resumen sobre MSE.

    Me llamó la atención el punto sobre el control del SLA. Me descargué y puse en funcionamiento una instalación de MSE.

    Cacharreando con el Model Viewer he visto que tiene una sección para configurar el SLA del recurso que virtualizamos, pero me surge una cuestión: ¿hay algún tipo de alerta o alarma de la infracción del SLA?

    Gracias por tu respuesta

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *