Tradicionalmente el diseño de software se ha realizado con arquitectura monolítica, en la que el software se estructura de forma que todos los aspectos funcionales quedan acoplados y sujetos en un mismo programa. En este tipo de sistema, toda la información está alojada en un servidor, por lo que no hay separación entre módulos y las diferentes partes de un programa están muy acopladas. Esto genera un problema a largo plazo, ya que se trata de un sistema no escalable de manera sencilla. Por eso aparece la arquitectura de microservicios.
Detectada la necesidad por parte de las empresas de realizar cambios en el software e implementarlos de forma fácil y rápida, nacen los microservicios. La idea era dividir los sistemas en partes individuales, permitiendo que se puedan tratar y abordar los problemas de manera independiente sin afectar al resto.
Así, mientras que en una arquitectura monolítica el software se desarrolla como una única unidad, una arquitectura de microservicios funciona con un conjunto de pequeños servicios que se ejecutan de manera autónoma e independiente.
Actualmente muchos desarrolladores están dejando de utilizar arquitecturas monolíticas para pasarse a los microservicios, y muchas empresas líderes ya se han dado cuenta de que la arquitectura de microservicios es la mejor opción para sus organizaciones.
Ahora que sabemos por qué aparecen los microservicios, y cuál es la situación actual de su uso y aplicación, veamos una definición más completa y sencilla de una arquitectura de este tipo.
¿Qué es una arquitectura de microservicios?
La arquitectura de microservicios es un método de desarrollo de aplicaciones software que funciona como un conjunto de pequeños servicios que se ejecutan de manera independiente y autónoma, proporcionando una funcionalidad de negocio completa. En ella, cada microservicio es un código que puede estar en un lenguaje de programación diferente, y que desempeña una función específica. Los microservicios se comunican entre sí a través de APIs, y cuentan con sistemas de almacenamiento propios, lo que evita la sobrecarga y caída de la aplicación.
Los microservicios han creado infraestructuras IT más adaptables y flexibles. Porque si se quiere modificar solamente un servicio, no es necesario alterar el resto de la infraestructura. Cada uno de los servicios se puede desplegar y modificar sin que ello afecte a otros servicios o aspectos funcionales de la aplicación.
Veamos qué ventajas y desventajas tiene la aplicación de una arquitectura de microservicios frente a otros tipos de arquitectura. Hay que tener en cuenta estos puntos a la hora de identificar qué tipo de arquitectura software será la mejor para un determinado proyecto u organización.
Ventajas
- Modularidad: al tratarse de servicios autónomos, se pueden desarrollar y desplegar de forma independiente. Además un error en un servicio no debería afectar la capacidad de otros servicios para seguir trabajando según lo previsto.
- Escalabilidad: como es una aplicación modular, se puede escalar horizontalmente cada parte según sea necesario, aumentando el escalado de los módulos que tengan un procesamiento más intensivo.
- Versatilidad: se pueden usar diferentes tecnologías y lenguajes de programación. Lo que permite adaptar cada funcionalidad a la tecnología más adecuada y rentable.
- Rapidez de actuación: el reducido tamaño de los microservicios permite un desarrollo menos costoso, así como el uso de “contenedores de software” permite que el despliegue de la aplicación se pueda llevar a cabo rápidamente.
- Mantenimiento simple y barato: al poder hacerse mejoras de un solo módulo y no tener que intervenir en toda la estructura, el mantenimiento es más sencillo y barato que en otras arquitecturas.
- Agilidad: se pueden utilizar funcionalidades típicas (autenticación, trazabilidad, etc.) que ya han sido desarrolladas por terceros, no hace falta que el desarrollador las cree de nuevo.
Desventajas
- Alto consumo de memoria: al tener cada microservicio sus propios recursos y bases de datos, consumen más memoria y CPU.
- Inversión de tiempo inicial: al crear la arquitectura, se necesita más tiempo para poder fragmentar los distintos microservicios e implementar la comunicación entre ellos.
- Complejidad en la gestión: si contamos con un gran número de microservicios, será más complicado controlar la gestión e integración de los mismos. Es necesario disponer de una centralización de trazas y herramientas avanzadas de procesamiento de información que permitan tener una visión general de todos los microservicios y orquesten el sistema.
- Perfil de desarrollador: los microservicios requieren desarrolladores experimentados con un nivel muy alto de experiencia y un control exhaustivo de las versiones. Además de conocimiento sobre solución de problemas como latencia en la red o balanceo de cargas.
- No uniformidad: aunque disponer de un equipo tecnológico diferente para cada uno de los servicios tiene sus ventajas, si no se gestiona correctamente, conducirá a un diseño y arquitectura de aplicación poco uniforme.
- Dificultad en la realización de pruebas: debido a que los componentes de la aplicación están distribuidos, las pruebas y test globales son más complicados de realizar.
- Coste de implantación alto: una arquitectura de microservicios puede suponer un alto coste de implantación debido a costes de infraestructura y pruebas distribuidas.
Actualmente gracias a los contenedores como Docker y orquestadores como Kubernetes, se han podido cambiar los servidores web tradicionales por contenedores virtuales mucho más pequeños y adaptables.
Teniendo en cuenta las ventajas e inconvenientes de la implantación de una arquitectura de microservicios, lo más importante antes de decidir qué arquitectura elegir, será determinar qué solución es la que mejor se adapta a las necesidades del proyecto o la organización y qué ayudará a conseguir los objetivos propuestos.
Está claro que para empresas líderes como Google, Amazon, Netflix o Uber, con sistemas grandes y con mucha carga computacional, los microservicios son la mejor opción. Pero antes de tomar la decisión de implantar una arquitectura de microservicios, se deben tener en cuenta varias cuestiones. Como por ejemplo: el número de usuarios finales, el volumen de peticiones, los picos de demanda, el tamaño de la empresa y el equipo del que se dispone, si en la actualidad se cuenta con una arquitectura monolítica, si hay alguien en el equipo con la experiencia necesaria o se deben contratar servicios, etc.
Una arquitectura de microservicios tendrá más sentido cuanto más diversa y grande sea la audiencia, y cuanto mayor sea el tamaño de la organización, el equipo y los servicios ofrecidos.
Si quieres aprender más sobre arquitectura software o quieres saber cómo podemos ayudarte en decide, contacta con nosotros y estaremos encantados de ayudarte.