Esta es una preguna básica que muchos desarrolladores se están haciendo, y si eres de los que aún no logra entender este tema, pues entonces este post es para ti, con estos conceptos básicos pero muy importantes tendrás unos excelentes fundamentos, como debe de ser 😉.
Sin embargo, para comprender la arquitectura basada en microservicios hay que saber antes de qué tratan esto de las arquitecturas en Software, en esta entrada puedes encontrar su concepto y aquí algunos ejemplos de arquitecturas.
Arquitectura monolítica
Comencemos entendiendo primero la sencilla arquitectura monolítica, esta es la arquitectura que probablemente hayamos usado cuando iniciamos a programar, es la más fácil de implementar y la que se usa "por default".
Esta arquitectura básicamente es aquella donde toda la responsabilidad se centraliza en un sólo proyecto y esto incluye a la base de datos.
Ventajas | Desventajas |
---|---|
Fácil de mantener | Difícil de escalar |
Es fácil de hacer tests | Tiene poca tolerancia a fallos al estar todo el proyecto junto |
Ideal para grupos reducidos de desarrolladores | Es poco práctica de codificar cuando hay muchos desarrolladores |
Rápida implementación | Complejidad de código crece rápidamente, más fácil de aplicarle malas prácticas y "código spaguetti" |
Vamos a poner un ejemplo, imagina el siguiente proyecto: Mi tienda online Brave Store, si utilizara la arquitectura monolítica entonces tendría el siguiente diagrama:
Como puedes apreciar, los usuarios o clientes se conectan a mi aplicación web la cual a su vez se conecta a un único API RESTful que contiene una base de datos.
Cabe mencionar también que hay niveles de arquitecturas monolíticas, por ejemplo hay casos donde el frontend y backend están mezclados en un único proyecto, lo cual refuerza más aún las desventajas de esta arquitectura.
Microservicios
Esta arquitectura por su parte convierte tu proyecto en pequeños componentes a modo de piezas de lego y le asignas a cada pieza de autonomía, responsabilidad e independencia.
Para hablar en un lenguaje más técnico, cada una de esas "piezas" vienen a llamarse servicio o microservicio, todos en conjunto hacen tu proyecto, como verás esto significa un salto evolutivo respecto a la arquitectura monolítica donde estaba todo junto.
Ventajas | Desventajas |
---|---|
Permite escalar tanto vertical como horizontalmente | Mayor complejidad de código |
Permite trabajar con múltiples tecnologías | Mayor complejidad en la estructura del proyecto y la documentación |
Promueve el trabajo en equipo, ideal para equipos numerosos o especializados | Curva de aprendizaje más elevada para el equipo de desarrollo |
Despliegue optimizado | Debugging y logging más complejo y elaborado |
Testing es más fácil | Requiere de mayor atención y cuidado en las prácticas de código, las buenas prácticas y patrones no son opcionales sino obligatorias. |
Alta tolerancia a fallos ya que si falla un servicio, los demás al ser independientes seguirán funcionando | Mayor número de herramientas de software a utilizar como bibliotecas y software de terceros. |
El proyecto de ejemplo utilizando esta arquitectura tendría un diagrama así:
En buen cristiano como se dice, la mayoría de los microservicios que formen parte de tu proyecto serán APIs RESTful, adicionalmente tendrás un proyecto web en cualquier framework, un proyecto cuya responsabilidad será la de gateway y dependiendo de la complejidad que decidan darle algunos otros proyectos más. Cada uno de los API RESTful con una tecnología distinta y su base de datos si así lo desea el equipo de ingeniería.
Pues bien estimado lector y developer, eso es todo por ahora, en la siguiente entrada profundizaremos más en estos temas tan importantes y tan solicitados por la industria actual. Hasta la vista crack 😉
Si te ha encantado esta entrada, compártela 😊