Como apasionados de la tecnología tenemos algo en común y es que siempre buscamos hacer las cosas mejor.

A medida que pasa el tiempo la búsqueda de mejorar nos lleva enfrentarnos a tomar decisiones bastante difíciles, como tener que migrar o no de un sistema monolítico a uno basado en microservicios.

La decisión de mejorar nos lleva a buscar oportunidades de escalar nuestro software, pero ello también conlleva hacer muchos sacrificios técnicos y de negocio.

En este artículo exploramos dos grandes aproximaciones de arquitectura de software: los sistemas monolíticos y los microservicios distribuidos.

Antes que nada debemos entender la diferencia entre estos dos modelos de arquitectura de software.

Sistemas monolíticos

Los sistemas monolíticos o aplicaciones monolíticas son aquellos sistemas que agrupan sus funcionalidades y servicios en una base única de código. Esto implica que todo lo relacionado al sistema se encuentra dentro de un mismo proyecto (webservices, MCV, seguridad, todos los módulos del sistema, etc.)

 Las primeras aplicaciones de software usaban este tipo de diseño y aunque se han desarrollado alternativas mucho más sofisticadas siguen presentando ventajas y usos importantes como ser:

  • Fáciles de desarrollar
  • Fáciles de desplegar
  • Fácil ejecución (por su sencillez)

Debido a las anteriores características en su estructura, el desarrollo de aplicaciones monolíticas en general suele ser mucho menos costoso que sus alternativas.

Sinembargo, una aplicación que concentra toda su funcionalidad no es necesariamente mejor, en especial si tiende a crecer en complejidad, usuarios, desarrolladores y carga.

Pero vamos a hablar de un problema más serio, la escalabilidad. Todos los sistemas tienden a crecer con el paso del tiempo y realizar esta actualización en un sistema monolítico tiene sus dificultades – al tratarse de un código único – todo nuevo despliegue requiere relanzar la aplicación en su conjunto.

Esto, a su vez, puede resultar abrumador para los desarrolladores que necesitan entender el código en su totalidad para poder trabajar en él, pues cualquier paso en falso puede comprometer el código en su conjunto.

Las decisiones de negocio entre la parte que desarrolla un sistema y las relaciones con los proveedores suelen venderse como una sola unidad y esto muchas veces ata al equipo de trabajo a este tipo de arquitectura.

Pero no todo es malo dentro de las aplicaciones monolíticas, como ya habíamos mencionado anteriormente tiene una sencillez en su implementación, por lo que si tienes el requerimiento de un sistema con poco modulos y que el tiempo de trabajo no es muy largo, esta alternativa seria la ideal.

Microservicios

Los microservicios es una arquitectura orientada a construir una aplicación de manera distribuida. La misma busca independizar los componentes de una aplicación para que cada componente sea una aplicación en sí misma.

Los microservicios se conectan entre sí a través de API’s, permitiendo que diferentes equipos trabajen al mismo tiempo en diferentes partes de una aplicación.

Existen muchas características y ventajas de desarrollar una aplicación bajo esta arquitectura:

  • Los distintos componentes del software pueden ser desarrollados y desplegados de forma independiente
  • Los componentes individuales pueden estar en distintos lenguajes de programación, haciendo posible contar con programadores de distintas especialidades trabajando en el mismo producto.
  • Al tener independencia cada módulo podría tener una base de datos diferente, lo que ayuda a su mantenimiento.
  • Si se quiere hacer una actualización o un cambio, es mas sencillo y se tiene que parar todo el proyecto, solamente el modulo que se quiere trabajar.
  • Al estar distribuidos puede que un modulo tenga mayor demanda y este este instalado en un servidor diferente, pudiendo incrementarse las capacidades de computo solamente de ese servidor del modulo.  

Si bien los microservicios añaden complejidad a una arquitectura de software, las ventajas del uso de esta arquitectura son innumerables, y por lo mismo promueve el crecimiento de un software.

El reto de trabajar con Microservicios

Aunquelos microservicios se distinguen por su eficiencia, flexibilidad, agilidad y potencial de crecimiento, implican retos importantes para su implementación.

Altener mayor número de componentes, su operación es más compleja, por lo que crear y desarrollar la infraestructura requiere más tiempo y más recursos. Esta es una razón para que una cultura DevOps (desarrollo y operaciones) le ofrezca agilidad al proceso de desarrollo.

Existen diferentes retos en el desarrollo de microservicios que deben ser tomados en cuenta:

  • Habilidades de aprovisionamiento rápido de recursos, ya sea en cloud o on-premise, se recomienda el uso contenedores como Docker e integración continua.
  • Esquemas de monitoreo para servicios distribuidos, incluyendo métricas de aplicación, redes, logs así como maneras de enlazar una operación o transacción de un cliente con los diferentes microservicios que utiliza.
  • Prácticasde desarrollo ágil y equipos de desarrollo con enfoque de producto.

¿Cuándo debemos considerar implementar microservicios?

 Si bien la mayor parte de las aplicaciones actualmente son monolíticas, estos a la larga decaerán en problemas de escalabilidad por su crecimiento.

Por tanto a medida que el crecimiento sea mayor en una aplicación mayor será la necesidad de adoptar una arquitectura más flexible, que permita y promueva el crecimiento de su empresa.

Esta arquitectura nació de la necesidad de escalamiento de software de los desarrolladores, y esto sucede tarde o temprano con cualquier software exitoso.

A medida que el software crece se torna más complejo y en cierto punto, la arquitectura monolítica es simplemente insuficiente para las crecientes demandas de la aplicación.

¿Cómo migrar a microservicios?

En el entorno actual, con una competencia en línea cada vez más feroz, la necesidad de adaptación constante se vuelve ineludible para las empresas en crecimiento.

Inicialmente buscar partes de la lógica de negocio que sea posible separar. Adicionalmente, identificar partes del código que consuman muchos recursos, y demás consideraciones necesarias se deben estudiar antes de su implementación.

Algunos ejemplos pueden ser áreas comunes como la gestión de archivos de medios o externos, la autenticación con sistemas externos, los sistemas de notificaciones, funciones específicas de negocio en una aplicación tradicional (ej. Costos de envío, descuentos, inventarios, entre otros).

Conclusión

Si su empresa ha llegado a ese punto, tal vez sea momento de considerar migrar a microservicios.

Dejar respuesta

Please enter your comment!
Please enter your name here