2- pensando en soa

10
Pensando en SOA Andrés Hevia

Upload: carlos

Post on 17-Aug-2015

268 views

Category:

Documents


4 download

DESCRIPTION

capitulo 2

TRANSCRIPT

Pensando en SOA Andrs Hevia Pensando en SOA Andrs Hevia http://pensandoensoa.com Captulo 2. Conceptos Pensando en SOA Andrs Hevia http://pensandoensoa.com Introduccin En este captulo nos familiarizaremos con el concepto de SOA, los servicios y los procesos de negocio. Tres trminos muy unidos que debemos manejar con soltura para primero entender de qu va todo esto de SOA y luego para aplicarlo en nuestra organizacin. qu es SOA? Esta es la pregunta del milln. La pregunta que nos hacemos todos cuando vemos por primera vez la dichosa palabra. Y la vemos mucho, y por todas partes. SOA es una de esas palabras que est de moda en el mundo de Tecnologas de la Informacin (si hubiese un Twitter de T.I. sera trending topic quizs superado por cloud ultimamente). En todos los blogs del sector, libros y conferencias! es bastante comn encontrarnos con ella. El problema de SOA es que es difcil de explicar al principio. Sin embargo, una vez que has visto la luz, te parece un concepto bastante natural. Otra cosa por supuesto, es llevarlo a la prctica, algo que segn el tamao y situacin de nuestra organizacin no va a ser coser y cantar. Como ya sabrs, SOA1 son las siglas de Service Oriented Architecture (Arquitectura Orientada a Servicios), aunque tampoco es que esto nos diga mucho. Y quizs mas que decirnos algo, lo que har sin duda es confundirnos. Creo que no son unas siglas bien elegidas, precisamente porque inducen a confusin. Ms adelante explicar por qu digo esto. As pues, uno de los primeros problemas que nos encontramos cuando queremos dar a conocer SOA y extender su adopcin en la empresa, es darle a las personas que no estn familiarizadas con este concepto una explicacin sencilla y clara de qu es SOA. Para liar ms el asunto, podemos decir con toda probabilidad que si dos personas conocen SOA, seguro que tienen una definicin diferente, y tal vez ambas sean acertadas. Como vemos, uno de los primeros problemas que nos encontramos cuando nos metemos en este mundillo es ponerse de acuerdo en una definicin sencilla, objetiva y fcil de entender Si buscamos en internet nos encontramos normalmente con definiciones demasiado tcnicas o demasiado tericas para que en un primer momento podamos entender de qu se est hablando. La bsqueda de una definicin sencilla de SOA ha sido uno de mis primeros objetivos en el blog por lo que intentaremos ir a lo sencillo, ya tendremos tiempo de profundizar ms adelante en el libro. 1 http://es.wikipedia.org/wiki/Arquitectura_orientada_a_servicios Pensando en SOA Andrs Hevia http://pensandoensoa.com Buscando una definicin sencilla de SOA En definitiva, para una persona familiarizada con la informtica, el concepto en el que se basa SOA le sonar mucho. No es algo que se haya inventado en los ltimos aos. Sin embargo, una cosa es tener una idea intuitiva y otra plasmarla en papel de manera concreta y ajustada. El primer intento, en la bsqueda de una definicin sencilla sera el siguiente, quizs un poco informal, pero es el primer paso:Formadedisearaplicacionesqueconsisteenjuntarservicios(pequeos programas) segn tus necesidades. El objetivo no es programar nuevos servicios si no componer nuevos servicios basndose en otros ms bsicos ya programados.Aqu vemos uno de los principios fundacionales de SOA, la composicin o la creacin de nuevos servicios no se hace desde cero, si no a partir de otros servicios ya existentes. Que nos promete esta caracterstica de la orientacin a servicios? Pues que una vez dispongamos de un conjunto de servicios bsicos, de bajo nivel, que implementen la lgica de negocio de nuestra organizacin, no tendremos que volver a escribir de nuevo estos programas. La mejor forma de ver el concepto de composicin es con un ejemplo. Imaginemos que estamos desarrollando una aplicacin para un banco. Construimos un servicio que nos permite meter dinero en una cuenta corriente. Para ello habr que implementar un pequeo programa que haga una actualizacin en varias tablas del modelo de datos. Desarrollamos otro pequeo programa que nos permite sacar dinero de la cuenta. Igualmente tendremos que que implementar el acceso a la base de datos para actualizar las tablas. Bien y que pasa si ahora nos piden hacer una funcionalidad de transferencia de dinero entre cuentas? es necesario volver a implementar un programa que accede a las tablas para hacer las actualizaciones necesarias? Pues afortunadamente, con SOA, la respuesta es no. Aqu es donde entra la caracterstica de composicin de SOA. Podemos hacer un nuevo servicio totalmente nuevo, que usa el servicio retirar dinero de una cuenta y el de meter dinero en la cuenta. Un nuevo servicio de ms alto nivel, de ms valor para la empresa y para entendernos sin programar. Ya no tendremos que saber, por ejemplo, cmo se accede a la base de datos. Pensando en SOA Andrs Hevia http://pensandoensoa.com Claro que esto es mucho prometer. Nada ms y nada menos que la reutilizacin de los activos software de la empresa. Algo que se ha perseguido quizs desde el inicio de la programacin estructurada, all por los aos 70, y que nunca se haba hecho realmente realidad. Pero creo sinceramente que con SOA, tenemos una oportunidad de llevarlo a la prctica realmente ya que tenemos los medios para ello, como veremos en ms adelante en el libro. Volviendo al tema de la definicin, creo que para el trabajo de evangelizacin sobre SOA en la empresa necesitamos una definicin un poco ms completa, aunque si es posible, igual de sencilla. En este sentido, me ha gustado especialmente la definicin que he encontrado en el libro SOA Adoption for Dummies (un libro que distribuye Software AG de manera gratuita) que en un traduccin libre quedara ms o menos as: SOA es una forma (de arquitectura) de mirar el mundo, y cuando se mira de esta manera todo es un servicio (el ladrillo con el que construir el edificio de SOA). Volvemos a la idea de que con SOA el software de la empresa se implementa a partir de piezas ms pequeas (los ladrillos) con los que se puede montar el edificio de las aplicaciones de negocio. Y llegados a este punto, si has llegado a leer hasta aqu, creo ya va siendo hora de mostrar lo que yo que creo que es una definicin ms acertada (y sencilla) de SOA. Sera la siguiente: SOA es una forma de ver y disear el software de una empresa. Est basada en ladefinicindepequeosprogramasdeutilidadparaelnegocio(servicio)quese pueden combinar fcilmente para construir nuevos servicios con ms funcionalidad ofreciendoalacompaaunagranflexibilidad,unareduccindeltimetomarkety una reduccin de costes. Un nombre mal elegido Pensando en SOA Andrs Hevia http://pensandoensoa.com Una vez vista una definicin, que espero os sirva, de lo que es SOA, hay una cosa que hay que tener muy clara en primer lugar. Me refiero a que no debemos ver SOA como algo referente a una tecnologa. Tampoco es un Middleware, ni es una herramienta que se pueda comprar en una caja. Lejos de esto, SOA es una forma de pensar, una nueva forma de disear software. Si se quiere decir con ms parafernalia, SOA es un nuevo paradigma de diseo de aplicaciones software, a la altura (o incluso ms) de lo que signific en su da el paso a la programacin estructurada o la orientacin a objetos. Si nos preguntamos quin tiene que tirar por la implantacin de SOA en la empresa podramos pensar, como ocurre muchas veces en la prctica, que debe ser el rea de las Tecnologas de la informacin en el que debe hacerlo. Sin embargo, esto no es as. Dado que no es algo relativo a la tecnologa, SOA debe venir impulsado, en primer lugar, por el rea de Negocio.Deben ser ellos los primeros interesados en disponer de servicios software que tengan sentido desde su punto de vista precisamente, que tengan sentido para el negocio y que den soporte a los productos y servicios que la empresa ofrece a sus clientes y socios. Que aporten funcionalidad de negocio que puedan incorporar a sus procesos, y que de una manera sencilla, puedan ofrecer a sus clientes nuevos servicios (de ms valor aadido) a partir de otros de ms bajo nivel existentes en la empresa (composicin de servicios). Sin embargo, todos sabemos que en la prctica como deca anteriormente SOA viene impulsado por el departamento de IT de la organizacin. Desde IT se confa en SOA para que haga realidad el viejo sueo de la reutilizacin del software, de la flexibilidad en la construccin de nuevas soluciones y el acortamiento de los ciclos de desarrollo. SOA no es una cuestin tecnolgica Creo que en la actualidad, en la gran mayora de los casos, las IT han dejado atrs el clich histrico de vivir de espaldas al negocio, en su propio frikismo tecnolgico y ya esta orientada claramente al negocio y al cliente. Aunque pueda parecer un slogan artificioso tenemos asumido desde las reas tcnolgicas aquello de somos esclavos del negocio o damos servicios al negocio. A fin de cuentas, el rea de negocio es el que paga el sueldo al rea de T.I.. Por supuesto, todava est instalada en muchas cabezas la correspondencia entre IT y mquinas, discos duros, consolas, etc. etc. Por supuesto, todos estos elementos son imprescindibles para que funcione el software, pero tambin es cierto que al rea de negocio no les interesa los problemas con la falta de memoria en los servidores o si las CPU estn al 100%. Simplemente quieren que los servicios de negocio que reciben estn siempre disponibles (que cumplan el acuerdo de nivel de servicio) para que ellos puedan atender a sus clientes de la mejor manera posible. Debemos entonces, quitarnos el halo de tecnolgico o de infraestructura. En T.I. a fin de cuentas se trabaja con informacin y no con tecnologa. De ah que hay quien propone incluso cambiar el trmino TI (Tecnologas de la informacin) por servicios de informacin. Y la reflexin que me hago entonces, es: por que se llama SOA a SOA?. Si lo tiene que impulsar el negocio y verlo como algo propio, que sentido tienen las palabras arquitectura orientada a servicios?. Arquitectura tiene un tufillo demasiado tcnico y no es fcilmente entendible para personas que no estn en el mundillo. como se explica a alguien que no es informtico que es la Arquitectura de Software?. Pensando en SOA Andrs Hevia http://pensandoensoa.com Despus est aquello, poco afortunado a mi entender, de orientado. orientado a qu? parece un quiero y no puedo. Quiero ser esto y no llego, entonces en lugar de ser algo, como slo soy un poquito entonces digamos que esto orientado. Al menos en espaol, este es el sentido que entiendo del uso de esta palabra. Luego est lo de servicios. Normalmente en las presentaciones esto nos lleva a explicar lo que es un servicio. Que si los principios de Gartner que debe cumplir (lo veremos ms adelante en el libro), que si debe ser reutilizable, puede ser compuesto, distribuible, etc. etc. ms y ms trminos tcnicos dficil de entender para los no iniciados en la tecnologa, y menos para los responsables del rea de negocio. Como conclusin a todo esto, y despus de varios aos ya intentando popularizar el trmino SOA dentro de la organizacin, modestamente propondra el cambio de nombre de este paradigma que est llamado a revolucionar la situacin de las IT y de las aplicaciones software (y espero que as sea). que tal algo como lo siguiente?: SOA: Diseo dirigido por negocio. En ingls quedara muy efectista: SOA: Business Driven Design (BDD) Creo que recoge mucho mejor lo que representa SOA, una forma de disear software que responda a las necesidades de negocio y no simplemente una arquitectura tcnica basada en servicios (un concepto difcil de explicar y ms an de entender). Y es que qu demonios es un servicio? qu es un servicio? Bien, llegados a este punto espero que el concepto de SOA haya quedado ms o menos claro. Cuento, por supuesto, que si es la primera vez que te encuentras con l, todava tengas muchas dudas, esto es muy normal.Hasta que no aplicamos este concepto en el da a da, no podemos hacernos una verdadera idea. Es necesario enfrentarse a muchas situaciones para ver realmente las muchas caras que tiene un concepto aparentemente sencillo. Uno de los objetivos de este libro es plasmar esto precisamente con un enfoque prctico.Es este el momento por lo tanto de continuar ahondando un poco ms y nos pongamos en serio con otra gran pregunta qu es un servicio? Empecemos por una definicin sencilla, incluso simplona, no es mucho pero por algo hay que empezar: Servicio:pequeoprogramaquehacealgotil,conunosparmetrosde entrada/salida conocidos, que puede ser juntado con otros servicios para crear otro ms complejo. Pensando en SOA Andrs Hevia http://pensandoensoa.com Ahora vamos a ir poco desgranando el concepto de servicio. Al final, tendremos un definicin formal, exhaustiva y fcil de entender (al menos eso espero). Lo primero que debemos tener en cuenta es que un servicio es un programa. Un pequea aplicacin software que hace algo, y algo til. Este es un concepto muy sencillo pero muy importante. Cuando me refiero a algo til, me refiero ni ms ni menos, a algo til para el negocio. Esta es la primera caracterstica de un servicio. Debe de ofrecer algo para el negocio, debe hacer algo que tenga relevancia para la empresa. Un servicio que sea algo as como validar usuario o poner traza seguramente no ser realmente un servicio. Sin embargo, dar de alta usuario o reservar vuelo s tienen sentido y valor para el negocio y sern buenos candidatos a ser servicios. Si alguna tienes duda de si estis tratando con un servicio con verdadero valor para el negocio pensad en qu dira del mismo el usuario o el cliente mismo de la aplicacin. Preguntaros a vosotros mismos: qu dira si le presentamos un servicio que sea poner traza? Seguramente no sabr ni siquiera de qu estamos hablando. Haced la prueba ahora con tarificar seguro de hogar. Seguro que ahora s asiente y entiende perfectamente qu es y para que vale este servicio. Normal, es el vocabulario y los conceptos con los que trabaja todos los das. qu es un proceso de negocio? Todos sabemos que en la situacin actual, el entorno en el que se mueve el negocio es enormemente cambiante. Hay ms competencia en un mundo globalizado, cambios normativos y legales, y por supuesto, en los ltimos aos una crisis econmica galopante. Para poder sobrevivir y mejorar, la empresa tiene la necesidad imperiosa de acelerar el desarrollo de aplicaciones de negocio para llegar al mercado lo antes posible y competir en mejores condiciones (time to market). Por otra parte la actividad de la empresa se desarrolla en torno a procesos de negocio, que son ni ms ni menos que un conjunto de tareas relacionadas llevadas a cabo para lograr un resultado: desde comprar un libro por Internet, darse de alta en la compaa elctrica o conceder una hipoteca. En muchas organizaciones, sobre todo las pequeas, estos procesos son manuales o si acaso, una combinacin de tareas manuales con algunas tareas soportadas por una aplicacin informtica. La metodologa que se ocupa de la gestin de estos procesos de la empresa mediante su automatizacin, es decir, la eliminacin de las tareas manuales y la informatizacin de los mismos es BPM (Business Process Management). Unprocesodenegocioesunaseriedetareasrelacionadasparalograrun resultadodenegociodefinido.Esdecir,podemosentenderunprocesocomouna flujodetareasrelacionadas,conbifurcacionesqueprovocanvarioscaminos posiblesparasuterminacin.Estastareaspuedenserdedostipos:automticas (ejecutadas por el sistema) y manuales o humanas (ejecutadas por personas) Pensando en SOA Andrs Hevia http://pensandoensoa.com Las tareas automticas son realizadas por el sistema y no necesitan de intervencin humana alguna (por algo son automticas). Normalmente estas tareas pueden durar desde unos cuantos milisegundos a unos cuantos segundos pero no suelen tener una duracin muy larga.Cuando interviene una persona para realizar una tarea (el segundo tipo) normalmente las esperas se incrementan multiplicando por varios rdenes. No es raro que una tarea humana pueda tardar horas, das o incluso meses o aos en ser resuelta. Ponindonos en el extremo, imaginemos por ejemplo el proceso de gestin de un expediente en una accidente de circulacin. Puede que el proceso no se pueda terminar hasta que finalice el juicio y esto puede representar aos. Esto hace necesariamente que el proceso se transforme en asncrono y se pare, en un estado "suspendido", esperando a que se complete la tarea humana. Proceso de negocio de comprar viaje En la imagen anterior, vemos un proceso de negocio sencillo pero que sirve perfectamente como ejemplo para todo lo dicho sobre los procesos.En este proceso, el cliente solicita una oferta para realizar un viaje. El sistema ejecuta tres tareas para reservar avin, hotel y coche. Una vez que se tengan todos los detalles del viaje (incluido el precio) se notifica al cliente. En este caso, se pasa a una tarea humana Aceptar viaje. El proceso se suspende en este punto hasta que el cliente apruebe o rechace la oferta. Si decide aceptarla entonces se cobra el viaje y despus se notifica al cliente. Evidentemente un proceso de negocio se puede complicar casi hasta el infinito. No tenemos ms que imaginarnos como puede ser el proceso de, por ejemplo, conceder una hipoteca o gestionar un siniestro. Ms adelante volveremos al concepto de proceso y repasaremos en detalle sus caractersticas. Por el momento, me interesa resaltar que cada una de las cajas que vemos en el diagrama, que representan las tareas que se tienen que ejecutar en un orden determinado para ejecutar el proceso, son en realidad servicios. Pensando en SOA Andrs Hevia http://pensandoensoa.com Por ejemplo reservar hotel puede ser un servicio que se ejecuta dentro de nuestra propia empresa, o tambin, puede ser realmente una invocacin a un servicio que nos proporciona un socio. Como veremos, esta caracterstica de no saber realmente dnde se ejecuta un servicio es una de sus grandes ventajas. As pues, los servicios nos permiten construir el proceso. No se entiende por lo tanto una orientacin a procesos en la empresa sin una orientacin a servicios. Resumen del captulo En este captulo hemos visto tres conceptos clave para entender SOA, y en consecuencia todo este libro: En primer lugar, qu es el propio concepto de SOA, una forma de disear software para las necesidades de negocio que nos permite reutilizar el software de la empresa combinndolo (composicin) para crear nuevas funcionalidades de ms alto valor aadido. Este software se construye en forma de pequeos programas reutilizables que son los serviciosPor ltimo, el concepto de proceso de negocio, que implementa la funcionalidad de negocio de la empresa. No se puede entender el proceso sin servicios, y tambin en un gran porcentaje de los casos, los servicios sin procesos se quedan cojos.