/
/

Cómo cambian los microservicios el comportamiento del sistema a escala y qué implica a nivel operativo

por Team Ninja
How Microservices Change System Behavior at Scale, and Its Operational Implications

Resumen instantáneo

Este post ofrece una lista completa de comandos CMD básicos y una inmersión profunda en los comandos de Windows, con más de 70 comandos cmd esenciales tanto para principiantes como para usuarios avanzados. Explica comandos prácticos del símbolo del sistema para la gestión de archivos, la navegación por directorios, la solución de problemas de red, las operaciones de disco y la automatización con ejemplos reales para mejorar la productividad. Tanto si estás aprendiendo los comandos básicos de cmd como si ya dominas las herramientas avanzadas de la CLI de Windows, esta guía te ayudará a utilizar el Símbolo del sistema de forma más eficaz.

Puntos clave

  • Puedes escalar partes concretas de tu aplicación de forma independiente para ajustarte a la demanda, lo que ayuda a ahorrar costes y recursos de servidor.
  • Si una parte de tu sistema falla, el resto de la aplicación suele seguir funcionando, con lo que evitas una caída total.
  • Gestionar muchos servicios pequeños es complejo, así que necesitas herramientas automatizadas que se encarguen de arrancarlos, detenerlos y conectarlos de forma fiable.
  • Como los servicios están distribuidos y se reinician con frecuencia, necesitas herramientas de supervisión centralizada para seguir el rendimiento y detectar errores rápido.
  • Este enfoque es ideal para proyectos grandes y complejos, pero la configuración y el mantenimiento adicionales lo hacen innecesario para la mayoría de las empresas pequeñas.
  • Debes almacenar los datos importantes por separado de tus servicios y usar sistemas automatizados para hacer la copia de seguridad de esos datos e informar de los errores.

Una arquitectura basada en microservicios beneficia a las aplicaciones que necesitan ser muy escalables, resilientes y estar siempre disponibles, además de a los casos de uso en los que la latencia es un problema, ya que permite distribuir los componentes cerca de los usuarios finales. Los microservicios no sirven solo para alojar aplicaciones de consumo y SaaS: también pueden desplegarse en infraestructuras y herramientas internas donde la fiabilidad es prioritaria.

Esta guía explica cómo escalar microservicios, en qué se diferencian de las arquitecturas de aplicaciones tradicionales y cómo afecta todo esto a la forma en que los equipos de TI deben gestionar, supervisar y mantener los sistemas basados en microservicios.

¿Qué son los microservicios?

Los microservicios (o una arquitectura basada en microservicios) son una forma de desarrollar aplicaciones a partir de servicios independientes, cada uno de los cuales encapsula una funcionalidad concreta. Los componentes están poco acoplados y se comunican mediante API (normalmente sobre HTTP), de modo que si un servicio falla, los demás pueden seguir funcionando. Los microservicios suelen desplegarse para aplicaciones y servicios alojados en modelo cliente-servidor, no para aplicaciones que se ejecutan localmente en tus dispositivos (aunque se pueden contenerizar con ese fin).

Como cada servicio es independiente, se puede escalar por separado: por ejemplo, una aplicación sencilla de comercio electrónico puede dividirse en componentes para procesar pagos, enviar correos y mostrar páginas web. Si se produjera un pico repentino de tráfico (pero nadie finalizara su compra, lo que dispararía pagos y correos), solo habría que escalar el microservicio del servidor web. Esto es eficiente en recursos y rentable, y al mismo tiempo garantiza que siempre haya capacidad para cubrir la demanda.

Microservicios y arquitecturas monolíticas

Los microservicios son una alternativa a la arquitectura monolítica, en la que todo reside en una única base de código, normalmente alojada en un solo servidor potente.

La principal ventaja del enfoque basado en microservicios es la escalabilidad: para escalar una aplicación monolítica, puedes aumentar los recursos de los que dispone (es decir, más memoria y CPU, lo que se conoce como escalado vertical) o ejecutar otra instancia de la aplicación y repartir la carga entre ambas (escalado horizontal).

Escalar monolitos puede resultar muy ineficiente según el tamaño y la naturaleza de tu aplicación, porque puede implicar asignar recursos a toda la aplicación cuando solo un pequeño componente está bajo mucha carga. Con microservicios, como cada componente se puede escalar horizontalmente, el uso global de recursos se optimiza.

