viernes, 14 de octubre de 2011

SOA... Una arquitectura orientada al servicio


He empezado a hacer una recopilación de la arquitectura SOA, para al final hacer una implementación en la empresa que trabajo; prometo compartir la experiencia a medida que la misma vaya evolucionando. Por ahora llevo esto:
Definición:
SOA es un concepto de arquitectura de software que define la utilización de servicios para dar soporte a los requisitos del negocio.
La Arquitectura Orientada a Servicios es un soporte arquitectónico de tecnologías de información que ayudan en la transformación de la empresa en un conjunto de servicios vinculados que pueden ser accedidos a través de una red. La combinación de una implementación SOA y los objetivos empresariales estratégicos aseguran los siguientes beneficios:

  • Alineación de la TI (Tecnología de la Información) a los negocios
  • Re utilización máxima de los activos de TI
Beneficios de la implementación de una arquitectura SOA:
Se clasifican en cinco puntos de entrada de los beneficios.

  • Personas: SOA enfoca al usuario a ver la empresa como un conjunto de servicios que le ayudan a interactuar con otras personas y procesos; esto genera un aumento en la productividad.
  • Procesos: al utilizar SOA la empresa puede transformar los procesos empresariales en servicios reutilizables y flexibles, que le permita mejorarlos y optimizarlos.
  • Información: una arquitectura orientada a servicios, provee un entorno de datos consistente y confiable para todas las áreas de la empresa, habilitándola para poder competir con mas eficiencia.
  • Conectividad: con SOA puede conectar los servicios y procesos de la empresa de forma eficiente, incluso se puede llegar a ofrecerlos como un nuevo servicio a futuros clientes o nuevos nichos de mercado.
  • Reutilización: la reutilización de servicios permite agilizar los desarrollos de nuevas características en los proyectos actuales y disminuye el tiempo de desarrollo en nuevos productos; al estar la estrategia de la empresa alineada con las TI, dar un paso adelante es mas sencillo.
Estandares SOA:
Para que un servicio pueda adaptarse a la arquitectura SOA y un conjunto de servicios pueda definirse globalmente como una arquitectura SOA implementada, debe cumplir con los siguientes requerimientos:

  • Debe corresponder a una funcionalidad de negocio bien establecida y acotada, asi sea necesario involucrar diferentes sistemas.
  • Debe ser re utilizable: un servicio que no se pueda reutilizar en cualquier medida, no debe ser un servicio sino una caracteristica propia interna del sistema.
  • Deben proveer un contrato formal sobre el cual se define la forma de acceso, funcionalidades, datos de entrada y salida.
  • Bajo acoplamiento: esto se logra accediendo al webservice a traves del contrato.
  • Permitir la composición: los servicios deben poder ser utilizado por otros servicios de mas alto nivel
  • Autónomos: los servicios deben tener su propia plataforma de ejecución, asegurando así la ejecucion de la funcionalidad y reutilizacion por parte de otros servicios.
  • No deben tener estado: un servicio solo debe tener la lógica de la funcionalidad
  • Debe poder ser descubierto: un servicio que esta escondido o nadie conoce, no es servicio, debe poder ser publicado en un directorio UDDI o algun otro medio de publicacion de servicios empresariales.
Relacion entre los estandares SOA [ http://arquitecturaorientadaaservicios.blogspot.com/ ]
Implementación de SOA sobre arquitecturas J2EE
J2EE incluye diferentes especificaciones orientadas a soportar la aplicación de arquitecturas SOA, entre ellas tenemos:
JAX-WS(Java Api for XML Web Services): esta implementación en sus utlimas especificaciones permite manejar protocolos como SOAP (simple object access protocol) y XML, permitiendo el desarrollo de webservices, los cuales serán publicados por un servidor de aplicaciones.
JBI(Java Business Integration): esta es una especificación con iniciativa de la industria para crear una versión estandarizada e integral para aplicaciones de negocios. JBI direcciona las necesidades de integración orientadas a servicios (SOA) creando un meta contenedor de servicios integrados. Esta es una arquitectura basada en plugins orientados por mensajes; puede recibir plugins de terceros y pueden operar normalmente. En JBI no se define el como se conectan los componentes, pero si define los frameworks, interfaces de contenedores, comportamientos y servicios comunes.
La principal meta de JBI es proveer una arquitectura y un framework base para la creación dinámica y distribución de aplicaciones débilmente acopladas y de componentes orientados a servicios. Del JBI es que nace la arquitectura para el desarrollo de los ESB o Enterprise Service Bus.

Enterprise Service Bus (ESB)
Es la combinacion de diferentes arquitecturas que proporcionan servicios fundamentales para otras arquitecturas mas complejas a traves de un sistema de mensajes y que responde a eventos. ESB se centra en la integracion de los sistemas, especificamente hablando de protocolos y formas de acceso (http, ftp, sockets... etc).

Componentes de un ESB:
  • Invocación: Se encarga de proporcionar apoyo a los protocolos de transporte de manera sincrónica y asincrónica.
  • Routing: Responsable para el envío de la información para un lugar u otro, lo hace de un modo estático o dinámico. Podemos usar el enrutamiento basado en reglas con Drools por ejemplo.
  • Mediación (Trasformación): Se encarga de proporcionar la transformación de protocolos, por ejemplo entrar en una http y salir en un SFTP.
  • Mensaje: Se encarga de proporcionar el tratamiento, procesamiento y el refuerzo de mensajes. Por ejemplo, si lee un xml el ESB debe ser capaz de añadir o eliminar información de ese XML antes de llegar al destino.
  • Orquestación / Coreografía: Se refieren a procesos complejos y BPMN / BPEL si no usamos BPEL no precisaremos de estas dos, muchas personas piensan que están obligados a usar estos dos en un ESB, y en muchos casos no existe tal necesidad.
Frameworks de Buses de Servicios (ESB)
Como Framework entendemos una estructura conceptual y tecnologica con soporte definido; y para buses de servicios tenemos los siguientes frameworks de trabajo, los cuales ayudan a implementar el modelo SOA sobre java:

Apache ServiceMix:

ServiceMix combina SOA y EDA(Arquitectura orientada a eventos) en un solo paquete; esta basado en la especificacion JSR208(JBI)
Apache Synapse

Synapse es un bus de servicios de apache diseñado para ser ligero y agil. Esta basado en un potente motor que actualiza asincronicamente los servicios y provee muy buen soporte a xml, web services y REST(Representational State Transfer).
Existen otras iniciativas como:
* OpenESB
* Spring Integration: basado en Spring Framework
* Celtix
* Mule

No hay comentarios:

Publicar un comentario