Microservicios: Transformando la Arquitectura del Software

Vanessa Marely Aristizabal Angel
7 min readMar 29, 2024

--

Microservicios — Imagen generado por DALL-E

En el vasto y dinámico mundo del desarrollo de software, la arquitectura de microservicios ha emergido como un paradigma revolucionario, redibujando las fronteras de lo que es posible en términos de escalabilidad, mantenibilidad y eficiencia en la implementación de aplicaciones. Esta arquitectura propone una descomposición de aplicaciones en componentes más pequeños y manejables, conocidos como microservicios, cada uno con un conjunto de responsabilidades claramente definidas, operando de forma independiente, pero cohesivamente, para formar un sistema más grande y complejo. Este enfoque modular no solo facilita una mejor gestión del desarrollo y mantenimiento de las aplicaciones sino que también promueve la adaptabilidad y agilidad en la respuesta a los cambiantes requerimientos del negocio y las demandas del mercado.

Con la promesa de ofrecer una mayor eficiencia en el desarrollo y operación de software complejo, las arquitecturas de microservicios han sido adoptadas por una variedad de empresas, desde gigantes tecnológicos hasta startups innovadoras, buscando capitalizar sus beneficios en términos de escalabilidad, flexibilidad y robustez.

En este reporte que escribí para un curso de Arquitecturas evolutivas, exploraremos la aplicabilidad de las arquitecturas de microservicios en contextos reales, a través de ejemplos concretos como PayPal y Etsy, que han experimentado transformaciones significativas al adoptar este enfoque. Además, analizaremos los criterios de calidad esenciales para el éxito de la implementación de microservicios y cómo estos se reflejan en un modelo de alto nivel, culminando en una discusión sobre la integración de la arquitectura de microservicios con otros paradigmas arquitectónicos para crear sistemas de software altamente eficientes y adaptativos.

Aplicabilidad de las arquitecturas de microservicios en contextos reales

Aplicabilidad de microservicios — Imagen generada por DALL-E

La arquitectura de microservicios es un enfoque en el cual una aplicación se desarrolla como una colección de servicios pequeños y modulares, cada uno ejecutándose en su propio proceso y comunicándose con mecanismos ligeros. Este enfoque promueve la modularidad, la escalabilidad, y la facilidad de mantenimiento y despliegue.

En la industria existen diferentes empresas, desde grandes tecnológicas, hasta pequeñas, que utilizan la arquitectura de microservicios, como por ejemplo:

  • PayPal: La transición de PayPal de una arquitectura monolítica a una de microservicios no solo mejoró su capacidad para escalar y desplegar nuevas funciones, sino que también transformó sus métricas operativas. Por ejemplo, después de adoptar microservicios, PayPal logró reducir el tiempo de despliegue de nuevas características de semanas a horas, mejorando significativamente la eficiencia del desarrollo y la satisfacción del cliente. Además, la capacidad de escalar servicios individualmente permitió a PayPal manejar picos de tráfico del 50% sin degradación del rendimiento, algo impensable con su arquitectura anterior.
  • Etsy: Antes de la migración a microservicios, Etsy enfrentaba cuellos de botella en el rendimiento que afectaban la experiencia del usuario. La implementación de microservicios permitió a Etsy alcanzar su objetivo de “1.000 milisegundos de tiempo de cristalización”, mejorando el tiempo de carga en un 80% en promedio. Este cambio no solo optimizó la experiencia del usuario sino que también incrementó la tasa de conversión en un 25%, demostrando el impacto directo de una arquitectura de microservicios en el rendimiento del negocio.

Criterios de calidad en arquitecturas de Microservicios

Criterios de calidad — Imagen generada por DALL-E
  • Escalabilidad: Escalar los servicios de forma independiente según sus necesidades específicas. Un ejemplo claro de escalabilidad en microservicios se encuentra en la capacidad de Amazon para escalar servicios de manera independiente durante eventos de alta demanda como el Prime Day, ajustando recursos específicos para cada servicio sin necesidad de escalar toda la aplicación.
  • Seguridad: Abarca aspectos como la autenticación y autorización, la encriptación de datos y la gestión segura de secretos. Netflix, por ejemplo, implementa microservicios con estrategias de seguridad que incluyen autenticación y autorización a nivel de servicio, cifrado de datos en tránsito y en reposo, y gestión segura de secretos, lo cual es crítico dado su vasto ecosistema de contenido.
  • Rendimiento: El rendimiento puede verse afectado por la latencia de la red entre servicios, por lo que se deben optimizar las comunicaciones y, cuando sea posible, reducir las dependencias síncronas. Twitter mejoró notablemente su rendimiento al migrar a microservicios, reduciendo la latencia en sus timelines a través de la optimización de comunicaciones entre servicios, demostrando cómo la arquitectura de microservicios puede mejorar la interacción del usuario final con aplicaciones de alta demanda.

Modelo de Alto Nivel

Arquitectura de Alto nivel — Imagen Generada por DALL-E