Los microservicios también responden a la alta disponibilidad: en un monolito, si la aplicación se cae, se cae todo. En cambio, si un microservicio concreto se cae, los demás pueden seguir funcionando mientras se recupera (por ejemplo, si se cae tu microservicio de envío de correos, los clientes pueden seguir comprando y, como mucho, notarán un retraso en la actualización de su pedido, en lugar de no poder comprar en absoluto).

Cómo cambian los microservicios las interacciones del sistema

Cuando los microservicios escalan horizontalmente, se crean y se destruyen contenedores o instancias para cubrir la demanda. Eso significa que se pierde todo lo que esté en memoria o almacenamiento local. Parte de construir una aplicación escalable basada en microservicios consiste en resolverlo con almacenamiento persistente, bases de datos y mecanismos para compartir el estado (como los almacenes de clave-valor).

Los microservicios también dependen en gran medida del rendimiento de la red: los componentes deben comunicarse constantemente, con baja latencia y sin interrupciones.

Nuevos patrones de fallo en los sistemas distribuidos basados en microservicios

Aunque una de las ventajas de los microservicios es que unos componentes pueden seguir funcionando cuando otros fallan, esto no siempre es viable: depende de tu caso de uso y de las decisiones de diseño tomadas durante el desarrollo.

Inevitablemente, unos componentes dependerán de la disponibilidad de otros y algunas operaciones deben ejecutarse en un orden determinado. Esto implica que los fallos se propagarán en cascada y que la gestión de errores tiene que contemplar caídas parciales del sistema, no solo fallos totales.

El escalado funciona de otra forma en entornos distribuidos (y eso tiene efectos secundarios)

El escalado, combinado con componentes aislados que se pueden actualizar por separado (siempre que sus API se mantengan estables), da lugar a nodos que se crean y destruyen con frecuencia a medida que se asignan recursos según la demanda. En algunos casos, el contenedor o la instancia de un servicio concreto puede vivir solo el tiempo justo para atender una única petición.

Esto afecta enormemente a la visibilidad, ya que el estado de cada componente se pierde cuando se destruye, incluidos los registros de errores necesarios para diagnosticar problemas.

Retos de coordinación entre servicios

Los microservicios deben mantenerse coordinados y accesibles entre sí, y las dependencias entre servicios tienen que estar reflejadas en las configuraciones. Para ello se recurre a herramientas como Kubernetes o a las funciones nativas de plataformas cloud como Azure y AWS para gestionar contenedores y máquinas virtuales.

Cuando aparecen problemas de latencia o de conexión, las arquitecturas basadas en microservicios pueden volverse poco fiables o quedar fuera de servicio.

El rendimiento depende de la finalidad de cada microservicio y de sus relaciones

En una arquitectura basada en microservicios, el rendimiento se puede priorizar componente a componente. Por ejemplo, un servidor web debería responder lo más rápido posible para que los usuarios finales tengan la mejor experiencia, mientras que un servidor de notificaciones por correo puede tardar unos segundos en lanzar un aviso sin que eso afecte a las operaciones.

En algunos casos, un microservicio puede ser en realidad una API externa (por ejemplo, una API de comunicaciones para enviar SMS), con unas expectativas de rendimiento distintas a las de un servicio alojado en el mismo centro de datos que tu aplicación.

Esto hace que optimizar el rendimiento sea más complejo y que no se reduzca a una simple cuestión de cifras.

Cómo aumenta la complejidad con el tiempo en los sistemas basados en microservicios

Aunque parezcan más complejos, los microservicios pueden simplificar las operaciones de TI si se usan bien: a menudo es más fácil solucionar problemas en un único servicio aislado que en toda una pila de aplicaciones monolítica.

Aunque la configuración inicial tiene su complejidad, la orquestación y la automatización hacen que desplegar aplicaciones basadas en microservicios sea cada vez más sencillo para los equipos de DevOps. Las herramientas de CI/CD y las de infraestructura como código, como Terraform, eliminan buena parte del trabajo manual y de los riesgos de configuración incorrecta.

Diferencias y retos en la supervisión del rendimiento y la seguridad de los microservicios

La clave del éxito de cualquier sistema de TI está en la visibilidad y en un enfoque proactivo para resolver problemas. Los equipos de TI y DevOps que viven «apagando fuegos» no pueden ofrecer servicios de TI estables y sostenibles. Si alojas aplicaciones basadas en microservicios, tienes que poder supervisar y solucionar problemas en máquinas virtuales y contenedores.

