5.25.2016
Invocar una orquestación en otro assembly
7.17.2014
Nueva serie de Webcast de arquitectura
Gracias al excelente recibimiento de la serie de webcast de arquitectura producida el año pasado se ha decidido hacer una nueva serie con temas relacionados y que están presentes en los temas a diario que enfrentamos arquitectos y desarrolladores. La nueva serie de webcast será en vivo igual que la anterior y los videos también serán hosteados en Channel9. Esta serie inicia el próximo 6 de agosto y a continuación pueden ver la información y le link de registro para el evento.
El link de registro para el evento es el siguiente:
Serie - Arquitectura de Software: Implementando SOA con el Windows Service Bus
Para los que desean información de los links del año anterior los pueden ver en channel 9 en esta dirección.
5.08.2013
Webcast de Arquitectura
La serie de web cast acerca de arquitectura de software que finalizaron el mes pasado, está disponible en Channel9. Ahí los pueden ver o bajarlos en el formato de su gusto. Les dejo los links de cada uno de los webcasts:
Webcast 1 – Arquitectura de Software – definición y Evolución
Webcast 2 – Arquitectura Distribuida
Webcast 3 – Workflows de Negocio en la arquitectura de software
Webcast 4 – Diseño y polimorfismo
Webcast 5 – Seguridad a nivel de software
Webcast 6 – Gobernabilidad
Webcast 7 – SOA
Webcast 8 Pruebas Unitarias
http://channel9.msdn.com/Blogs/DevWow/Visual-Studio-para-Arquitectos-de-Software-8-Pruebas-Unitarias
2.07.2013
WebCast de Arquitectura
Los invito a participar en una serie de webcast que estaré brindando acerca del tema de arquitectura de software. En el mismo se van a estar tocando temas tales como:
- ¿Qué es arquitectura?
- ¿Que hace un arquitecto de software?
- Arquitectura distribuida
- Buses de Servicio
- BPM
- Seguridad
- Gobernabilidad
- Computación en la nube
- Pruebas
y muchos temas más. Son 10 sesiones, las cuales quedarán grabadas y se podrán ver en el mismo url. El link de registro es el siguiente:
http://msdn.microsoft.com/es-ar/jj920131(es-ar)
11.13.2012
Memorias - Arquitectura de Software: Hágalo todo con SOA !!!
Una de las afirmaciones más temerarias que esucho con mucha frecuencia, esta relacionado con el hecho de que las empresas creen que por el simple hecho de implementar una arquitectura orientada a servicios – SOA – todos sus problemas están resueltos. Esto también se ve reforzado por la idea que venden los proveedores de productos SOA cuando dicen: “Pasálo todo por el BUS de servicios y todo listo”. Esto por supuesto es incorrecto ya que aunque SOA como arquitectura ayuda a paliar los dolores normales de una organización en materia de sistemas, hay que recalcar que el fuerte de SOA va más por un tema de integración de aplicaciones heterogeneas y por extender la vida de un producto de software, que por un tema de arquitectura de dominio – ejemplo de que no se debe de pasar por un bus es el pago de tarjeta de crédito, ya que el timeout de una transacción del lado del cliente puede tener resultados inesperados en la transaccionabilidad del sistema.
Respecto a este tema, es importante diferenciar los tipos de arquitectura a los que nos vemos enfrentados todos los días. Esto principalmente porque no tienen sentido hacer una aplicación en .NET, pero como ahora estoy utilizando SOA le voy a poner un “overhead” innecesario a la transacción – no solo .NET Java, PHP o cualquier otra plataforma.
Nuestras aplicaciones de dominio – ejemplo RRHH, ERP, CRM, etc. – deben ser expuestas a través de servicios pero a través de un servidor de aplicaciones o un bus de dominio – tal como el Windows Service Bus – sin tener que ir a pasar por un bus de SOA que te va a solicitar transformar tus esquemas SOAP a un formato neutral – por lo general XML – para que pueda ser consumido desde cualquier aplicación en otro formato.
Ahora bien, para los que ya se están preguntando porque a través de servicios si no va a pasar por un bus de datos la respuesta es muy sencilla: nunca sabemos quien va a necesitar nuestra funcionalidad. Esta es una premisa que todo arquitecto debe de tener en cuenta a la hora de desarrollar sus aplicaciones “esperar lo inesperado”. Para entender un poco mejor el escenario vamos a poner un ejemplo:
Supongamos que tenemos una aplicación financiera que se va a utilizar entre otros roles, por oficiales de servicio al cliente. Considerando que los agentes de servicio al cliente ya utilizan un CRM, no existe necesidad de parte de la institución de tener dos aplicaciones corriendo y poniendo a la agente a digitar en dos lados distintos con una alta posibilidad de error, además de incrementar la superficie de ataque ( a nivel de seguridad ). Es casi seguro que la solución óptima y que atraerá más a los clientes es el poder desarrollar sobre el CRM las interfaces contra la aplicación recién adquirida, lo cual justifica el uso de servicios para que al final solo sea pintar pantallas y consumir servicios.
Y entonces cuál es el rol de una arquitectura orientada a servicios? SOA nos va a permitir integrar nuestras aplicaciones sin importar la plataforma, y para ganarme esa versatilidad en la integración puedo darme el lujo de tener esa latencia en la transacción.
El escenario antes descrito desde el punto de vista de arquitectura se puede ver en la siguiente figura:
¿Que tecnologías debo utilizar?
En una arquitectura de dominio desarrollada en tecnologías microsoft lo mejor es utilizar el Windows AppFabric y el Service Bus de Windows – tema a tratar en otro post. En una arquitectura SOA si la tecnología que se utiliza es microsoft lo recomendado es utilizar Biztalk Server.
6.08.2011
Taller Arquitectura de Software
El próximo sábado 18 de junio estaré dando una conferencia acerca de arquitectura de software en San Salvador. El evento es organizado por el ESFE y será una charla de 4 horas respecto al tema de arquitectura de software y sobre todo, teniendo tantas tecnologías en el mundo Microsoft donde va cada tecnología y que rol juega cada una de estas en nuestra arquitectura. También haremos referencia a otras tecnologías del mundo Java. La presentación de esta charla la pueden ver en el siguiente link.
6.05.2011
Presentación de Arquitectura de Software
Estamos desarrollando una actividad todos los jueves en la mañana – o casi todos los jueves – en donde estamos exponiendo una serie de temas relacionados con el desarrollo de software. Entre esos temas ya hemos presentado temas como “desarrollando con seguridad en mente en .NET” y “Arquitectura de Software”. Proseguiremos con temas como “Service Oriented Architecture – SOA” y “Cloud Computing” en este mes de junio. Por ahora me permito facilitarles a los que fueron y a los que no pudieron o no sabían que el evento se llevaba a cabo, la presentación de arquitectura de Software. Espero les sea útil.
4.21.2011
¿Qué es el Windows AppFabric?
En realidad el AppFabric es un producto que viene a llenar un vacío que existe en la tecnología Microsoft desde la salida de .NET. Antes de esto, cuando desarrollábamos aplicaciones componentizadas utilizábamos el Transaction Server de Microsoft, el cual era un producto que me permitía tener componentes Com/Com+ de forma centralizada y mis aplicaciones podían consumirlos de forma remota. La imagen siguiente tomada de internet nos recuerda como era la interface del Transaction Server.
Cuando se empezó a programar en .NET, muchos desarrolladores empezaron a buscar alternativas para tener sus servicios de forma centralizada utilizando tecnologías como Remoting, Servicios Web ASMX, WCF, Colas – nServiceBus por ejemplo, y algunas otras más. Sin embargo, ninguna llenaba por completo – nServiceBus siendo tal vez la más completa – las necesidades de tener un servidor de aplicaciones distribuido.
Con la llegada del Windows AppFabric – Nótese que se indica Windows AppFabric y no Azure AppFabric – se obtiene un producto que en conjunto con WAS y IIS me permite tener mis componentes de negocio centralizados para uso distribuido por parte de mi aplicación. Ahora mis aplicaciones pueden consumir lógica de negocios a través de WCF llendo al AppFabric sin necesidad de tener los componentes corriendo de forma local. Además, puedo orquestar procesos de negocio utilizando Workflow foundation y mis componentes de lógica de negocios. Como podemos ver en la siguiente imagen tomada del MSDN, el AppFabric funciona sobre IIS/WAS y se basa en las tecnologías de .NET ASP.NET, WCF y WF.
Ahora nuestra arquitectura física y lógica lucirá de la siguiente forma:
Como podemos ver en la figura anterior, ahora tenemos la posibilidad de exponer nuestros servicio a través de endpoints con protocolos diversos tales como MSMQ, TCP, HTTP(s), etc. Físicamente ahora podemos decir que nuestra aplicación si esta distribuida y que todos nuestros componentes residen en nuestro servidor de aplicaciones. Con esto podemos accederlos directamente a través de servicios expuestos a través de WCF o a través de aplicaciones que consumen estos servicios y brindan funcionalidad a los usuarios finales.
Es muy importante destacar que el AppFabric NO ES UN ESB, algo que estaremos comentando en post posteriores
1.13.2011
SOA Myth 1: Estandarizar el Formato del Mensaje
Muchos de los proyectos en lo que tengo la suerte de trabajar estan relacionado con Arquitectura Orientada a Servicios. En estos proyectos es normal escuchar opiniones de las personas involucradas en estos proyectos respecto a lo que es SOA, lo que no es SOA, el mejor SOA, el peor SOA, etc. Además, acompañando estas opiniones vienen muchos mitos que por alguna razón surgen y luego persisten en la organización respecto a este tema. Por esta razón he decidido iniciar una serie de post acerca de estos mitos acerca de SOA. En la misma voy a tratar de ir mencionando todos los mitos que he escuchado e ir aclarándolos. Si alguno por ahi tiene algún tema que considera erróneo respecto a SOA, lo puede postear y con gusto lo voy a tratar.
SOA Myth 1: Estandarizar el Formato del Mensaje
Este quizás uno de los aspecto que más se menciona a la hora de construir un proyecto en este tipo de arquitecturas. Inicialmente, las empresas que quieren construir un core de mensajes – un ESB – primero miden el nivel de persuación que pueden tener en contra de sus “partners” y dicen cosas como:
- Nosotro definimos el mensaje y el que quiere integrarse tiene que cumplir con el esquema del mismo.
- Use lo que quieran en el core – cualquier tecnología – es problema de los partners si pueden integrarse bien o no.
Este pensamiento se da porque estamos acosumbrados a desarrollar aplicaciones locales que o comparten datos a través de su base de datos, o en el mejor de los casos se integran a través de servicios Web – arquitectura punto a punto. {he aquí otro mito: SOA y Servicios Web que atacaremos en otro post}
En realidad la idea del ESB es poder interconectar sistemas permitiendo no solamente a las empresas tener la posiblidad de conectarse sin conocer exactamente donde esta la aplicación ni que tipo de aplicación es, si no también brindándo la posibilidad de integrarse con el bus con los datos que actualmente tiene – o maneja - la empresa, caso contrario como haría la empresa para meter datos a un BUS que no tiene? Es por esta razón que los ESB tienen módulos para hacer mapping y functoids dentro de los mapas para mejorar la calidad del mensaje – al final los mapas son documentos XSLT que hacen transformaciones de los datos.
Otro punto a destacar es que no siempre el ESB solo sirve para exponer servicios, si no también para consumir. En este caso debemos acoplar el mensaje que viene con lo que estamos necesitando dentro del ESB y esto depende explícitamente de lo que vayamos a hacer dentro de nuestro workflow de negocios. En la siguiente figura se ven los dos esquemas de exposición de los EndPoints.
En el esquema con el Partner 1 el partner me expone el servicio que ya tiene desarrollado y yo procedo a consumirlo, en este caso tengo que mapear el mensaje que ingresa con el mensaje que se espera dentro del bus y transformarlo para que tenga la estructura que yo deseo. En el esquema con el partner 2 yo expongo el servicio con el formato de mensaje que yo establezco; en este caso, yo defino como me deben de llegar los mensajes. Al final lo que debe privar es la posiblidad de enviar y recibir mensajes sin importar quién define la estructura del mensaje y ninguna entidad debe forzar a otra entidad a cambiar sus esquemas de datos para satisfacer su flujo de trabajo.
8.25.2010
Seminario de SOA
Aprovecho este espacio para invitarlos a un seminario de Arquitectura Orientada a Servicio, el cual tengo el privilegio de dar el día 1ero de octubre en la Ulacit. Ese día estaremos utilizando el NServiceBus para demostrar como trabajar con un ESB en nuestra organización y además para aclarle a todos aquellos que todavía no lo tienen claro, que para tener una arquiectura orientada a servicios se requieren servicios, no solamente servicios Web. Cualquier consulta comunicarse conmigo o en los teléfonos y correos del anuncio.
8.15.2009
¿Por qué es importante el MSE – Managed Service Engine?
En muchas ocasiones cuando estoy en consultorias relacionadas con arquitecturas orientadas a servicios – SOA – tengo que hacer mucho enfasis en el hecho de que tener web services en la organización no significa que tengo una arquitectura orientada a servicios. Al mismo tiempo, se me consulta que papel juega el MSE en la transición hacia una arquitectura orientada a servicios. En este post voy a tratar de aclarar estas dos dudas.
Tener Servicios Web no es tener SOA
Existe la creencia errada respecto a que tener servicios web para ser consumidos tanto internamente como externamente, me da automáticamente una arquitectura orientada a servicios. En realidad cuando implementamos servicios web dentro de nuestra organización estamos creando una arquitectura que se conoce como punto a punto. Esto se puede notar si tenemos muchos servidores Web hospedando los servicios, y/o si tenemos que consumir servicios web de muchas otras organizaciones ya sean externas o internas. En la siguiente figura podemos ver esta arquitectura.
En la figura anterior, podemos ver que las aplicaciones hacen referencias directas a servicios que retornan funcionalidad de negocios de las aplicaciones que desean acceder, teniendo en sus referencias el servidor donde estan hospedados estos servicios, el uri del servicio y el contrato de la implementación del servicio. Esto nos pone en desventaja ya que si tenemos que mover algún servicio de servidor, tenemos que actualizar todos los consumidores del mismo, ya que hay una referencia directa al servicio a través del servidor. Peor aún, si estamos consumiendo servicios externos y nos cambian la dirección del servicio, nuestra aplicación no funcionará correctamente si no se nos notifica a tiempo.
Otro problema que tendríamos además del ruteo de los mensajes es el manejo de los errores. Al tener diversas fuentes de donde consumir los servicios, los errores se van a almacenar y administrar en cada uno de los servidores internos o externos, de forma tal que no podemos crear logs centralizados para identificar que sucede en caso de presentarse algún error.
Además, dentro de los patrones de una arquitectura orientada a servicios, el concepto de servicio web no es exclusivo para su implementación. Esto por que en realidad en una arquitectura orientada a servicios yo puedo integrarme con servicios que implementen protocolos diversos tales como HTTP(s), TCP, etc.
Como me ayuda el MSE a tener una Arquitectura Orientada a Servicios
Una de las razones principales por la cual las organizaciones adoptan una arquitectura orientada a servicios es por la promesa de una alta flexibilidad en las aplicaciones. Esta promesa viene del hecho de que una arquitectura SOA diseñada correctamente reduce el tiempo de construcción de las aplicaciones y de los nuevos requerimientos en las aplicaciones ya existentes.
El primer requerimiento de una aplicación SOA bien diseñada es que cualquier aplicación puede ser accesada vía servicios ya sea interna o externamente lo cual permitirá la reutilización. Esto nos va a permitir desarrollar nuevas aplicaciones que requieran funcionalidad de las aplicaciones ya implementadas de forma más rápida y sencilla porque vamos a requerir menos código para tener acceso a la funcionalidad deseada. Sin embargo, si debo escribir cada servicio desde cero este requerimiento no se puede cumplir o cumplirlo sería muy costos en tiempo e inversión. Si se construyen estos servicios como aplicaciones aisladas, se van a crear servicios con funcionalidades duplicadas, será dificil tener un inventario de servicios disponibles y sus funcionaldiades, los logs de errores de los servicios estarían en cada uno de los servidores que almacenan el servicio, por citar alguno de los inconvenientes que tendríamos si no utilizamos una arquitectura orientada a servicios.
El segundo punto a tratar es que una arquitectura SOA bien diseñada tiene que tomar en cuenta es el cambio constante. En un ambiente empresarial SOA, los servicios tienden a cambiar mientras evolucionan. Estos cambios son de dos tipos: cambios en la interface y cambios en la implementación. El reto esta en encontrar una manera de convivir con la evolución de los servicios y el minimizar el efecto del cambio en los servicios en el consumidor de los mismos.
La pregunta que nos surge ahora es: ¿Qué rol juega el MSE en este escenario? Pues bien, el MSE nos permite llevar a cabo virtualización de servicios. La virtualización de servicios es un esquema de instalación y administración de servicios que nos brinda toda la “plomería” requerida por todos los servicios dentro de la organización. Esto le permite al desarrollador enfocarse en construir nueva funcionalidad y nos brinda una base de funcionalidad donde se requiere conectar con nueva funcionalidad.
Respecto al manejo de los cambios en los servicios, el MSE nos permite manejar este problema a nivel de operación. Este nos da la posibilidad de crear nuevas versiones de las operaciones existentes de los servicios. El MSE nos brinda esta funcionalidad por que el mantiene la interface de la operaciones del servicio conectada pero separada de su implementación, siendo este el principio básico para la virtualización de servicios. A través de la virtualización de servicios se pueden tener tantas versiones de la operación del servicio activas como sea necesarias, pero solamente una puede ser publicada a través del WSDL. Esta característica nos permite soportar la compatiblidad hacia versoines anteriores ya que los usuarios con versiones anteriores pueden serguir consumiendo el servicio y los nuevos usuarios usan el WSDL publicado del nuevo servicio, ambos casos sin complicación alguna. En el momento en que todos los clientes se muevan a la última versión del servicio, las versiones anteriores pueden ser desactivadas. La siguiente figura nos muestra la arquitectura del funcionamiento del MSE y sus funcionalidades en cada uno de los componentes que lo conforman.
8.04.2009
Entendiendo el MSE – Managed Service Engine
Como comenté en un post anterior, el MSE es una herramienta open source que me permite obtener funcionalidad para poder administrar y llevar a cabo una transición entre una arquitectura punto a punto – o servicios web instalados en diversos servidores y web – a una arquitectura orientada a servicios ( SOA ). En este post ahondaré un poco más en los componentes del MSE.
El MSE esta formado de tres componentes principales: el service runtime engine, el catalogo de servicios, y la herramienta de administración para implementar la virtualización de los servicios. El service runtime engine esta implementado como un servicio de windows que administra un conjunto de instancias de hosting de servicios WCF que se configuran automáticamente de la información que se encuentra en el catalogo de servicios.
El MSE esta compuesto de tres componentes internos lógicos: el messenger, el broker y el dispatcher. El messenger es el responsable de la normalización de los mensajes. El broker recibe los mensajes normalizados y es el responsable de seleccionar la versión específica de la operación. El dispatcher es el responsable de la invocación del servicio real que se desea consumir. La comunicación entre estos componentes sucede a través de canales WCF, esto permite distribuirlos en varios servidores y acomodarlos a diferentes infraestructuras que se puedan requerir.
El catalogo de servicios – también conocido como el repositorio de metadatos – contiene los modelos que guían los servicios virtuales contenidos en el runtime del MSE. Lo servicios se importan utilizando la herramienta de administración. Luego de importar el metadata del servicio, se definen los servicios virtuales para el consumo de los clientes.
Cuando se define un servicio virtual, se inicia escojiendo y configurando un binding de WCF. Se puede seleccionar que protocolo utilizar, que características de seguridad habilitar, o cualquier otra característica que soporte el binding seleccionado. También se puede especificar otros comportamietnos para los servicios como inspección de mensajes, transformación, información de versión, y cuales políticas se deben aplicar obligatoriamente utilizando la misma técnica.
El repositorio de metadata esta implementado como una base de datos SQL Server tradicional. Los consumidores no interactúan directamente con la base de datos aunque los datos se pueden publicar con el propósito de ser descubiertos. El MSE mantiene una distinción entre la noción de repositorio y el registro público. El repositorio es donde se encuentran los datos que guían el runtime, y el registro es un almacén separado de metadata de los sevicios que se puede hacer disponible para descubrir y consumir desde afuera.
La siguiente figura nos muestra un diagrama general con la ubicación de algunas de las funcionalidades que están disponibles en el MSE.
5.20.2009
Alternativas para Iniciar con una Arquitectura Orientada a Servicios - SOA
Cuando en una empresa se habla de establecer una arquitectura orientada a servicios surgen muchas dudas respecto a como implementar este tipo de arquitectura. Una de las primeras preguntas que me hacen dentro de la organización cuando llego a ayudar en este tipo de tareas es:
Pero si al prinicipio vamos a tener unos cuantos servicios, por que tenemos que comprar un ESB, que por lo general cuesta mucho dinero.
Efectivamente, una de las principales limitantes a la hora de implementar una arquitectura orientada a servicios – aparte de las limitaciones técnicas – es la compra del software requerido para poder iniciar en SOA.
Normalmente, las empresas empiezan teniendo unos pocos servicios Web, los cuales brindan información ya sea a lo interno o a lo externo; estos servicios se hostean en el IIS. Aunque suene tentador, el hecho de tener solamente servicios web que son consumidos por clientes internos y externos, no implica que tengamos una arquitectura SOA; en realidad estamos creando una arquitectura punto a punto, en donde los clientes consumen directamente los servicios expuestos y quedan totalmente dependientes de la configuración de estos servicios; ya que por ejemplo, si cambian el servidor donde se hostean estos servicios, los clientes tienen que ser actualizados o no funcionarán del todo.
Ahora, conforme crecen la cantidad de servicios que estamos utilizando, empieza a crearse la necesidad de darles seguimiento, de tener un inventario para saber cuales servicios tengo disponibles y puedo reutilizar, de tener métricas de los servicios para poder medir mis SLAs con otros clientes, y muchas otras características típicas de una arquitectura SOA las cuáles nos indican que es hora de ir pensando en un ESB – ver el post de ESB para entender más a fondo que es un ESB – La pregunta que surge es ¿ Cuando debo migrar a un ESB ? ¿por que tengo que pasar de un modelo donde solo tengo que preocuparme por el IIS a un modelo donde tengo que tener otro servidor y debo comprar Biztalk Server y agregarle el ESB guidance? ¿ Por qué no existe un paso intermedio entre ambos, que me de el Governance necesario para poder iniciar con mi arquitectura SOA para poder demostrarle a la gerencia los beneficios de esta arquitectura?
Estas preguntas son totalmente válidas y aplican practicamente en cualquier tecnología sobre la cual estemos interesados en “montar” una arquitectura orientada a servicios. En general cuando me hacen este tipo de preguntas, me pregunto por que no existe un contenedor liviano para ese tipo de soluciones.
Pues resulta que ahora, el equipo de Microsoft Services SOA Solution Team ha creado un producto que viene a llenar ese vacío. Este producto es algo así como el paso intermedio entre la arquitectura punto a punto y la arquitectura SOA en toda su expresión, utilizando un ESB, orquestando servicios y todos los demás beneficios que vienen con una arquitectura orientada a servicios – bien aplicada. Esta herramienta esta en versión CTP y se llama el Microsoft Service Engine – MSE. Esta herramienta es una herramienta para facilitar la adopción de SOA en la empresa, todo a través de algo que se conoce como virutalización de servicios. El MSE esta construida sobre WCF y la plataforma de Windows Server. Se integra de forma natural con Biztalk y el ESB Guidance para cuando en etapas posteriores se desea aumentar la capacidad de governance, ruteo, transformación, etc.
El siguiente screen shot es una muestra de este tool.
Este tool tiene otras 2 ventajas externas a lo técnico: Es Open source y es gratis. El sitio web donde se puede obtener información al respecto esta aquí en codeplex.
En post posteriores voy a profundizar acerca de las funcionalidades de esta herramienta, como configurarlo y como ponerlo a funcionar para poder adoptar una arquitectura SOA dentro de nuestras organizaciones.
4.11.2009
¿Qué es un ESB – Enterprise Service Bus?
Cuando se habla de arquitecturas orientadas a servicios, se habla intrínsicamente de los componentes necesarios para tener una arquitectura SOA. Sin duda alguna, uno de los componentes más importantes de una arquitectura orientada a servicios es el Enterprise Service Bus - ESB.
Conforme las organizaciones van moviéndose hacia las arquitecturas orientadas a servicios, se dan cuenta que están trabajando con un “mix” entre lo nuevo y lo viejo. Un ESB es básicamente la integración de lo nuevo y lo viejo, brindándo un lugar central para los servicios, las aplicaciones, y recursos de TI en general que se desean conectar. En otras palabras, lo que se busca es una infraestructura y un sistema de eventos que me permitan conectar cualquier recurso de TI sin importar la tecnología que utiliza el recurso. Esta infraestructura debería permitir administrar los cambios en los requerimientos sin causar problemas a los servicios ya instalados. Esta infraestructura debe de ser confiable y robusta. Aquí es donde entra el concepto de ESB.
Un ESB no solamente permite combinar y re ensamblar servicios, sino que también debe permitir conectar nuevas aplicaciones, servicios web y cualquier otro tipo de aplicaciones tales como aplicaciones LOB ( Line of Business ), archivos batch, legacy middleware a través de adaptadores; todo esto manteniendo la abstracción del manejo de mensajes a través del patrón publicar-suscribir.
Siendo más concretos, podemos decir que un ESB ofrece las siguientes funcionalidades:
- Transparencia de Ubicación: El ESB ayuda a desligar el consumidor del servicio de la ubicación del proveedor del servicio. El ESB provee una plataforma central para comunicarse con cualquier aplicación requerida sin ligar el recibidor del mensaje con el que envía el mensaje.
- Conversión de Protocolo de Transporte: Un ESB debe de tener la capacidad de integrar de forma transparente a través de diferentes protocolos de transporte tales como HTTP(s), JMS, FTP, SMTP, TCP, etc.
- Transformación de Mensaje: El ESB brinda funcionalidad para transformar mensajes desde un formato hasta otro formato basado en estándares tales como XSLT y XPath.
- Ruteo de Mensajes: El ESB determina el destino de los mensajes entrantes.
- Mejora del Mensaje: El ESB puede brindar funcionalidad para agregar información faltante basado en los datos del mensaje de entrada.
- Seguridad: Autenticación, autorización, y funcionalidad de encriptación se proveen a través del ESB para asegurar los mensajes entrantes. Igualmente estas funcionalidades se aplican a mensajes salientes para satisfacer requerimientos de seguridad del proveedor del servicio a consumir.
- Monitoreo y Administración: Un ambiente de monitoreo y administración del ESB es fundamental para configurar el ESB para que sea confiable y tenga un alto desempeño; al mismo tiempo, nos permite monitorear la ejecución de los mensajes y su flujo dentro del ESB.
La siguiente figura nos muestra un “big picture” de lo que es un ESB.
Dadas estas funcionalidades de un ESB, ¿cuándo necesito utilizar un ESB?
Conforme las organizaciones van adoptando servicios, se va creando la necesidad de una arquitectura orientada a servicios. Hay una gran diferencia entre el uso casual de servicios y llevar la organización a correr sobre servicios. Conforme se avanza hacia una arquitectura orientada a servicios, van a surgir muchos contratiempos, entre los cuales podemos enumerar como manejar una gran cantidad de servicios de una manera adecuada evitando la duplicación de funcionalidad, como medir y forzar los SLA´s –Service Level Agreement –, como forzar politicas organizacionales dentro de la colección de servicios que se tiene y a la cual se le van agregando servicios.
Además, en el mundo Microsoft existe WCF, el cual es un framework excelente para comunicaciones distribuidas, pero es solo eso, un framework.
Normalmente, cuando se empiezan a tener una cantidad de servicios que deja de ser pequeña y más bien podríamos considerarla de mediana a grande, se empiezan a tener problemas que no se tenían cuando solamente se manejaban un grupo pequeño de servicios. Entre los problemas que se dan más comúnmente podemos enumerar proliferación de servicios por toda la organización sin control, los cuales utilizan diferentes protocolos y tecnologías para su desarrollo e implementación. No hay governance, las configuraciones no son estándar, no hay versionamiento de servicios, etc. Cuando se empiezan a tener este tipo de problemas, y la organización empieza a dar un paso más serio hacia el uso de servicios como plataforma para sus aplicaciones, se empieza a necesitar más y más una arquitectura orientada a servicios.
2.27.2009
¿Qué es WCF? – Parte 4. Arquitectura de WCF
Como vimos en los posts anteriores, WCF nos facilita la manera de crear servicios para poder consumirlos de forma sencilla a partir de la generación de un proxy que actúa como interceptor de la llamada y nos abstrae de toda la plomería necesaria para conectarnos con el provedor del servicio y obtener el resultado deseado. En este post vamos a hablar acerca de la arquitectura de WCF.
Todas las características de WCF, entre ellas confiabilidad, administración de la concurrencia, seguridad, y activación de instancias, dependen de la arquitectura de WCF, conocida como arquitectura basada en intercepción. El hecho de que un cliente interactúe con un proxy, significa que WCF siempre esta presente entre el servicio y el cliente, interceptando la llamada y llevando a cabo pre procesamiento y post procesamiento.
Esta “intercepción” inicia cuando el proxy serializa la llamada a un stack frame para un mensaje y envía el mensaje hacia abajo en la cadena de canales. El canal es simplemente un interceptor que tiene como propósito llevar a cabo tareas específicas. Este concepto de canal es algo muy similar al manejo de “pipes” utilizado por Biztalk Server para procesar mensajes.
Cada canal del lado del cliente hace un pre procesamiento del mensaje. La estructura exacta y la composición de la cadena depende en su mayoría del tipo de binding que se este utilizando. Por ejemplo, un canal puede estar encargado de la codificación del mensaje (MTOM, texto, etc.), otro de pasar el contexto de seguridad, otro de propagar las transacciones, otro por manejar la confiabilidad de la sesión, otro para encriptar el mensaje y así sucesivamente. El último canal del lado del cliente es el canal de transporte el cual envia el mensaje a través del transporte configurado en el host.
Del lado del servidor, el mensaje “sube” otra vez por la cadena de canales pero en sentido inverso al channel stack del cliente. Es decir, el primer canal en participar en el server es el canal de transporte, el cual recibe el mensaje. Los canales subsecuentes llevan a cabo las tareas inversas realizadas en el cliente; por ejemplo, si en el cliente se encripto el mensaje, en el server se desencripta el mensaje. Igualmente, en esta ruta del mensaje se activa la instancia del servicio requerida para consumir el servicio. El último canal en el servidor pasa el mensaje a un elemento conocido como el dispatcher. El dispatcher es el elemento que administra la ejecución de servicio. El dispatcher convierte el mensaje en un stack frame ( lo deserializa. y llama la instancia del servicio creada para completar el llamado). En la siguiente figura se puede ver este proceso.
Como se puede ver, el servicio no sabe que fue llamado por un cliente externo, y el cliente no sabe que se esta comunicando con un cliente externo. Ambos, ven los componentes localmente para comunicarse – el cliente en el proxy y el servicio en el dispatcher. Este concepto de intercepción en ambos lados, cliente y servidor, garantiza que ambos obtiene el ambiente de ejecución que se requiere para operar correctamente.
Por último, en el proceso de respuesta, la instancia del servicio ejecuta la llamada y retorna el control al dispatcher, el cual a su vez convierte los valores retornados y la información del error – si existe – en el mensaje de regreso. El proceso se invierte siendo el dispatcher el que inicia la cadena del llamado, y el proxy el último en contestarle al cliente.
Para concluir podemos destacar que esta arquitectura nos permite extensibilidad en el modelo, ya que podríamos crear canales personalizados para interacciones propietarias o propias de un negocio o plataforma en específico.
2.12.2009
¿Qué es WCF ? – Parte 2
En el post anterior publicamos el primer post acerca de lo que es WCF. En este post vamos a continuar con la parte 2 de esta serie de articulos.
En el contrato especificado en el post de la parte 1, usamos un tipo de retorno del tipo List<Usuario>. Usuario es una clase que escribí que representa una entidad de negocios la cual me permite almacenar los datos en detalle que acepto o envio desde el servicio generado. La estructura de este objeto como veremos en un post posterior va a viajar en formato XML con el wsdl, para que el consumidor del servicio tenga acceso al tipo de datos predefinido como tipo de retorno en mi servicio. Esta información del servicio en conjunto con el detalle del endpoint – definido en el post anterior – van a conformar la metadata del servicio.
Hay que tomar en cuenta que para que el “Usuario” vaya por la red, este debe de ser serializable. Ser serializable significa que el estado del objeto en un momento determinado puede ser persistido en algún medio, ya sea un archivo o un stream de bytes o en una instancia de una clase ya activa (Si nosotros como humanos fueramos serializables, entonces podríamos teletransportarnos :) ).
Con esta metadata del servicio, un consumidor del servicio puede ahora generar un Proxy. Ahora, ¿qué es un proxy en este contexto? Un proxy en WCF es un cliente generado a partir de la metadata expuesta por el servicio que hereda de la clase ClientBase<T>, por ejemplo:
[System.Diagnostics.DebuggerStepThroughAttribute( )]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
public partial class ServiciosSeguridadClient : System.ServiceModel.ClientBase<WPF_ClienteSeguridad.ReferenciaServiciosDeSeguridad.IServiciosSeguridad>, WPF_ClienteSeguridad.ReferenciaServiciosDeSeguridad.IServiciosSeguridad
Este proxy nos abstrae toda la lógica necesaria para conectarse con el servicio que se desea consumir, desde el manejo de la dirección del servcio a consumir hasta el endpoint necesario para poder conversar con el servicio. Igualmente, cuando tenemos tipos compuestos en el retorno o en los parámetros del servicio, estos tipos son generados automáticamente por el proxy para así poder utilizarlos del lado del cliente, es decir, para que la aplicación que consume el servicio “compile” cuando utilizamos el servicio. Podemos decir entonces, que el proxy es un puente que nos expone todas las operaciones en un servicio, y abstrae la serialización y el envío a traves de la red. Finalmente debemos decir que un proxy utiliza un único endpoint.
Por último, el cliente y el host hablan entre sí a través de varios canales. Además, alrededor de estos canales, se pueden tener comportamientos – behaviors – asociados con el servicio. Un canal es el medio por el cual el mensaje viaja entre el cliente y el ente que hostea el servicio. La comunicación se lleva a través de de un modelo conocido como el channel stack el cual estaremos revisando en detalle en post posteriores. Un comportamiento sirve para modificar un mensaje cuando el mensaje viaja por el channel stack.
En resumen podemos decir que vamos a tener un cliente y un host los cuales se ponen de acuerdo en un contrato. El host expone endpoints los cuales tienen una combinación de dirección, binding y contrato – ABC. El cliente utiliza un proxy que esta ligado a un endpoint, por lo tanto esta ligado a un contrato en particular. Por último, todos los detalles relacionados con la comunicación se abstraen a través de los canales y los comportamientos.
En el siguiente post vamos a profundizar en el tema del channel stack para comprender como es que funciona la parte de comunicación en WCF.
2.08.2009
¿Qué es WCF? – Parte 1
Una de las preguntas más comúnes cuando hablamos de servicios y arquitecturas orientadas a servicios en tecnologías Microsoft es: ¿Qué es WCF? Pues vamos a tratar de dar una breve introducción referente a que es WCF.
WCF significa Windows Comunication Foundation. Esta disponible desde la versión 3.0 del framework de .NET. Muchos gurús de SOA incluso dicen que WCF es un framework aparte al framework de .NET – algo con lo que coincido – escencialmente por que el framework de .NET conoce de componentes y no de servicios.
Se preguntarán entonces, para que otra forma de comunicación entre componentes si ya hemos tenido DCOM, Remoting, Servicios Web, WSE, etc. La respuesta corta a esta pregunta es SOA. WCF es diferente de las versiones anteriores antes mencionadas para comunicar componentes. Aunque ya definimos que es SOA en este post, vamos a simplificarlo para explicar que es WCF y por que es tan diferente como estamos intentando explicarlo. Pensemos en SOA como diferentes piezas de código ( servicios ) que estan corriendo alrededor del mundo y los clientes pueden hacer uso de estos servicios ( consumirlos ). El ente que hostea el servicio lleva a cabo las complejidades internas, y la infraestructura de comunicación permite cosas tales como versionamiento, seguridad, ruteo, etc. Así, uno de los principales doctrinas de SOA es el aislamiento. ¿Por qué? Vamos a decir que estamos consumiendo un servicio web que acepta un parámetro cédula de identidad para buscar una persona en una base de datos de cliente y que este servicio retorna la persona encontrada. Todo lo que tiene que tiene que hacer el cliente es preocuparse por el parámetro de ingreso y por el dato que se le va a regresar. Más allá de este modelo solicitud/respuesta, el hosteador del servicio nunca habla con el cliente. Es por esto que decimos que existe una asilamiento entre el cliente y el servidor, y ellos interoperan solamente con lo acordado para interoperar es decir, el contrato.
En WCF se utiliza el término contrato para referirse a lo que el servicio hace. Usualmente en WCF un contrato es implementado como una interface decorado por el atributo [ServiceContract]. Un contrato por ejemplo luce como el siguiente código.
[ServiceContract]
public interface IServiciosSeguridad
{
[OperationContract]
List<Usuario> ObtenerUsuarios( );
}
En realidad se requieren al menos 3 piezas de información antes de poder utilizar un servicio:
La dirección: donde puedo encontrar el servicio.
El binding: cuál protocolo utilizar para poder consumir este servicio.
El contrato: cuando ya se donde esta el servcicio, y como voy a conversar con él, el contrato me dice que puedo hacer con el servicio.
Esto en WCF es conocido como el ABC ( Address, Binding, Contract) del servicio. Estos 3 componentes juntos conforman lo que se conoce como un EndPoint. Un EndPoint es como el que expone el servicio ( host del servicio ) expone un servicio para que muchos clientes puedan invocar las operaciones definidas en el contrato.
En el siguiente post vamos a seguir conversando acerca de WCF, principalmente de Proxies, canales y comportamientos.
1.13.2009
Capas del Modelo Conceptual de SOA
En el post anterior, expliqué el modelo conceptual de lo que sería una arquitectura n-layer de una arquitectura orientada a servicios. En este post vamos a describir detalladamente que papel juega cada una de esas capas en una arqutiectura SOA. Pero antes de iniciar, vamos a actualizar la figura que utilizamos en el post anterior para mostrar una arquitectura n-layer de SOA y le vamos a agregar dos capas más la cuales vamos a describir en conjunto con las restantes. La figura actualizada es la siguiente:
En esta figura agregamos la capa de integración y la capa de Administración, Monitoreo, Calidad de Servicio y Administración. Ambas capas serán descritas en este post.
Capa 1: Sistemas Operacionales. Esta capa consiste en las aplicaciones existentes dentro de la empresa, conocidas como legacy systems.Entre estas capas podemos tener CRM´s, ERP´s, aplicaciones de BI, Orientadas a objetos, etc. Todas estas aplicaciones se integran a través de SOA.
Capa 2: Capa de Componentes: Esta capa es la que contiene los componentes que se encargan de brindar la funcionalidad que exponen los servicios. Esta capa tipicamente usa tecnologías para contener los componentes que existen dentro de esta, tales como servidores de aplicaciones, los cuales a su vez ayudan a llevar a cabo tareas como implementar componentes, a manejar el balanceo de los componente, la disponibilidad, etc.
Capa 3: Capa de Servicios: En esta capa residen los servicios que la organización decide exponer. Pueden ser descubierto, referenciados directamente, o ser parte de una orquestación o de un servicio compuesto. Normalmente estos servicios exponen la funcionalidad de negocio a través de contratos que permiten invocar los componentes de negocio que se encuentran en la capa de componentes de la empresa. Estos contratos permiten cambiar la forma en que se llevan a cabo las tareas sin necesidad de hacer redeploy de los servicios expuestos.
Capa 4: Procesos de Negocio – Orquestación: En esta capa se exponen las orquestaciones de los servicios. Los servicios estan ligados a estos workflows, y por lo tanto actúan como una sola aplicación. Aqui se utilizan herramientas visuales para construir los flujos de trabajo tales como el diseñador de orquestación de Biztalk Server, o alguna herramienta de terceros que me permita crear workflows en notación BPEL.
Capa 5: Capa de Presentación. Normalmente esta capa no forma parte de SOA, pero cada día se vuelve más relevante. Los usuarios acceden los servicios y las orquestaciones invocando desde diversas interfaces de usuario la funcionalidad que desean consumir.
Capa 6: Integración ( ESB – Enterprise Service Bus ). Esta capa facilita la integración de servicios a través de la introducción de un conjunto de capacidad tales como ruteo, mediación de protocolos, mecanismos de transformación, etc. Con el WSDL ( Web Service Description Language ) se especifica el binding, el cual implica la localización del servicio que se provee. Al mismo tiepmo, el ESB nos da la facilidad de tener independencia de la ubicación del servicio para su integración, ya que es el ESB el que al final controla el ruteo de los mensajes que le llegan para ser procesados.
Capa 7: Administración, Monitoreo y Calidad del Servicio. Esta capa nos da las características requeridas para monitorear, administrar y mantener la calidad del servicio en áreas tales como seguridad, desempeño, y disponibilidad. Se le conoce como el SOA governance.
En el siguiente post vamos a tocar el tema de los enterprise service bus, vamos a definir que es un ESB y para que nos sirve un ESB en una arquitectura orientada a servicios.
1.02.2009
SOA: Arquitectura y Modelo Conceptual
En el post anterior vimos la definición de SOA. En este post, vamos a analizar conceptualmente que es SOA, y le vamos a dar un vistazo general a una arquitectura orientada a servicios en conjunto con todas sus capas.
SOA esta basado en un estilo de arquitectura que define un modelo de interacción entre 3 partes principales:
- El proveedor del servicio: publica la descripción del servicio y brinda la implementación del mismo.
- El consumidor del servicio: invoca el servicio utilizando el URI de la descripción del servicio directamente o puede encontrar la descripción del servicio a través de un registro de servicio.
- El service broker: brinda y mantiene el registro del servicio – aunque no muy de moda ultimamente.
En la siguiente figura podemos ver la relación entre las partes.
Arquitectura Básica en SOA
La definición de la arquitectura SOA describe una serie de patrones o guías para crear servicios que sean independientes, relacionados, y alineados con el negocio. Dada la separación entre la descripción, la implementación y el “binding” del servicio, es posible tener gran flexibilidad en lo que se refiere a nuevas oportunidades de negocio – B2B.
Para poder obtener estas características, se deben de cumplir con una serie de lineamientos que nos van a permitir llegar a tener una arquitectura orientada a servicios dentro de la organización.
Una arquitectura SOA se puede ver de manera parcial y abstracta a través de un arquitectura n-layer de servicios que se alinean con los procesos del negocio. La siguiente figura nos muestra esta arquitectura n-layer.
En la figura anterior, podemos ver que existen una capa de aplicaciones que acceden los procesos de negocio a través de workflows que orquestan – organizan - el funcionamiento de dichos proceso. Estos procesos organizan el consumo de los servicios los cuales a su vez acceden los componentes de negocio de la organización que brinda el procesamiento requerido para la función deseada. Los componentes de negocio por lo general tienen un capa de acceso a datos que les permite acceder distintos repositorios de datos de aplicaciones que funcionan actualmente en la empresa – de aplicaciones legacy.
En el siguiente post vamos a analizar cada una de estas capas en detalle.
12.21.2008
¿Qué es SOA – Service Oriented Architecture?
La palabra de moda en los últimos años en el área de desarrollo de software ha sido SOA – Arquitectura Orientada a Servicios. ¿Pero qué significa SOA en realidad?
Básicamente SOA es un cambio significativo en la manera en que nosotros diseñamos y construimos aplicaciones. Esta arquitectura toma la naturaleza abierta de la Web y la convierte en una nueva manera de pensar acerca de las arquitecturas de aplicaciones.
SOA significa integración a través de sistemas diversos. SOA utiliza protocolos estándar e interfaces convencionales – usualmente Web Services – para facilitar el acceso a la lógica de negocios y la información entre diversos servicios. SOA nos brinda los principios y la guía para transformar el conjunto de recursos de TI de la compañía – los cuales son por lo general heterogéneos, distribuidos, inflexibles y complejos - en recursos flexibles, integrados y simplificados, que pueden ser cambiados y compuestos para alinearse más fácilmente con los objetivos del negocio. Podemos decir entonces, que SOA no es una herramienta, no más bien es un conjunto de patrones de construcción de las nuevas aplicaciones de la empresa – más dinámicas y menos dependientes.
SOA es la evolución del modelo de programación orientado a componentes, ya que SOA agrega herramientas de computación distribuida a estas tecnologías que hemos venido utilizando por años. Podríamos decir que el cambio más grande es filosófico: en lugar de pensar en el diseño de aplicaciones individuales para resolver problemas especificos, SOA ve el software como un patrón que soporta todo el proceso del negocio. Cada elemento de un servicio es un componente que puede ser utilizado muchas veces a través de muchas funciones y procesos dentro y fuera de la empresa. Los servicios se pueden actualizar y escalar conforme sea requerido, o se pueden cambiar a una librería de terceros, sin afectar la operación del negocio – esto se da por que el componente clave de SOA no es la aplicación o el componente en uso si no más bien el contrato de uso, la interface.
La idea detrás de todo esto es que es más efectivo trabajar con servicios que con aplicaciones. Todos los componentes de una infraestructura de TI tradicional permanecen en una implementación de SOA, pero esta vez en lugar de que una aplicación soporte una funcionalidad, esta se pone disponible para todo el negocio.
Esta idea de aplicaciones como servicios alineadas a los procesos del negocio no es nueva, solamente que en esfuerzos anteriores se requería mucho esfuerzo para integrar las aplicaciones heterogéneas, además de que cada uno de estos esfuerzos tenían su propio API y su forma propietaria de comunicarse; por ejemplo CORBA y COM+.
Sin embargo, esta solución moderna que llamamos SOA, toma mucho de estos esfuerzos y de los estándares abiertos de Internet para posibilitarnos llevar a cabo esta tarea. Al día de hoy XML se ha convertido en la lengua de facto entre máquinas, lo que permite a los arquitectos ligar nuevas herramientas con aplicaciones “legacy”, y desarrollar el B2B – Business to Business - alrededor del mundo. Esta intercomunicación no es solo entre componentes, ya que incluso se pueden describir procesos de negocio con documentos XML, utilizando lenguajes de orquestación como BPEL.
A nivel del servicio, la información se maneja como mensajes XML, definidos por un esquema XML, mientras que las interfaces de la aplicación pueden ser servicios web. XML y Servicios Web son soportardos por Java y .NET, y estan empezando a ser soportadas por muchas más tecnologías.
En la siguiente imagen podemos ver la composición de una arquitectura orientada a servicios y la interacción de sus diversos componentes. En esta imagen faltan los elementos de infraestructura tales como el ESB, BPEL, etc.
En esta imagen se puede ver que una arquitectura orientada a servicios agrega una interface de servicios ( capa lógica de servicios ) sobre los objetos de negocio y sobre las aplicaciones legacy que están alineados con los procesos del negocio. Estos objetos de negocio a su vez tienen una capa de acceso a datos la cual es la que se encarga de abstraer el acceso a las diversas fuentes de datos que utiliza la empresa.
En el siguiente post vamos a escribir acerca de lo necesario para tener SOA en la organización.


