SOA y Cloud Computing: ¿amigos o enemigos?

Luis F. Guijarro    18 enero, 2011

Tenemos la sensación de que el término SOA ha caído en desuso en los últimos tiempos. Tras haber sido un vocablo repetido y manoseado hasta la saciedad como vanguardia de las TI en el mundo empresarial, parece haber perdido terreno en favor del omnipresente Cloud Computing.

Esta sensación se ve refrendada si observamos el gráfico del 2010 del Gartner Hype Cycle de tecnologías emergentes, donde sigue apareciendo Cloud Computing, por tercer año consecutivo, en la zona más alta del “Peak of Inflated Expectations” (esto es, en pleno candelero, con las expectativas altas e intactas), mientras que el término SOA desaparece del gráfico tras aparecer en los 2 últimos años muy próximo a la zona de comienzo de la meseta de productividad, “Plateau of Productivity”, donde se marca el paso de una tecnología de emergente a consolidada, de expectativas a realidades.

 Además de la confusión propia que rodea a cada uno de estos grandes términos (¿quién no ha asistido, hace unos años, a alguna presentación dedicada exclusivamente a definir lo que era y lo que no era SOA? o más recientemente, ¿quién no ha visto algún video pretendidamente sencillo del tipo “cloud computing for dummies”?), el asunto se complica cuando se enfrentan ambos conceptos y surgen las típicas preguntas de sentido común en estos casos: ah, ¿pero no son lo mismo?, ¿pero Cloud no es una extensión de SOA?, ¿o es SOA el que incluye a Cloud?, ¿en que se diferencian entonces?…

 Para tratar de responder estas cuestiones suele ser recomendable empezar con unas pequeñas pinceladas que nos acoten el significado de cada una de las ideas y, a partir de ahí, intentar establecer las posibles relaciones entre ellas.

 Entiendo SOA (Services Oriented Architecture) como un paradigma o marco de referencia, en el ámbito de arquitectura software para el desarrollo de aplicaciones TI, que se basa en el desarrollo y reutilización de servicios con una funcionalidad de negocio clara y conocida, independiente y desacoplada, ofrecida a través de un interfaz claramente definido y accesible, así como en la orquestación (combinación) de dichos servicios para conformar servicios de negocio agregados de mayor valor que puedan, a su vez, ser ofrecidos de la misma forma en otras aplicaciones.

 Siempre se contraponen las aplicaciones construidas siguiendo modelo de desarrollo SOA (orquestando servicios ya existentes o nuevos pero susceptibles de ser reutilizados), con aquellas otras aplicaciones monolíticas (silos) construidas ad-hoc, de forma vertical, con funcionalidad fuertemente acoplada e imbricada de tal forma que es muy complicado su integración y reutilización en el desarrollo de otras aplicaciones.

 Además SOA siempre está relacionado con el uso de estándares abiertos como XML, SOAP, WSDL, UDDI, BPEL o BPMN por citar alguno de los más conocidos, que facilitan, ahora sí, la integración de servicios construidos y ejecutados sobre distintos contenedores de aplicaciones J2EE o .NET, e incluso sobre otros más propietarios como los entornos transaccionales en el mundo mainframe.

 Por su parte, la idea del Cloud Computing está ligada a un modelo novedoso de ofertar, desde la red, distintos tipos de recursos TI (desde recursos básicos de computación, memoria, elementos de red y almacenamiento, hasta plataformas para construir, desplegar y ejecutar aplicaciones, o incluso las propias aplicaciones o datos) que forman parte de un pool compartido y que pueden ser asignados, provisionados y entregados de forma rápida, bajo demanda, y con la mínima interacción entre el cliente y el proveedor del servicio.

