Skip to main content

Monolitos vs Microservicios

· 5 min read
Axel Berlot
Java developer @ Opendev Pro

banner

Monolitos vs Microservicios

Monolitos

Un monolito es una gran bloque de código que tiene un propósito de negocio que cumplir, los mismos habitualmente están conformados por una aplicación que algutina toda la lógica del negocio en el mismo lugar, en aquellas apicaciones donde exista una interfaz gráfica esmuy común que la misma esté integrada al monolito sin embargo no es excluyente y puede ocurrir que exista monolito sin ui y que la misma se conecte por REST por ejemplo u otro tipo de api.
Podemos definir a un monolito como un concepto de conjunto o aglutinación de lógica que permite concentrar código en un mismo lugar, naturalmente ante el crecimiento vertical del mismo hace poco escalable su crecimiento a través del tiempo.
Monolito completo
Este es el ejemplo más clásico de lo que representa un monolito, una aplicación con todo el core de negocio e interface si existiera dentro del mismo bloque de código, loque es importante entender es que los monolitos no son todos WEB, por ejemplo es común que las aplicaciones de escritorio por ejemplo con Java Swing o JavaFX sean un gran bloque de código integrado.

Ejemplos como este pueden ser los siguientes:

  • Aplicaciones Java swing
  • Aplicaciones JavaFX
  • Aplicaciones Server side Rendering, JSP, JSF, etc, con algún template engine como Thymeleaf u otro.

monolith1

Monolito por acoplamiento de lógica core
  • Aplicaciones por ejemplo en Java, PHP o algún lenguaje de programación que tenga ligado fuertemente su core de en un bloque de código difícil de desarmar, incluso existiendo una aplicación cliente que consuma datos por medio de alguna API no deja de ser un monolito.

Es importante aclarar que API puede ser más de un tipo no sólo REST, puede ser GRPC, Graphql, SOAP, etc

monolith2

Microservicios

Un microservicio conceptualmente es una aplicación que tiene una función determinada y que sirve datos a traves de alguna API del algún tipo, es un concepto de desarrollo que puede tener variantes dependiendo cómo se lo use, pero lo más importante es que cumpla con el concepto de responsabilidad única más allá del tamaño ya que un microservicio puede ser chico, mediano o grande ya que la palabra micro es sólo un concepto abstracto que atomiza responsabilidades en sistemas distribuidos.
Microservicio
Este ejemplo sólo muestra una aplicación que para poder llamarla microservicio debe cumplir una responsabilidad única, si la misma tiene una función particular puede llamarse microservicio, sino sólo es una aplicación que expone servicios mediante algún tipo API por ejemplo la más común REST.

microservice1

Ecosistema de microservicios
Un ecosistema de microservicios es un conjunto de aplicaciones distribuidas con diferentes responsabilidades que funcionan en forma autónoma y que su forma de comunicación es mediante algún tipo de API, los ecosistemas de microservicios habitualmente son un proyecto a nivel empresarial para responder ante una demanda de aplicaciones que consumirán diferentes orígenes de información.

microservice2

Monolito de microservicios distribuidos
En sus inicios los microservicios se utilizaron para tener una responsabilidad única y muy importante poder funcionar autónomamente sin tener acoplamiento con otras aplicaciones lo que le daba inependencia de funcionamiento, esto hoy en día está siendo sobreescrito en diferentes ecosistemas que se desarrollan con dependencias entre microservicios acoplando el funcionamiento de uno con la existencia de otro en comunicaciones server to server, aunque este escenario está tomando más auge y adopato su uso en gran cantidad de empresas es el más riesgoso de todos los escenarios nombrados anteriormente, ya que acopla el funcionamiento de aplicaciones con otras, lo cual necesita una orquestación particular entre células que mantengan actualizadas aplicaciones. Un Monolito distribuido es una práctica común hoy en díaen el mundo empresarial, la cual puede de ser mejor monitoreada con aplicaciones como Istio, service Mesh u Observabilidad en trazas, sin embargo si no se toman estas medidas de monitoreo el control del mismo es caótico ya que a diferencia de los monolitos estandar acá son aplicaciones están distribuidas en diferentes orígenes pero son dependientes unas de otras.

microservice3

Microservicios distribuidos en cadena
Existen esquemas más maduros de un monolito distribuido donde en realidad es una cadena de microservicios que ejecutan un resultado final, es en definitiva un monolito con pasos definidos y una distribución de la carga controlada, por ejemplo es conocido el esquema de microservicios en cadena que tiene Netflix, con aplicaciones distribuidas que tienen diversas funcionalidades para obtener un resultado, la comunicación entre las mismas puede ser por HTTP, por TCP u otro tipo, lo importante de definir acá es que éstas arquitecturas demandan un mantenimiento y una gestión diferente ya que la interoperabilidad entre las aplicaciones es el core de su funcionamiento.

microservice3

Bio

· 3 min read
Axel Berlot
Java developer @ Opendev Pro

banner

Sobre mi

Me presento, mi nombre es Axel, cumplo el rol de arquitecto de software en una reconocida Software Factory de Argentina, comencé mis primeros pasos en el mundo del desarrollo allá por el 2014 de software con PHP y HTML,
thumb
sin embargo la curiosidad de saber me empujó a aprender otros lenguajes hasta que conocí Java, sin duda mi lenguaje predilecto. Java me permitió crear aplicaciones desktop con Swing y JavaFX muchos años atrás cuando algunos pocos todavía demandaban este tipo de soluciones, con el tiempo los requerimientos fueron avanzando y el romanticismo por ese tipo de aplicaciones fue desapareciendo hasta caer en la realidad de las aplicaciones web, este fue un camino de ida, que pasó por dos grandes etapas, la primera del mundo monolítico con aplicaciones integradas por completo en un core y la segunda hasta hoy orientadas a microservicios.
Como profesional del código no me cierro a ningún lenguaje pero siento y quiero seguir especializandome en el lenguaje Java, uno de mis objetivos es completar certificaciones directas de Oracle, las cuales cuentan con un nivel de prestigio muy alto ya que tienen una dificultad poco común.
En mi trabajo actual pasé por varios roles, desde desarrollador en su mayoría de lenguaje Java, Angular y un poco de NodeJS, pasé por puestos de líder técnico de una o más células hasta el día de hoy que cumplo el rol de arquitecto de software, realmente me gusta lo que hago y le dedico tiempo y esfuerzo, utilizando mis tiempos libres para seguir capacitándome en nuevas tecnologías para que la aplicación que creemos el día de mañana sea mejor y más performante que la de hoy.

Gracias por leer y bienvendio a mi Blog!


import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

public class Greettings {

public static void main(String[] args) throws Exception {
ScheduledExecutorService sched = Executors.newSingleThreadScheduledExecutor();
sched.scheduleAtFixedRate(() -> System.out.println("Wellcome to my blog"), 2, 2, TimeUnit.SECONDS);
}

}