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.
