Todavía recuerdo cuando aterricé en mi primer departamento informático. Era de una conocida empresa cerámica. Acababan de implantar BAAN, si es que alguna vez aquellos gigantescos ERPs acababan de implantarse. Da fe de esto que el consultor jefe se quedó en plantilla de la empresa, para ir ajustando el sistema decían. Casi 20 años después nada es igual.
Aquellas grandes aplicaciones eran monolíticas, estaban diseñadas para una escalabilidad predecible, contaban con una potente base de datos relacional, con procesamiento sincronizado y en racks locales. Se actualizaban ocasionalmente, podía estar toda una noche en ello porque cada vez que lo hacían había un gran volumen de mejoras, y la administración era prácticamente manual.
La aparición de la nube lo ha cambiado todo. Las aplicaciones se descomponen en servicios menores y descentralizados. Estos servicios se comunican a través de API o mediante el uso de eventos o de mensajería asincrónica. Las aplicaciones se escalan elásticamente, horizontalmente, agregando nuevas instancias, tal y como exigen las necesidades. Se combinan tecnologías distintas de almacenamiento y el procesamiento es asíncrono. Las actualizaciones son frecuentes y la administración automatizada.
Y eso lleva implícitas la toma de muchas decisiones. Las tres decisiones básicas tienen que ver con:
Contar con un socio estratégico con la experiencia de Cuatroochenta, que nos oriente en este campo, es un valor añadido tanto para la gerencia como para los departamentos TI, pues determinará muchos aspectos del diseño de posteriores aplicaciones.
Otra de las decisiones que hay que tomar cuando damos el salto a la nube es el estilo de arquitectura con el que vamos a implementar nuestra aplicación. Y si hay un estilo que se ha popularizado es el de microservicios. En esta arquitectura una aplicación se compone de muchos servicios pequeños e independientes, distribuidos, cada uno de los cuales da solución a una funcionalidad concreta. Y todas estas funcionalidades independientes se integran de forma flexible mediante una API.
Sin embargo, hay ciertos retos a abordar pues si bien es cierto que cada servicio es mucho más sencillo y flexible en cuanto a desarrollo, hay que integrarlos todos ellos de forma armoniosa, teniendo en cuenta que esta arquitectura permite equipos diferentes trabajando con lenguajes diferentes, distintas bases de datos para cada servicio y filosofías diferentes. Por eso es conveniente definir unos estándares para todo el proyecto sin lastrar la flexibilidad que proporciona esta arquitectura.
Sin duda, tener una cultura de DevOps consolidada ayudará a que el usuario final tenga delante de sí una aplicación eficaz en su funcionamiento. Un mal desarrollo puede generar problemas en la integridad de los datos (que pueden ser independientes en cada servicio), o una latencia demasiado alta debido a una excesiva cadena de dependencia del servicio (un servicio va llamando a otro y así sucesivamente, de forma que puede producirse cierta congestión si su diseño no es óptimo). Hay que tener en cuenta también, en cuanto a la dependencia de servicios, que la actualización de uno de ellos no debe influir en la funcionalidad del resto por lo que el control de versiones es un aspecto muy importante.
La agilidad que permite esta arquitectura hace que la administración de los servicios sea uno de los puntos fuertes, desde actualizar un servicio hasta añadir nuevas características, con lo que la escalabilidad es otro de sus puntos fuertes. En Cuatroochenta usamos Kubernetes como orquestador para empaquetar una mayor densidad de servicios por host, aumentando así la eficacia en el uso de recursos.
Con esta filosofía en Cuatroochenta hemos elaborado aplicaciones como la Calculadora Butech, para la filial del Grupo Porcelanosa del mismo nombre, una app que permite determinar la cantidad de materiales cerámicos necesarios para el desarrollo de proyectos de arquitectura. Y también hemos participado en el desarrollo de la transformación digital de una conocida constructora de obra civil, para la que hemos desarrollado una aplicación web mediante la que gestionar eficazmente toda la documentación referente a las subcontratas con las que trabaja.
Para nosotros lo más importante es que cada parte de la empresa haga su trabajo como si fuera un microservicio al servicio de un todo: