Martín Cabrera @dmcabrera http://dmcabrera.wordpress.com
! ! ! ! ! !
Introducción a SOA Modelado de Servicios SOA Anti-Patterns Principios de la Orientación a Servicios SOA y el Proceso Metodológico Arquitectura SOA Multi-canal
¿Qué es SOA? !
Es un estilo de arquitectura que promueve la descomposición funcional de un aplicación en una serie de componentes denominados Servicios
Servicios !
En SOA un Servicio es un componente con el que interactuamos intercambiando mensajes.
!
Cada servicio expone una serie de capacidades funcionales asociadas al contexto al cual pertenece
!
Dichas capacidades se publican en su contrato de uso
Service
!
Es una agregación coordinada de servicios.
!
Un servicio puede participar de varias composiciones.
!
La composición representa un nuevo Servicio
!
Representa una Colección estandarizada y gobernada de Servicios
!
Puede existir un único Inventario a nivel corporativo o varios inventarios independientes.
!
La diversidad de tecnologías de base puede “forzar” la existencia de varios inventarios
!
Esta determinado por el tipo de lógica que encapsula el servicio y su nivel de reúso
!
Normalmente los podemos categorizar en: ! ! ! !
Entity Service Business Task Service Busines Process Service Utility Service
!
Expone capacidades funcionales asociadas con una Entidad del Negocio
!
Su nivel de reúso tiende a ser alto
!
Encapsulan una capacidad funcional que por lo general involucra a varias entidades del negocio
!
Su nivel de reuso es relativo a la “horizontalidad” de la lógica encapsulada
Nivel de reúso bajo
Nivel de reúso alto
!
Son un Task Service que surge como una Composición de Entity y Task services más atómicos
!
Dicha composición se puede expresar como una Orquestación
!
Son componentes que exponen capacidades técnicas (no funcionales) que son naturalmente cross a cualquier aplicación, por ejemplo: ! ! !
!
Logging Manejo Transaccional Manejo de Excepciones
Son conocidos también como: ! !
Infraestructure Services Technology Services
!
Chequear si existe RUT (Entity Service)
!
Chequear antecedentes morosos (Business Task Service)
!
Procesar Solicitud de Crédito Consumo (Business Process Service)
!
Determina el dominio del negocio al cual pertenece el servicio ! ! ! ! !
!
Contabilidad y Finanzas Proveedores CRM Ventas Gastos
Es la base para implementar una correcta modularización de los servicios
Contabilidad
!
Define la frontera de mi aplicación exponiendo servicios.
!
Encapsula ! ! !
Lógica de negocios Manejo transaccional Lógica de persistencia
!
El contrato de uso de un servicio equivale a: ! !
Las operaciones que expone (OperationContract) Los datos que recibe y que retorna cada operación (DataContract)
!
Determina claramente los datos que mi servicio recibe y los datos que mi servicio retorna. ! ! !
Datos desnormalizados. Orientados a la funcionalidad que el servicio expone (justo lo que necesita). No es “Object Oriented”…es “Data Oriented”
!
Ej: Procesar Solicitud de Préstamo
Datos Desnormalizados
!
Representa los datos que maneja internamente la implementación de mi servicio. ! ! !
Es altamente normalizado. Puede ser orientado a objetos o relacional. Normalmente encapsula datos y comportamiento.
!
Ej: Procesar Solicitud de Préstamo
Modelo de dominio normalizado
!
CRUD viene de Create, Retrieve, Update y Delete
public interface ClienteService { void CrearCliente(string cedula, string nombre, string direccion); void ActualizarCliente(string cedula, string nombre, string direccion); void EliminarCliente(string cedula); }
!
¿Qué esta mal? ! !
Son una deformación de las técnicas de programación tradicionales Estas operaciones no tienen “semántica de negocio”.
public interface ClienteService { void BeginChanges(); void ActualizarNombre(string nombre); void AcualizarDireccion(string direccion); void CommitChanges(); }
!
No cumple con el principio de granularidad alta.
!
Deja información inconsistente entre operación y operación.
!
Generan overhead innecesario (muchos roundtrips).
public interface SuperService { Object Execute(Object request); }
public interface SuperService { Object Execute(Object request); } ! ! !
¿Qué funcionalidad ofrece este servicio? ¿Qué datos recibe? ¿Qué datos retorna?
!
La Orientación a Servicios surge como un nuevo Paradigma, basado en una serie de principios muy claros:
!
Dichos principios son: ! ! ! ! ! ! ! !
Standarized Service Contract Service Loose Coupling Service Abstraction Service Reusability Service Autonomy Service Statelessness Service Discoverability Service Composability
!
Un Servicio expresa sus capacidades funcionales a través de un Contrato de Uso
!
Se trata de uno de los principios más importantes de este paradigma
!
Los Servicios deben ser diseñados independientemente de quienes los consuman
!
Este principio promueve la evolución independiente del diseño del contrato de uso del servicio y la implementación del mismo
!
El correcto Nivel de Abstracción de un Servicio define: ! ! !
Su nivel de acoplamiento Su nivel de encapsulamiento Su nivel de granularidad
!
La capacidad de Reuso esta en el ADN de una Arquitectura Orientada a Servicios.
!
No lograr un buena capacidad de reuso es síntoma de un proceso de adopción de SOA defectuoso.
!
Para garantizar confiabilidad, rendimiento, seguridad e integridad, los servicios deben contar con cierto nivel de autonomía y gobernabilidad.
!
El no lograr un buen nivel de aislamiento, pone en peligro la calidad de una solución orientada a servicios.
!
El manejo de estado de un Servicio es uno de los aspectos clave vinculados con su diseño.
!
El carecer de estado garantiza un funcionamiento óptimo en escenario de alta concurrencia y evita la dependencia con el consumidor del servicio.
!
Las capacidades funcionales de un servicio pueden ser aprovechadas en la medida que las mismas puedan ser descubiertas e interpretadas correctamente por quienes las consumen.
!
No considerar esta capacidad puede derivar en la construcción de soluciones estáticas con altos niveles de acoplamiento.
!
Este es otro de los principios fundamentales de la orientación a servicios.
!
Dependiendo de su taxonomía, los servicios deben ser capaces de participar en una o varias composiciones de más alto nivel.
!
Las composiciones deben ser expuestas como nuevos servicios.
!
SOA puede ser utilizado bajo el marco de varios procesos metodológicos
!
Sin embargo, las tareas de Análisis y Diseño deben orientarse fuertemente a la identificación y modelamiento de servicios.
!
Los principios de orientación a servicios deben aplicarse a todo nivel, desde el análisis de requerimientos hasta el diseño y desarrollo de componentes.
!
http://www.whatissoa.com/
!
www.soamagazine.com
!
SOA, Principles of Service Design, Thomas Erl, ISBN 0-13-234482-3, 2008
!
Service-Oriented Architecture: Concepts, Technology, and Design, Thomas Erl, ISBN: 0-13-185858-0, 2005