Ir al contenido principal

Homus Arquitectus

Una breve reseña sobre la evolución en la arquitectura de software.



Al principio fue el Mainframe, ohhh todo poderoso, con un sin número de clientes tontos, denominados así por su casi nula capacidad de computo. Todo residía en el Mainframe. ¿La Persistencia? En el Mainframe. ¿La lógica de negocios? En el Mainframe. ¿Las aplicaciones como tal? Adivine… En el Mainframe. ¿La capa de presentación? Allí mismo pues, en el sagrado Mainframe.






El esquema de arquitectura basado en Mainframes y clientes tontos tenía algunas ventajas como lo son:
  • ·         Sencillez de arquitectura
  • ·         Facilidad de Monitoreo
  • ·         Control simplificado de despliegues

Pero a su vez tenía una principal desventaja, condición tal en la que centraremos las ideas de esta publicación; me refiero a la enorme incapacidad para el crecimiento o escalabilidad!!

Para resolver este problema se estableció entonces un modelo al que llamamos Cliente servidor. En el cual los Mainframes son básicamente servidores de Base de Datos, mientras que los clientes, ahora denominados clientes gordos, con muchos recursos asignados, eran los encargados de ejecutar las aplicaciones, lo que incluye la capa de presentación e incluso una buena dosis de Inteligencia de Negocio.



Este modelo resolvía gran parte del problema de escalabilidad del modelo anterior, pero trae consigo el problema conocido como la “Pesadilla del Mantenimiento”. En otras palabras, al residir los aplicativos en las máquinas clientes, cuando se precisa de una actualización es necesario idear mecanismos que permitan propagar ese cambio o actualización en todos los clientes conectados.

En ese contexto surge el modelo de 3 capas como propuesta para solventar la problemática anterior. Recuerde, aquí somos como los políticos la culpa siempre es del gobierno anterior jajaja. Volvamos al tema que nos atañe, el modelo de 3 capas, pueden ser más capas pero en esencia son 3,  proponía tener una capa de servicios, con su  hardware y software dedicados, que se encargara de atender la capa de Persistencia (bases de datos), la capa de Lógica de Negocio y la capa de Presentación. Las primeras dos estarían en servidores dedicados, mientras que la capa de presentación estaría a cargo de las máquinas clientes, siendo el navegador o browser el aplicativo o medio adoptado de preferencia para estas lides.




En este modelo la persistencia queda a cargo de los servidores (¿mainframes?) de base de datos.

La lógica de negocio, servicios y aplicaciones queda a cargo de los servidores de aplicaciones.

Mientras que la presentación, y su correspondiente lógica y servicios asociados, era manejada en las máquinas clientes a cargo del navegador u otra aplicación conveniente.

Con ello resolvíamos la escalabilidad de cara a las máquinas clientes, la escalabilidad en las máquinas de persistencia y lógica de negocio, resolvíamos además el problema de la “Pesadilla del Mantenimiento”, era suficiente con actualizar las aplicativos en los servidores de aplicaciones para que los clientes al conectarse ya tuviesen disponible la última versión disponible del software demandado; un paraíso pues… pero no tanto. Aún quedaban cosas por resolver.

Sí bien el modelo anterior hace mucho por resolver los asuntos hasta ahora mencionados, hace poco o nada por resolver otro problema de la capa de negocio, el de la redundancia de tareas o repetición de funciones, formalmente conocido como repetición de servicios. Esto se refiere al problema originado por estar los sistemas concebidos como islas funcionales, usualmente reflejando las necesidades de algún ente jerárquico de la organización, departamento, unidad, división, etc. Muchas de estas “islas” tienen que resolver problemas, o usar recursos, comunes a toda la organización y cada una de ellas, las islas, tiene su propia versión o procedimiento de cómo lidiar con el asunto y, por supuesto, cada uno cree que el suyo es el procedimiento único, válido y verdadero.

Imagine a cada isla que tenga que lidiar con la tarea de validar tarjetas de crédito. Cada una escribirá su programa, función o servicio, en su propio lenguaje de programación, con sus propias reglas y lógica de negocio y desplegándolas en sus propias plataformas particulares. Con el pasar del tiempo vamos a terminar con un montón de servicios, en esencia código y recursos, destinados a repetir una misma tarea, lo cual es a todas luces poco eficiente, difícil de gobernar, complicado de mantener e innecesario para la organización.

