Arquitectura monolítica vs microservicios

Actualmente es bastante habitual leer o escuchar sobre “microservicios”. En este post se explicará qué es la “arquitectura de microservicios”, que es la “arquitectura monolítica” y que ventajas tiene el uso de microservicios.

¿Qué es la arquitectura monolítica?

Esta arquitectura es la que se ha seguido tradicionalmente y consiste en una gran aplicación que lleva la gestión de todos los procesos que necesita dicha aplicación para que pueda funcionar. En otras palabras, todos los procesos de la aplicación quedan acoplados y sujetos a un mismo programa único.

El problema de esta arquitectura es que cuando un solo proceso falla, es capaz de hacer que toda la aplicación falle.

Otro problema que tiene esta arquitectura es el mantenimiento de la aplicación, ya que es un sistema no escalable. Por ejemplo, si queremos actualizar un proceso en concreto, tendremos que actualizar los demás procesos que se comunican con éste de forma estrecha.

Otro problema típico surge a la hora de mejorar nuestro sistema, y es que, escalar de forma vertical (mejorando los componentes de la máquina que aloja nuestra aplicación), tiene un límite de mejora, mientras que la arquitectura en microservicios nos permite escalar horizontalmente (obteniendo más equipos) como veremos a continuación.

¿Qué es la arquitectura de microservicios?

Esta arquitectura es el presente y sigue un enfoque más modular e independiente. Consiste en el desarrollo de pequeños servicios que se ejecutan de forma autónoma e independiente y que son capaces de mantener una comunicación con el resto de servicios.

¿Qué ventajas y desventajas tiene la arquitectura de microservicios?

Esta arquitectura tiene una serie de ventajas:

  • Es modular: gracias a esta división del sistema en procesos independientes, cada funcionalidad de nuestra aplicación puede ser abordada de forma independiente sin afectar al resto de servicios.
  • Es escalable: dado el bajo acoplamiento de los diferentes procesos, cada uno de estos procesos se puede ejecutar en una máquina o clúster de máquinas diferente, por lo que el límite está en el número de máquinas que poseemos. Además, los datos pueden almacenarse en una única base de datos compartida o que cada microservicios tenga su propia base de datos, gestionando sus propios datos, por lo que podemos tener también las bases de datos en máquinas independientes, permitiendo guardar más datos y ejecutando políticas de almacenamiento de datos que nos permitan recuperar los datos en caso fallo (RAIDs).
  • Es fácilmente mantenible: cómo cada servicio es independiente, este puede ser actualizado y mantenido de forma independiente.
  • Es seguro: un error del sistema o un acceso malintencionado a un servicio es totalmente transparente por el resto del sistema.
  • Es versátil: ya que cada microservicio se puede desarrollar en un lenguaje distinto, extrayendo así lo mejor de cada lenguaje de programación.

Por supuesto, también acarrea con una serie de desventajas:

  • Necesita más recursos: cada servicio posee sus propios recursos y bases de datos, lo que ocupa más recursos en memoria y en ejecución (CPU).
  • Es necesario un desarrollador más capacitado: para extraer lo mejor de cada lenguaje de programación. Además, necesita tener conocimientos sobre comunicación en red para el correcto desarrollo de una arquitectura en microservicios.
  • Requiere más tiempo en el diseño: ya que se necesita, además de diseñar cada proceso con su comunicación, realizar una arquitectura de red habilitada para escalar en un futuro si fuese necesario.
  • Tiene una gestión más compleja: en escenarios donde coexisten multitud de microservicios, es necesario el uso de herramientas especializadas para la gestión de los distintos microservicios para realizar operaciones como levantar X servicios, pausar Y servicios o para Z servicios.

Creado por Francisco Javier Peña Vela el día 2022-02-21.