Microservicios

Microservicios vs Arquitectura Monolítica
La evolución de las tecnologías ha cambiado la forma en que construimos la arquitectura de las aplicaciones. Los servicios Cloud, Virtual Machines y Container nos han brindado la capacidad de desarrollar soluciones distribuidas, más escalables y confiables. Vamos a comparar microservicios y arquitectura monolítica y exploraremos sus ventajas y desventajas. En la siguiente ilustración se puede observar la diferencia entre ambas arquitecturas:
Fuente: dev.to

Los microservicios suelen ocupar unas 10 veces más espacio y casi siempre requieren más recursos.

Pros y Contras

Despliegue

Las aplicaciones monolíticas permiten configurar su implementación una vez y luego simplemente ajustarla en función de los cambios en curso. Sin embargo, en el caso de que hay un problema durante la implementación, podría interrumpir todo su proyecto.

Los microservicios requieren mucho más trabajo; necesitará implementar cada microservicio de forma independiente, preocuparse por las herramientas de orquestación e intentar unificar el formato de sus tuberías ci / cd para reducir la cantidad de tiempo requerido para hacerlo en cada nuevo microservicio. Sin embargo, hay un lado positivo; Si algo sale mal, solo romperá un pequeño microservicio, que es menos problemático que todo el proyecto. También es mucho más fácil deshacer un pequeño microservicio que una aplicación monolítica completa.

Mantenimiento

Si planea utilizar una arquitectura de microservicios, obtenga un DevOps para su equipo y prepárese. No todos los desarrolladores estarán familiarizados con Docker u herramientas de orquestación, como Kubernetes, Docker Swarm, Mesosphere o cualquier herramienta similar que pueda ayudarlo a administrar la infraestructura con muchas partes móviles. Alguien tiene que monitorear y mantener el estado de funcionamiento de su configuración de CI para cada microservicio y toda la infraestructura.

Fiabilidad

La arquitectura de microservicios es el ganador obvio aquí. Romper un microservicio afecta solo una parte y causa problemas a los clientes que lo usan, pero a nadie más. Si, por ejemplo, está creando una aplicación bancaria y el microservicio responsable del retiro de dinero está caído, esto es definitivamente menos grave que toda la aplicación que se ve obligada a detenerse.

Escalabilidad

Para la escalabilidad, los microservicios son nuevamente más adecuados. Las aplicaciones monolíticas son difíciles de escalar porque, incluso si ejecuta más trabajadores, cada trabajador estará en el proyecto único y completo, una forma ineficiente de usar los recursos. Peor aún, puede escribir su código de la manera que haría imposible escalarlo horizontalmente, dejando solo la escala vertical posible para su aplicación de monolito. Con microservicios, esto es mucho más fácil. Los recursos se pueden usar con más cuidado y le permiten escalar solo aquellas partes que requieren más recursos.

Costo

El costo es difícil de calcular porque la arquitectura monolítica es más barata en algunos escenarios, pero no en otros. Por ejemplo, con la mejor escalabilidad de los microservicios, puede configurar una escala automática y solo pagar por eso cuando el volumen de usuarios realmente requiere más recursos. Al mismo tiempo, para mantener esa infraestructura en funcionamiento, necesita un devops que deba pagarse. Con una pequeña aplicación de monolito, puede ejecutar en un host de $ 5- $ 20 y activar la instantánea. Con una aplicación de monolito más grande, puede alojar una instancia muy costosa porque no puede compartirla en varios hosts pequeños y baratos.

Desarrollo

En uno de nuestros proyectos, tenemos 16 microservicios y podría decirle por experiencia que esto puede ser difícil de manejar. La mejor manera de lidiar con los microservicios es construir su archivo docker-compose desde el principio y desarrollarlo a través de Docker. Esto le ayuda a reducir el tiempo dedicado a incorporar nuevas personas; simplemente ejecute el sistema desde cero e inicie todos los microservicios según sea necesario. Abrir más de 10 ventanas de terminal y ejecutar comandos para iniciar cada servicio individual es una molestia.

Por otra parte. cuando desarrolle un microservicio, es posible que tenga un caso en el que no necesite ejecutar otras partes de la aplicación. Esto resulta en menos problemas con los conflictos de git debido al mejor proceso de desglose de tareas y la capacidad de aislar a los desarrolladores a través de microservicios.

Hacer la revisión de código y el control de calidad es más simple con microservicios; Incluso puede escribir microservicios en diferentes idiomas.

Versionado

Los microservicios que son más pequeños y con una arquitectura adecuada de comunicación de microservicios le permiten lanzar nuevas funciones más rápido al reducir el tiempo de control de calidad, el tiempo de construcción y el tiempo de ejecución de las pruebas. Las aplicaciones monolíticas tienen muchas dependencias internas que no se pueden dividir. También existe un mayor riesgo de que algo con lo que esté comprometido pueda depender de cambios no terminados de los miembros de su equipo, lo que podría posponer los lanzamientos.

¿Cual es la mejor arquitectura mejor según el proyecto?

Utilice la arquitectura monolítica si usted:

  • Tiene un pequeño equipo
  •  Quiere construir la versión MVP de un nuevo producto.
  • No tiene suficiente efectivo para invertir en contratar DevOps o dedicar más tiempo a la arquitectura compleja.
  • No tiene cuellos de botella en el rendimiento de algunas funciones clave.

Tenga en cuenta que si descubre que hay necesidad de microservicios en su proyecto, la arquitectura monolítica siempre conlleva el riesgo de avería como resultado de estos pequeños microservicios.

Utilice la arquitectura de microservicios si usted:

  • No tiene una fecha límite ajustada.
    Los microservicios requieren que investigue y planifique la arquitectura para garantizar que funcione.
  • Tiene un equipo con conocimiento de diferentes lenguajes de programación.
  • Se preocupa mucho por la escalabilidad y confiabilidad de su producto.
  • Dispone de diferentes departamentos de desarrollo
  • Tiene una aplicación de monolito existente y ver problemas con partes de su aplicación que podrían dividirse en múltiples microservicios.

ajimenez1965@gmail.com