La arquitectura orientada a servicios (SOA, siglas del inglés Service Oriented Architecture) es un estilo de arquitectura de TI que se apoya en la orientación a servicios. La orientación a servicios es una forma de pensar en servicios, su construcción y sus resultados. Un servicio es una representación lógica de una actividad de negocio que tiene un resultado de negocio específico (ejemplo: comprobar el crédito de un cliente, obtener datos de clima, consolidar reportes de perforación)

El estilo de arquitectura SOA se caracteriza por: Estar basado en el diseño de servicios que reflejan las actividades del negocio en el mundo real. Estas actividades forman parte de los procesos de negocio de la compañía. Representar los servicios utilizando descripciones de negocio para asignarles un contexto de negocio. Tener requerimientos de infraestructura específicos y únicos para este tipo de arquitectura. En general se recomienda el uso de estándares abiertos para la interoperabilidad y transparencia en la ubicación de servicios. Estar implementada de acuerdo con las condiciones específicas de la arquitectura de TI en cada compañía. Requerir un gobierno fuerte sobre las representación e implementación de servicios. Requerir un conjunto de pruebas que determinen que es un buen servicio. El desarrollo e implementación de una arquitectura SOA se rige por los principios descritos en el manifiesto SOA . Por otra parte la aplicación de la orientación a servicios se divide en 2 grandes etapas: Análisis orientado a servicios (Modelado de servicios) Diseño orientado a servicios, El diseño orientado a servicios cuenta con 8 principios de diseño que se aplican sobre cada uno de los servicios modelados, esto principios de diseño son: Contrato de servicio estandarizado: Los contratos de servicio cumplen con los mismos estándares de diseño. Bajo acoplamiento: Los servicios evitan acoplarse a la tecnología que los implementa y a su vez reducen el acoplamiento impuesto a los consumidores. Abstracción: Los contratos presentan la información mínima requerida y la información de los servicios se limita a los expuesto en el contrato. Reusabilidad: Los servicios expresan y contienen lógica de negocio independiente del consumidor y su entorno, por lo tanto se convierten en activos de la empresa. Autonomía: Los servicios deben tener un gran control de los recursos tecnológicos sobre los cuales están implementados. Sin estado: Los servicios reducen el consumo de recursos al delegar el manejo de estados (sesiones) cuando se requiera. Garantizar su descubrimiento: Lo servicios cuentan con metadata que permite descubrirlos e interpretar el servicio en términos de negocio. Preparado para ser usado en composiciones: Los servicios pueden hacer parte de una composición sin importar el tamaño y complejidad de la misma.

Origen

Los modelos de desarrollo han ido evolucionando con el paso de los años. En los años 80 aparecieron los modelos orientados a objetos, en los 90 aparecieron los modelos basados en componentes y en la actualidad han aparecido los modelos orientados a servicios.

Aunque la arquitectura orientada a servicios no es un concepto nuevo (si bien fue descrita por primera vez por Gartner hasta en 1996), sí se ha visto incrementada su presencia en la actualidad, en gran medida debido al aumento de uso de servicios web. Con la llegada de éstos, la arquitectura SOA ha hecho que el desarrollo de software orientado a servicios sea factible. Aunque los servicios web usan con frecuencia SOA, SOA es neutral e independiente de la tecnología utilizada y por tanto no depende de los servicios web, aunque estos la popularizan. http://upcommons.upc.edu/pfc/bitstream/2099.1/12312/1/ESTUDIO_DE_ARQUITECTURAS_DE_REDES_ORIENTADAS_A_SERVICIO.pdf

Terminología

Término Definición / Comentario Servicio Una función sin estado, auto-contenida, que acepta una(s) llamada(s) y devuelve una(s) respuesta(s) mediante una interfaz bien definida. Los servicios pueden también ejecutar unidades discretas de trabajo como serían editar y procesar una transacción. Los servicios no dependen del estado de otras funciones o procesos. La tecnología concreta utilizada para prestar el servicio no es parte de esta definición. Existen servicios asíncronos en los que una solicitud a un servicio crea, por ejemplo, un archivo, y en una segunda solicitud se obtiene ese archivo. Orquestación Secuenciar los servicios y proveer la lógica adicional para procesar datos. No incluye la presentación de los datos. Coordinación. Sin estado No mantiene ni depende de condición pre-existente alguna. En una SOA los servicios no son dependientes de la condición de ningún otro servicio. Reciben en la llamada toda la información que necesitan para dar una respuesta. Debido a que los servicios son "sin estado", pueden ser secuenciados (orquestados) en numerosas secuencias (algunas veces llamadas tuberías o pipelines) para realizar la lógica del negocio. Proveedor La función que brinda un servicio en respuesta a una llamada o petición desde un consumidor. Consumidor La función que consume el resultado del servicio provisto por un proveedor

Principios

No hay estándares en relación a la composición exacta de una arquitectura orientada a servicios, aunque muchas fuentes de la industria han publicado sus propios principios.