¿Cómo se soluciona esto? Mediante asesinos conocidos. Mediante estándares.

Es allí cuando surge el estándar propuesto como Arquitectura Orientada a Servicios, SOA de sus siglas en ingles.

Este propone una manera común, estándar, para comunicarnos con funciones o servicios. Establece de forma clara como se deben pasar los mensajes y parámetros, como se retornan los resultados y como se establece la comunicación. No importa si la implementación final de un servicio está realizada en C# o Java, mientras se ajuste al estándar podremos consumir ese servicio con éxito y usarlo en nuestros sistemas, pudiendo además unificar la administración y monitoreo de tales servicios.



Bajo este esquema de solución ya no existirán N versiones del servicio requerido para validar tarjetas de crédito, sino que por el contrario, se habrá establecido un servicio único que puede ser consumido o usado desde los diferentes sistemas de la organización. En este contexto, es válido pensar en servicios que se pueden exponer a entidades fueras de la organización, lo que abre un mundo de posibilidades en las relaciones inter-organizativas (b2b) y crea nuevas preocupaciones respecto a la seguridad, entre otros asuntos.

Si miráis con atención mis queridos lectores, estas propuestas de arquitectura, y su consecuente evolución, buscan resolver un problema subyacente, común a todas, el cual consiste en ¿Cómo hacemos que las máquinas se comuniquen eficientemente entre sí?

Puede parecer que no es ese el meollo del asunto, pero a la larga, entre todas las capas y estándares que establecemos, lo que se persigue es eso, Comunicar Máquinas con eficiencia (o partes de ellas).


Pero este es tema ya para otra publicación.

Comentarios

Entradas populares de este blog

El Melange todavía corre

Ese era el estribillo de un capítulo de unas de mis series favoritas de la infancia, Meteoro o Speed Racer. En ese capítulo un auto “fantasma” el X-3, aparecía de imprevisto y dejaba a todos asombrados con su rendimiento y prestaciones y volvía a desaparecer. Traigo ese episodio a colación puesto que recientemente sostuve una amena charla con un querido amigo, en la que el me manifestaba como los Mainframes habían muerto, o mejor dicho, el concepto de la computación distribuida basada en Mainframes había desaparecido. Para variar, yo no estuve de acuerdo, y le dije que por el contrario, el modelo de computación basado en Mainframes está mas vigente que nunca. Estos fueron mis argumentos:

Primeros pasos con Camunda BPM – Modelando un Proceso BPMN 2.0

Tenemos entre manos la tercera publicación de nuestra serie sobre la Plataforma de BPM de Camunda .  El día de hoy vamos, por fin, a empezar a modelar o construir nuestro primer proceso sencillo en notación BPMN 2.0. Para ello vamos a usar el modelador o editor que ya hemos instalado en nuestra primera publicación , y vamos a guardarlo en la sección de recursos del proyecto Maven Java que configuramos en la segunda publicación . Así que, como ya es costumbre, manos a las sobras…

Como configurar jBPM para usar nuestra propia Base de Datos en un sólo paso

Llevo un buen rato trabajando con jBPM en su serie 6.x, y mi opinión sobre este producto en la versión mecionada no ha mejorado para nada. Es una herramienta plena de funciones y caracteristicas avanzadas, pero tambien está llena de Bugs y es realmente inestable, sobre todo en el ambiente de modelamiento.  Así mismo, debo decir que tiene una muy aceptable API REST y que el motor de procesos y la consecuente ejecución de los procesos es estable y bastante rápida. En esta publicación daré inicio a una serie de artículos que hablan sobre ciertas configuraciones comunes e importantes que se hacen con jBPM. Hoy iniciamos con la configuración de jBPM para que use nuestra base de datos favorita. Esto tiene sentido porque el producto viene con la base de datos H2 por omisión, la cual es excelente para pruebas y evaluaciones rápidas de la herramienta, pero es completamente inaceptable en un ambiente de desarrollo, QA o producción cualquiera. Así que manos a l