El modelo de alto nivel nos podria dar un ejemplo de arquitectura para una aplicación, que puede incluir los siguientes componentes:

  • Clientes Múltiples: Puede ser cualquier dispositivo, como computadoras y teléfonos móviles, donde desde el Front-end el usuario final va a interactuar con la aplicación. Estos clientes realizan solicitudes a diferentes APIs que estarán expuestas por el back-end.
  • API Gateway: Es el componente central que actúa como enrutador para las diferentes solicitudes de los clientes. Netflix utiliza Zuul como su API Gateway, gestionando eficientemente las solicitudes entrantes hacia sus microservicios internos. Esto facilita la autenticación, el monitoreo y la gestión del tráfico, crucial para mantener la calidad del servicio a millones de usuarios simultáneos.
  • Servicios: Estos son componentes independientes que realizan funciones específicas dentro de la aplicación. Encargándose de diferentes aspectos de la aplicación como autenticación, procesamiento de pagos, manejo de pedidos, etc.
  • Colas (Queues): Los microservicios están conectados a una cola, lo que implica una comunicación asíncrona entre los servicios. Las colas permiten el manejo eficiente de las solicitudes, balanceando la carga, permitiendo que los servicios trabajen de manera desacoplada. Una cola como RabbitMQ, puede distribuir mensajes de manera eficiente, permite que las operaciones sean no bloqueantes y asincrónicas. En caso de que un microservicio falle o se sobrecargue, los mensajes pueden permanecer en la cola hasta que se puedan procesar, lo que asegura que no se pierdan y que el sistema pueda recuperarse de fallos sin perder información.
  • Contenedores: Los servicios están en contenedores, facilitando la portabilidad, la escalabilidad y la gestión del entorno de ejecución de cada microservicio. Spotify emplea Docker para contenerizar sus microservicios, lo que le permite desplegar y escalar servicios rápidamente a través de diferentes entornos, mejorando tanto la eficiencia del desarrollo como la fiabilidad de la aplicación en producción.

Criterios de calidad (RNF) representados en el modelo de alto nivel

  • Escalabilidad: El sistema está diseñado para manejar un aumento en la carga de trabajo, ya que los servicios pueden escalar de forma independiente.
  • Disponibilidad: La inclusión de colas indica un sistema diseñado para ser resistente a fallos y garantizar que las solicitudes de los clientes se gestionen sin pérdida, incluso si un servicio está temporalmente no disponible.
  • Rendimiento: La comunicación asincrónica a través de colas puede mejorar el rendimiento al desacoplar los procesos que no necesitan ser ejecutados de manera inmediata, permitiendo que el sistema maneje otras tareas en paralelo.
  • Flexibilidad: La contenedorización permite flexibilidad en el despliegue de servicios y la portabilidad entre diferentes entornos de ejecución.
  • Interoperabilidad: El API Gateway sugiere que los servicios pueden comunicarse de manera estandarizada, lo que facilita la integración con otros sistemas y servicios.
  • Consistencia y Confiabilidad: Las colas garantizan que los mensajes se entreguen de forma confiable y en orden.

Integración de la arquitectura de microservicios con otras arquitecturas

Integración con otras arquitecturas — Imagene generada por DALL-E

La arquitectura de microservicios es flexible a integrarse con otras arquitecturas, permitiendo a las empresas aprovechar diferentes paradigmas para satisfacer las diferentes necesidades del negocio.

Se puede decir que se puede integrar con varios tipos como Monolíticas, Orientada a Servicios (SOA), Basada en Eventos, Serverless u otras.

  • Monolíticas. La arquitectura de microservicios puede servir para descomponer una arquitectura monolítica y a su vez puede convivir con componentes monolíticos, interactuando con ellos a través de APIs.
  • Orientada a Servicios (SOA). Los microservicios pueden integrarse en una arquitectura SOA existente utilizando buses de servicios empresariales (ESB) para facilitar la comunicación y orquestación entre servicios.
  • Basadas en Eventos. Los microservicios pueden diseñarse para actuar como productores o consumidores en una arquitectura basada en eventos. Se pueden integrar, por ejemplo utilizando brokers de mensajes o buses de eventos, permitiendo que los microservicios publiquen y suscriban a eventos eficientemente.
  • Serverless. Los microservicios pueden desplegarse en plataformas serverless, donde cada función serverless actúa como un microservicio.

Con SOA y Serverless: La integración de microservicios con arquitecturas SOA se puede ver en empresas como Adobe, que utiliza buses de servicios empresariales para orquestar servicios complejos dentro de su plataforma Creative Cloud. Por otro lado, la combinación de microservicios con arquitecturas Serverless ha permitido a startups como A Cloud Guru escalar eficientemente su plataforma de educación en la nube, pagando solo por el tiempo de ejecución de funciones específicas, lo que reduce costos operativos significativamente.

Conclusiones

La adopción exitosa de microservicios no solo depende de la tecnología, sino también de una cultura organizacional que fomente la colaboración, la responsabilidad, y la agilidad en el desarrollo. A medida que las organizaciones continúan adoptando microservicios, la tendencia hacia automatización en la implementación, observabilidad avanzada, y seguridad en el diseño se volverán cada vez más críticas. Asimismo, la adopción de patrones de arquitecturas serverless y basadas en eventos junto con microservicios señala el futuro de un desarrollo de software más eficiente, resiliente y escalable, permitiendo a las organizaciones adaptarse rápidamente a los cambios del mercado y las necesidades del cliente.

Referencias

Das, Biraj. Navigating Microservices Architecture: A Comprehensive Exploration. https://www.linkedin.com/pulse/navigating-microservices-architecture-comprehensive-exploration-das-jid7c/ Octubre 25, 2023.

Tantsiura, Pavel. What You Should Know About Microservice Architecture. https://theappsolutions.com/blog/development/microservice-architecture-explained/ Agosto 28, 2023.

H, Jeremy. 4 Microservices Examples: Amazon, Netflix, Uber, and Etsy. https://blog.dreamfactory.com/microservices-examples/ Mayo 25, 2023.

Sharma, Love. 10 nonfunctional requirements to consider in your enterprise architecture. https://www.redhat.com/architect/nonfunctional-requirements-architectureAgosto 4, 2022.

Sara Hassan, Rami Bahsoon. Microservices and Their Design Trade-offs: A Self-Adaptive Roadmap, 2016.

--

--