Se suele considerar que la automatización de la provisión, gestión y monitorización del servicio ofrecido, el autoservicio desde el cliente, la capacidad multicliente de los recursos ofrecidos, la ubicuidad en el acceso a los mismos, la facilidad para la escalabilidad de las capacidades ofrecidas y la posibilidad de medición del uso de las mismas, son características esenciales para considerar que un servicio se ofrece bajo modelo Cloud.

 Tras este breve planteamiento de qué es cada cosa, parece evidente que la primera conclusión es que SOA y Cloud Computing no son lo mismo. Aunque hay algunas ideas que subyacen en la definición de ambos términos, como el uso del concepto de servicio o la idea de la independencia de localización de los mismos, queda claro que los ámbitos de aplicación son distintos, relacionandose SOA con el ámbito del desarrollo de aplicaciones TI con claro significado de negocio (empresarial), mientras que Cloud se refiere más a la forma de ofertar recursos TI (más amplio que solo el mundo de las aplicaciones) a cliente final, a su entrega, provisión, y posterior gestión y operación.

 Ahora bien, con un poco de reflexión por nuestra parte, podemos encontrar unos cuantos puntos de relación interesantes que, además, nos pueden iluminar sobre qué puede aportar SOA a Cloud y viceversa. A continuación os apunto algunos:

 1.      Si las aplicaciones que se ofrezcan desde la nube están diseñadas y construidas siguiendo paradigma SOA, esto es, por combinación de pequeños servicios de negocio o bloques funcionales reutilizables ya existentes, es evidente que tendrán mayor capacidad para cumplir con las características esenciales de escalabilidad, independencia de localización y provisión rápida y flexible, que si se tratara de aplicaciones monolíticas, y por tanto facilitarán su oferta en modo SaaS.

2.      Aplicaciones ofrecidas en modo SaaS por un tercero pueden pasar a engrosar el catálogo SOA de servicios de negocio de cualquier empresa. Se abren así nuevas posibilidades de añadir valor en nuevas aplicaciones o procesos de negocio que se desarrollen en el ámbito de dicha empresa. Un asunto a plantearse con cuidado en estos casos sería la forma en que dichos servicios obtenidos desde la nube se integran de forma adecuada en el modelo de gobierno SOA que la empresa tenga establecido.

3.      Una empresa podría decidir, dentro de su estrategia de adopción del modelo SOA, que la plataforma que soporte técnicamente la definición, el diseño y el desarrollo de sus aplicaciones orientadas a servicios, se la ofrezca un proveedor externo en modo PaaS.

Esto significaría que dicha plataforma, ofrecida como servicio desde la nube, debería tener componentes típicos de infraestructura SOA como un componente ESB o EAI, o un componente BPM, o un registro/repositorio de servicios, y que la empresa cliente tendría mecanismos automáticos y accesibles mediante herramientas web para la provisión, escalado, gestión y monitorización de todos los componentes de la plataforma, pero olvidándose de todo lo relacionado con la gestión de licencias de fabricante o de la instalación y mantenimiento de todos estos componentes de software.

Un paso más sería que el propio proveedor de la plataforma, además de los componentes mencionados, fuera capaz de proporcionar algunos servicios básicos del negocio de la empresa, aumentando paulatinamente la oferta hasta llegar a conseguir plataformas sectoriales específicas en modo PaaS.

4.      Por supuesto los distintos entornos de desarrollo, pruebas, certificación, preproducción o producción de una empresa que sigue un modelo de adopción SOA en el desarrollo de sus aplicaciones, pueden localizarse en Virtual Data Centers ofrecidos desde nubes públicas o privadas, esto es, sobre infraestructuras (servidores, elementos de red y almacenamiento, físicos y virtualizados) ofrecidos en modo IaaS. De esta forma las empresas se aprovecharían de la agilidad en la provisión y escalado necesaria para cada uno de estos entornos, así como del mejor aprovechamiento de los recursos hardware involucrados (importante en caso de que los Data Centers sean de la propia empresa).

Como idea final a destacar nos podríamos quedar con que el principal beneficio del uso conjunto de SOA y Cloud Computing en el ámbito empresarial es que, a la agilidad en el desarrollo de nuevas aplicaciones o sistemas TI que significa la implantación de un modelo SOA (gracias a la reutilización de servicios de negocio y al desarrollo basado en la integración sencilla de lo ya existente), se le suma la agilidad en la provisión de la misma, más la facilidad de escalado, gestión y monitorización, que proporciona la utilización del modelo Cloud Computing.

Y como respuesta al título de este post, podríamos concluir que SOA y Cloud no son enemigos, si no compañeros de viaje en la aventura de la aplicación de las TI en el ámbito empresarial y que cuanto más amigos sean, mejor para todos.

Sapere aude 😉

Imagen:  lennysan

Deja un comentario

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