Como desarrolladores de software, cada vez que nos enfrentamos al diseño de una nueva aplicación debemos hacer una elección importante: qué arquitectura debemos aplicar.

La arquitectura de software comprende las técnicas y patrones utilizados para estructurar y optimizar el desarrollo de un proyecto de aplicación. Es el punto de partida para diseñar y desarrollar una aplicación, la base para poder incorporar los diferentes componentes y funcionalidades que se necesitan, que permitirán resolver los problemas específicos que se quieren solucionar.

Su importancia es evidente, por eso en este post te explicaremos todo lo que necesitas saber sobre dos de las grandes aproximaciones de arquitectura de software que existen: la monolítica y la de microservicios.

Arquitectura monolítica vs microservicios

Arquitectura monolítica

Este tipo de arquitecturas tienen la principal característica de agrupar toda la funcionalidad y servicios de la aplicación en una base de código única. Estos son sus principales beneficios:

    • Son fáciles de desarrollar.
    • Su despliegue y ejecución son sencillos.
    • El coste de desarrollo es menor que el de otras aplicaciones.

Sin embargo, también presenta otras desventajas que la vuelven un opción cada vez menos utilizada.

Al tratarse de un único código, si se quiere realizar un solo cambio en éste, implica volver a lanzar la aplicación al completo. Esta misma particularidad supone un problema para los desarrolladores, que deben conocer el código en su totalidad y solucionar problemas concretos les resulta más complicado, pues un cambio donde no corresponde puede comprometer toda la aplicación. Además, resulta imposible trabajar en varios ambientes al mismo tiempo. 

Arquitectura de microservicios

Esta busca desacoplar e independizar los componentes de una aplicación, de manera que cada uno se convierte en una aplicación en sí mismo (también llamados “microservicios”). En esta autonomía reside gran parte de sus ventajas:

    • Modularidad: se pueden realizar despliegues y desarrollos de manera independiente, sin que afecte a los otros servicios de la aplicación. Esta característica facilita la escalabilidad de la aplicación, por módulos y de manera horizontal. 
    • Seguridad: si se produce un problema en un microservicio, solo afectará a éste. Además de que resulta mucho más fácil detectar el problema y que el equipo encargado lo solucione, sin afectar al resto de servicios ni equipos.
    • Versatilidad: permiten el uso de diferentes tecnologías, lenguajes de programación y bases de datos, adaptando cada microservicio a la tecnología que sea más adecuada.
    • Mejora continua: al poder desarrollar múltiples microservicios de manera simultánea, varios desarrolladores pueden trabajar en sus servicios individuales, lo que reduce el tiempo de desarrollo y permite lanzar nuevas funcionalidades para el cliente con mayor frecuencia (Time-to-market). 
    • Facilita los procesos de pruebas y tests, además de reducir errores de programación.

La comunicación entre los distintos componentes de la aplicación se realiza a través de API, eliminando la necesidad de que los desarrolladores deban conocer y comprender todo el código. Se gana en eficiencia, flexibilidad y capacidad de crecimiento pero, como puedes intuir, esta gran cantidad de módulos vuelve compleja la implementación. Ante el reto de aligerar y facilitar la portabilidad de los componentes para que puedan transferirse entre diferentes entornos en el menor tiempo posible surge el uso de contenedores como Docker o, cuando se deben gestionar un número elevado de contenedores, se opta por orquestados como Kubernetes. 

Adoptar un enfoque DevOps y aplicar metodologías agile garantizará el éxito de una arquitectura de microservicios, pues te permitirá diseñar servicios autónomos, con menor acoplamiento y mayor cohesión con el resto de servicios.

Entonces, ¿cuál debería utilizar?

Como casi todo, dependerá de tus necesidades y objetivos.  Ahora que ya conoces las diferencias entre ambas, haz un análisis de tu proyecto y toma la decisión. Considera la frecuencia con la que necesitarás lanzar nuevas funcionalidades para tus clientes, las previsiones de volumen de tráfico o usuarios (con los respectivos picos de demanda), el equipo de desarrolladores del que dispones, entre otros factores.

Muchos desarrolladores optan por las arquitecturas monolíticas por su sencillez y bajo coste, pero debes tener en cuenta que si el software necesita evolucionar y desarrollarse de manera rápida, este tipo de arquitectura será insuficiente y aparecerán importantes problemas de escalabilidad, implementación, mantenimiento y actualización. Simplemente, no será suficiente para responder las crecientes demandas de la aplicación.

Si te ha parecido interesante esta entrada, en la siguiente hablaremos de cómo podemos garantizar la seguridad en entornos basados en microservicios. ¡Estáte muy atento/a a nuestro blog o te la perderás!