Moderando el título
Para que se entienda: SOA es un excelente concepto en los papeles. Como plug & play. Como el Fondo Monetario Internacional. El problema de SOA es la práctica, como lo es el con el plug & play y con el FMI.
¿Qué es SOA?…Una metáfora simple.
La vez que entendí lo que era una arquitectura orientada a servicios fue con un simple ejemplo.
Todos tenemos un DVD player en casa. Ese DVD player presta un servicio, que es el de reproducir películas cada vez que se lo requiera. Para ello, usamos un DVD con contenido, lo colocamos y el DVD presta su servicio. Inclusive podemos cambiar los DVD, variar su contenido, pero el dispositivo seguirá cumpliendo con el servicio bajo una demanda específica.
Esto también puede ser llevado al ámbiro de las arquitecturas de sistemas. En ese caso, bajo el acrónimo SOA se define a un estilo de diseño de sistemas computacionales que permite el intercambio de información entre las diferentes aplicaciones que lo componen para cubrir todos o algunos procesos de negocio/solución.
Pedrito necesita cierta información de negocio para lo que desarrolla un servicio de consulta en vez de desarrollar una aplicación que consulte el modelo de datos directamente. Paquito desarrolla un servicio que entrega esa información. Periquito administra un broker por donde pasan las preguntas y respuestas de los diferentes servicios. Basta que los servicios se pasen los mensajes para que la magia tenga lugar.
Pero…¿Cuál es el problema?
El problema es que SOA nace como un paradigma que intenta dar una solución a 2 grandes problemas de la IT corporativa moderna:
- La interoperatividad de sistemas desarrollados en diversas tecnologías.
- La standarización, uniformidad y oficialización de las fuentes de datos y sus respectivos "mensajes" de interacción.
Pero, aquí viene el gran pero, esto es fantástico siempre y cuando el factor humano de la compañía acuerde y consienta que en SOA lo fundamental es la "orquestación". Así es, tal como lo es en la música, las áreas de desarrollo que se orienten al paradigma deben trabajar para que humanos y sistemas coordinen dentro del modelo de negocio.
Esto en la práctica, en base a mis experiencias, es francamente irrealizable. Ya sea por las urgencias propias de negocio o por el bajo compromiso humano, suele ser muy difícil llegar a soluciones SOA puras. Un ejemplo de la práctica podría ser que un "business process owner" requiera determinada información de los sistemas, que por su complejidad obligue a los desarrolladores a no poder llegar a tiempo a desarrollar un servicio o una transacción middleware o broker que consiga la información para un servicio receptor (una web, por caso). Entonces los diferentes equipos de desarrollo llegan a la conclusión que es más practico desarrollar una aplicación que consulte directamente la base de datos, a la vieja usanza. Todo el compromiso SOA se da de narices contra una puerta. La orquesta desafina.
¿Es SOA una mentira?
No. No lo es en el aspecto teórico. Pero en la práctica si lo es. No puedo evitar sonreir cuando en publicaciones especializadas, principalmente aquellas orientadas al management IT, hacen incapié en el acrónimo SOA sin contabilizar que previo a la decisión de optar por el paradigma es necesaria una revisión seria de las capacidades y posibilidades humanas y tecnológicas de sostener el modelo.
Normalmente la decisión corporativa de orientarse a SOA nace de la capacidad o necesidad de implementación de una aplicación específica, puede ser un CRM o un ERP. El vendor publicita la integración SOA del producto, SOA está de moda en las revistas, se adopta SOA por completo. En la teoría. En la práctica después al CRM se le entra por un database link y cuando hay que cambiar de versión el CRM, empiezan los llantos porque los artilugios desarrollados y las customizaciones no-SOA molestan el upgrade tecnológico. Entonces, la orquesta deja de tocar y se le mueren un par de violinistas. Son los costos.
Considero que es posible y viable llevar a la práctica arquitecturas SOA, sobre todo en el ámbito de las compañías web. Es una facilidad tecnológica dado que es los mensajes lo son casi todo en los servicios web corporativos. De todas maneras, me gustaría que algún lector me contara sus experiencias SOA. Quizá hay más filarmónicas tocando de las que he tenido posibilidad de escuchar.










Fernando Hevia said,
4-17-2008 in 10:42:14 at 201.216.249.98Desde la perspectiva práctica de un programador, no concuerdo con que SOA sea una mentira. No hace falta que todos los sistemas con los que voy a interactuar sean SOA compliant para que, en menor escala, pueda poner en práctica el paradigma.
Por algún punto hay que arrancar, luego se irá extendiendo los servicios disponibles gradualmente.
Tampoco debe verse atado el éxito del paradigma a decisiones corporativas sino más bien se debe buscar evangelizar los programadores. Programadores y analistas deben aceptar las bondades del paradigma y considerar en su agenda destinar tiempo a construir código que probablemente no necesitarán para su propio uso.
Se requiere del buen juicio (basado en la experiencia) para definir interfaces lo suficientemente estándar para que sean útiles a otros.
Quizá uno de los escollos más importantes sea el difundir estas interfaces en forma efectiva: que los colegas sepan que el servicio existe y que lo usen.
Luego vienen consideraciones respecto a que tan bonito y rápido resulta el servicio. No cualquiera programa un servicio capaz de sostener cientos de transacciones por segundo. Y cuando es el servicio no satisface mis necesidades debo tener la flexibilidad de romper con el paradigma sin rasgarme las vestiduras en desesperación. La no estandarización de los servicios tampoco necesariamente rompe el paradigma. Si bien es deseable que todos conformen cierta línea, en caso contrario el paradigma persiste.
¿Qué quiero decir con esto? Que en realidad es bastante simple adoptar SOA si empezamos en la escala adecuada.
En mi experiencia particular, es en Telecom Personal, en el área de desarrollo de Collection, donde he podido adoptar el paradigma en pequeños módulos a mi cargo (pequeños en el contexto de la variedad de sistemas en la compañía) a pesar de no existir ningún lineamiento en tal sentido por parte del managemente de IT. Admito que los servicios fueron contemplados inicialmente para consumo de sistemas dentro de mi propia esfera, pero gracias al esfuerzo extra puesto en producir servicios genéricos y extremadamente performantes, nos encontramos que estábamos en condiciones de abastecer otras aplicaciones de la compañía con información que nosotros teníamos y ellos necesitaban.
Un caso particularmente curioso es el que denominamos genéricamente “Servidor de Líneas”. Este servicio informa a qué plataforma y mercado pertenece una línea: TDMA o GSM, Prepago o Postpago. Lo notable es que tuvimos que desarrollarlo porque las propias plataformas dueñas de la información no podían proveer los datos en forma eficiente. Tirarles cientos de consultas por segundo era prohibitivo para ellas. Por ello nos vimos forzados a romper la máxima “no duplicarás” para encontrar la manera de contar nosotros con la misma información. Convertirlo en un servicio para nuestras propias aplicaciones fue el primer paso, ofrecerlo a toda la compañía fue un proceso más lento pero posible gracias a que la interfaz era la adecuada y la tecnología utilizada batía records en TPS. Claro que ayudó el que ofrecieramos librerías en C y Java para acceder al servicio, incluso agregamos un ejecutable liviano para usarse desde scripts. En fin, le pusimos el moño.
¿Estaba la suite de sistemas de Collection basado en SOA? Definitivamente no. Pero allí nacieron varios servicios de mayor o menor éxito en la Cía.
Me dirán que servicios aislados no tienen nada que ver con el paradigma… pero si aplicábamos el zoom nos encontrábamos con que algunos módulos eran SOA compliant.
Saludos,
F.