También puedes recurrir a contenedores como servicio (CaaS) para abstraer la gestión directa de la infraestructura. Estos servicios ofrecen interfaces simplificadas para gestionar aplicaciones en contenedores y se encargan de gran parte de la carga de configuración, mantenimiento y seguridad asociada a gestionar plataformas de orquestación de contenedores.

Las copias de seguridad son otro reto en los microservicios: las instancias en ejecución no deberían contener datos de larga duración que requieran respaldo, mientras que los almacenes de clave-valor, las bases de datos y el almacenamiento de objetos que se usan para persistir datos pueden necesitar una solución de copia de seguridad adecuada que permita revertir cambios o recuperar todo por completo, con inmutabilidad para protegerte frente a amenazas malintencionadas.

Cuándo aportan más valor los microservicios

Las aplicaciones basadas en microservicios aportan más valor cuando:

  • Los componentes necesitan escalarse de forma independiente
  • Las aplicaciones son grandes y complejas
  • Los equipos de desarrollo necesitan trabajar de forma autónoma
  • Hace falta un cambio continuo

Para los usuarios finales y los responsables del negocio, el valor de los microservicios está en la fiabilidad, la velocidad y la optimización de costes. Para los equipos técnicos, en la consistencia y en poder escalar cuando haga falta.

Dicho esto, no deberías lanzarte a pedir a tus desarrolladores que migren el código actual a una arquitectura basada en microservicios. Es poco probable que la mayoría de las pymes saque partido del trabajo adicional que supone reconstruir bases de código consolidadas y de la carga operativa de mantener sistemas distribuidos.

En cambio, si estás diseñando e implantando un sistema nuevo, conviene valorar si un enfoque basado en microservicios ofrece ventajas operativas a largo plazo, sobre todo si tienes previsto crecer hasta dar servicio a un gran número de usuarios.

Control y rendimiento de toda tu infraestructura de TI

Obtener información útil sobre el funcionamiento de una infraestructura efímera y con escalado automático puede ser todo un reto. Muchas herramientas permiten gestionar errores desde dentro de los contenedores y las instancias puntuales, pero suelen estar pensadas para desarrolladores.

Si tu equipo de TI se encarga del día a día de aplicaciones basadas en microservicios, busca herramientas de notificación de errores que funcionen con tu base de código y permitan la integración con una plataforma de TI unificada. Así centralizas las alertas de tus aplicaciones de microservicios y las sitúas junto a las notificaciones de supervisión de endpoints, seguridad y red.

También puedes configurar la supervisión del rendimiento de las aplicaciones para medir el rendimiento de cada microservicio y del conjunto, y usar la automatización del servicio de asistencia para escalar incidencias o anomalías de coste al técnico adecuado y diagnosticarlas al momento.

FAQs

Evita reescribirlo todo de golpe. Es mejor avanzar poco a poco: identifica una función de negocio concreta y de bajo riesgo y migra solo esa pieza a su propio servicio independiente. Así tu equipo aprende los nuevos requisitos operativos y resuelve problemas a pequeña escala antes de ampliar la arquitectura.

Tu plataforma de orquestación (como Kubernetes) incluye un sistema integrado de «descubrimiento de servicios» que mantiene un registro actualizado de los servicios activos y enruta automáticamente las peticiones al lugar correcto a medida que escalan hacia arriba o hacia abajo.

Sí. Lo más eficaz es avanzar hacia equipos multidisciplinares en los que un solo grupo asuma todo el ciclo de vida de su servicio (diseño, programación, despliegue y operación continua), en lugar de repartir el trabajo entre equipos separados de «desarrollo» y «operaciones».

No necesariamente. Ahorras dinero al escalar solo las partes de la aplicación que lo necesitan, pero pueden aumentar los costes por las tarifas de transferencia de datos de red entre servicios, por la necesidad de herramientas de infraestructura redundantes y por requerir personal más especializado para gestionar el entorno.

Como hay muchas más conexiones de red internas, tienes que pasar a un modelo de «confianza cero», que exige autenticar y autorizar cada comunicación entre servicios en lugar de confiar en un único perímetro protegido alrededor de toda la aplicación.

Quizá también te interese…

¿Listo para simplificar los aspectos más complejos de las TI?