Algunos de los principios publicados son los siguientes: Contrato de servicios estandarizados: los servicios adhieren a un acuerdo de comunicación, según se define en conjunto con uno o más documentos de descripción de servicios. Acoplamiento débil de sistemas: los servicios mantienen una relación que minimiza las dependencias y sólo requiere que mantengan un conocimiento de uno al otro. Abstracción de servicios: más allá de las descripciones del contrato de servicios, los servicios ocultan la lógica a los demás. Reutilización de servicios: la lógica se divide en servicios con la intención de promover la reutilización. Autonomía de servicios: los servicios tienen control sobre la lógica que encapsulan, desde una perspectiva de diseño y ejecución. Servicios sin-estado: los servicios minimizan el consumo de recursos aplazando la gestión de la información de estado cuando sea necesario. Descubrimiento de servicios: los servicios se complementan con los metadatos mediante los cuales se pueden descubrir e interpretar la eficacia. Composición de servicios: servicios están compuestos por partes eficazmente, independientemente del tamaño y la complejidad de la composición. Granularidad de servicios: una consideración de diseño para proporcionar un ámbito óptimo y un correcto nivel granular de la funcionalidad del negocio en una operación de servicio. La normalización de servicios: los servicios se descomponen a un nivel de forma normal para minimizar la redundancia. En algunos casos, los servicios se desnormalizan para fines específicos, como la optimización del rendimiento, el acceso y agregación. Optimización de servicios: los servicios de alta calidad son preferibles a los de baja calidad. Relevancia de servicios: la funcionalidad se presenta en un nivel de granularidad reconocido por el usuario como un servicio significativo. Encapsulación de servicios: muchos servicios están consolidados para el uso de SOA. A menudo, estos servicios no fueron planificados para estar en un SOA. Transparencia de ubicación de servicios: se refiere a la capacidad de un consumidor de servicios para invocar a un servicio independientemente de su ubicación en la red. Esto también reconoce la propiedad de descubrimiento (uno de los principios fundamentales de SOA) y el derecho de un consumidor para acceder al servicio. A menudo, la idea de la virtualización de servicios también se refiere a la transparencia de ubicación. Aquí es donde el consumidor simplemente llama a un servicio lógico, mientras que un SOA habilita la ejecución del componente de la infraestructura, normalmente un bus de servicios, que mapea este servicio lógico y llama al servicio físico.

SOA y los Servicios Web

Hay que tener cuidado cuando se manejan estos términos y no confundirlos. Web Services (WS) engloba varias tecnologías, incluyendo XML, SOAP, WSDL, UDDI…los cuales permiten construir soluciones de programación para mensajes específicos y para problemas de integración de aplicaciones.Kishore Channabasavaiah and Kerrie Holley, IBM Global Services, and Edward M. Tuggle, Jr., IBM Software Group, “On demand operating environment solutions: Migrating to a service-oriented architecture”, white paper, April 2004.

En cambio SOA es una arquitectura de aplicación en la cual todas las funciones están definidas como servicios independientes con interfaces invocables que pueden ser llamados en secuencias bien definidas para formar los procesos de negocio.

En SOA la clave está en la interfaz, puesto que define los parámetros requeridos y la naturaleza del resultado. Esto significa que define la naturaleza del servicio y no la tecnología utilizada. Esta función permite realizar dos de los puntos críticos: los servicios son realmente independientes y pueden ser manejados.

WS es el estándar apoyado por la industria (Microsoft, IBM, BEA, Oracle, Sun y otros), por empresas de distintos rubros, no tecnológicas (Ford, United Airlines, KPMG, Daimler-Chrysler), agrupadas en un comité conocido como Web Services Interoperability (WS-I). Este organismo tiene por principal objetivo asegurar que los grupos de trabajo que definen las especificaciones sobre WS utilizan estándares adecuados, a la vez que monitoriza el avance de sus trabajos; no define ni desarrolla estándares.ARQ-RFC “Pautas y recomendaciones para SOA v.091”, July 2006

SOA y Web 2.0 SOA, acrónimo de Service-Oriented Architectures (Arquitecturas orientadas a Servicios), es una arquitectura que permite que las nuevas aplicaciones no sean desarrolladas de cero sino una integración de un conjunto de servicios publicados. Web 2.0 es un avance de la web tradicional que permite una gran colaboración entre usuarios de Internet y otros usuarios.

Aunque estas se basan en la arquitectura de tecnologías Web y en la Arquitectura orientada a servicios presentan diferencias. Entre estas, podemos mencionar que cuando se habla de SOA se hace referencia acerca de conexiones de aplicación y bases de datos pero no de conectar personas. Por el contrario, Web 2.0 se centra en la posibilidad que las personas interactúen colaborando entre ellas. Es decir, esta asociada a la conexión de aplicaciones y datos pero con una visión más social. Originalmente la información se ubicaba en un sitio Web y los usuarios simplemente veían o descargaban el contenido(llamada Web Tradicional o Web1.0). En forma creciente, los usuarios tienen más que decir sobre la naturaleza y el alcance del contenido en la Web y en algunos casos control en tiempo real sobre este contenido. Por ejemplo, las enciclopedias dinámicas como Wikipedia.

SOA y los microservicios

Los microservicios son una interpretación moderna de la arquitectura orientada a servicios usada para construir sistemas distribuidos. Los servicios en una arquitectura de microservicios son procesos que se comunican con otros a través de una red para conseguir el objetivo final. Estos servicios pueden usar protocolos simples (típicamente HTTP con REST o mensajería liviana como RabbitMQ o ZeroMQ).

Capas de software

SOA define las siguientes capas de software: Aplicaciones básicas: sistemas desarrollados bajo cualquier arquitectura o tecnología, geográficamente dispersos y bajo cualquier figura de propiedad; De exposición de funcionalidades: donde las funcionalidades de la capa aplicativa son expuestas en forma de servicios (generalmente como servicios web); De integración de servicios: facilitan el intercambio de datos entre elementos de la capa aplicativa orientada a procesos empresariales internos o en colaboración;