Pasar al contenido principal

De sistemas monolíticos a microservicios

Imagen Portada De aplicaciones monoliticas a microservicios

Como arquitectos de software tenemos algo en común: siempre buscamos hacer las cosas mejor. Pero hacerlas mejor implica tomar decisiones difíciles, buscar oportunidades y hacer 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.

Sistemas monolíticos

Los sistemas monolíticos (también definidos como aplicaciones monolíticas) agrupan la funcionalidad y sus servicios en una base de código única. Las primeras aplicaciones de software usan este diseño y aunque se han desarrollado alternativas más sofisticadas siguen teniendo ventajas importantes: son fáciles de desarrollar, fáciles de desplegar y – por su misma simplicidad – es sencillo y rápido ejecutarlas. Debido a la simpleza de su estructura, el desarrollo de aplicaciones monolíticas suele ser menos costoso que sus alternativas.

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

Actualizar una aplicación monolítica tiene dificultades, pues – al tratarse de un código único – todo nuevo despliegue requiere relanzar la aplicación en su conjunto. Además, por el tamaño del código único, resulta difícil identificar y solucionar problemas concretos. 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 aplicaciones monolíticas son un reto de crecimiento. Tratándose de un código único, no es posible trabajar en diversos ambientes simultáneamente. El crecimiento del código va aparejado de una sobrecarga de la aplicación informática, lo que en última instancia repercute sobre su agilidad.

En muchos casos la elección de usar una aplicación monolítica no la hace un equipo de desarrollo, sino hace parte de decisiones de negocio y de relaciones con proveedores externos. Si una aplicación de negocio se vende como una sola unidad, estaremos atados a esa arquitectura obligatoriamente.

Recientemente se habla mucho de microservicios como una alternativa efectiva especialmente cuando hay flexibilidad en el modelo de desarrollo y cuando diferentes equipos deben trabajar en conjunto.

Microservicios

Los microservicios son una manera de construir aplicaciones y servicios digitales. Una arquitectura de microservicios busca desacoplar o independizar los componentes individuales 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.

El gran diferenciador de los microservicios es que los distintos componentes del software pueden ser desarrollados y desplegados de forma independiente. Se refuerza el aislamiento del código, pues al tratarse de componentes separados, errores en un componente pueden reducir el impacto la totalidad del código como sucede con las aplicaciones monolíticas.

Los microservicios permiten que componentes individuales estén escritos en distintos lenguajes de programación, haciendo posible contar con programadores de distintas especialidades trabajando en el mismo producto.

Los microservicios pueden verse como una evolución del SOA (Service Oriented Architecture), cuya función es dividir un sistema complejo en una variedad de unidades independientes, cada una orientada a una función particular, con su propia lógica de negocio e independencia a nivel de desarrollo. Si bien SOA proponía desarrollar y pensar en servicios independientes para el negocio, en la mayoría de los casos estos servicios estaban unidos en una misma aplicación.

Los microservicios nos permiten evolucionar y promover el crecimiento del software. Cuando un componente específico del microservicio crece más allá de sus capacidades, es posible separarlo en elementos más pequeños o asignarle más recursos. Los microservicios ofrecen simplicidad en la arquitectura de software.

Los retos de hacer Microservicios

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

Al tener 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. Como menciona Martin Fowler en su blog de Pre-requisitos para Microservicios, hay diferentes retos en la operación de sistemas basados en microservicios:

  1. Habilidades de aprovisionamiento rápido de recursos, ya sea en cloud o on-premise.

  2. 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.

  3. Prácticas de desarrollo ágil y equipos de desarrollo con enfoque de producto.

Si no se tienen capacidades, es importante trabajar en paralelo con las ambiciones de microservicios. Fowler propone la creación de un modelo de madurez, donde las capacidades actuales, las debilidades y la hoja de ruta de un equipo de desarrollo están claramente documentadas.

Adicionar al equipo consultores que tengan un alto nivel de madurez en estas prácticas busca reducir el riesgo y aumentar la velocidad de implementación de estas prácticas.

Microservicios en la nube

Los servicios en la nube se caracterizan por ofrecer agilidad, flexibilidad, resiliencia y capacidad de adaptación. Migrar a la nube es un paso importante del proceso de modernización de cualquier software, pero estos beneficios no se dan de manera automática por el simple hecho de estar en la nube.

Cumplir con la promesa de un servicio más eficiente requiere de un ajuste paralelo en la arquitectura de su aplicación. Las arquitecturas monolíticas se convierten fácilmente en un cuello de botella para sistemas complejos y a gran escala.

Como lo describimos en nuestro artículo de Cloud Native, los microservicios son un elemento esencial de una estrategia de adopción de prácticas cloud para la transformación digital.

¿Cuándo debemos pensar en microservicios?

A pesar que la arquitectura monolítica sigue siendo la norma para la mayor parte de las aplicaciones, no es lo mejor para sistemas complejos. Por tanto, en la medida en que un software evoluciona y se desarrolla, mayor se vuelve el costo de oportunidad de preservar una arquitectura monolítica y mayores son las ventajas de adoptar una arquitectura más flexible, que permita y promueva el crecimiento de su empresa.

La arquitectura de microservicios nació como una reacción de los desarrolladores ante la imposibilidad de continuar escalando aplicaciones. Y esto sucede, tarde o temprano, con todo software exitoso, independientemente de qué tan bien escrito esté el código original o qué tan buen mantenimiento se le haya dado. 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, pero que puedan ser aisladas.

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).

Si su empresa ha llegado a ese punto, tal vez sea momento de considerar migrar a microservicios. En APLYCA estamos listos para ayudarle en sus proyectos para implementar estrategias eficientes de microservicios o modernizar aplicaciones históricas. Somos expertos en planear, desarrollar e implementar microservicios a lo largo de la cadena de valor, desde el diseño de la arquitectura hasta mecanismos de acceso y de integración con otras aplicaciones, pasando por su codificación.

Los microservicios son una herramienta importante para incrementar la agilidad y capacidad de adaptación de empresas medianas, lo que impulsa su competitividad.

Con APLYCA la migración puede realizarse de forma gradual, comenzando por algunos de los componentes más complejos de su sistema actual. Una forma eficiente de desplegar microservicios es mediante las herramientas disponibles para administración y ejecución de aplicaciones basadas en microservicios, como los contenedores.

En APLYCA podemos ayudarlo a migrar a microservicios, que se desplieguen y ejecuten en la nube, mediante el uso de contenedores. Nuestra experiencia con herramientas de orquestación de contenedores como Kubernetes y Docker, permitirá que sus aplicaciones se ejecuten con igual eficiencia on-premise y en la nube. En refuerzo a nuestra experiencia con contenedores, a inicios de 2018 suscribimos una alianza con Docker que refuerza nuestra capacidad de desplegar aplicaciones.

Somos una empresa líder en consultoría en microservicios en Colombia respaldada por 15 años de excelencia operacional. Nos especializamos en construir, desplegar y administrar una amplia gama de aplicaciones, tanto en la nube como on-premise.

¡Acérquese con nosotros para conocer nuestros servicios de consultoría especializada con una excelente relación costo-beneficio!

Si su organización tiene interés en implementar microservicios de la mano de expertos, lo invitamos a contactarnos.