¿Qué es una arquitectura de microservicios?
La arquitectura de microservicios se refiere a una técnica que brinda a los desarrolladores modernos una forma de diseñar aplicaciones flexibles y altamente escalables al descomponer la aplicación en servicios discretos que implementan funciones comerciales específicas. Estos servicios, a los que a menudo se hace referencia como "de estructura flexible", se pueden construir, implementar y adaptar de forma independiente.
Cada servicio se comunica con otros servicios, a través de interfaces de programación de aplicaciones (APIs) estandarizadas, lo que permite que los servicios se escriban en diferentes lenguajes o en diferentes tecnologías. Esto difiere completamente de los sistemas construidos como estructuras monolíticas donde los servicios estaban inseparablemente interconectados y solo se podían escalar juntos.
Como cada servicio tiene una funcionalidad limitada, es mucho más pequeño en tamaño y complejidad. El término microservicio proviene de este diseño de funcionalidad discreta, y no de su tamaño físico.
¿Por qué una arquitectura de microservicios?
La arquitectura de microservicios ha ganado popularidad debido a que sus características modulares conducen a la flexibilidad, escalabilidad y esfuerzo de desarrollo reducido. Su flexibilidad de implementación y el aumento de las opciones de implementación nativas de la nube sin servidor y su función como servicio (como AWS Lambda y Microsoft Azure Cloud Functions) crearon el entorno perfecto para que los microservicios prosperen en el panorama de TI actual. Estas plataformas en la nube permiten que los microservicios y las funciones se escalen de la inactividad a un gran volumen y viceversa, mientras que los clientes pagan solo por la capacidad informática que utilizan.
A medida que las empresas buscan continuamente ser más ágiles, reducir los obstáculos y mejorar los tiempos de entrega de las aplicaciones, la arquitectura de microservicios sigue aumentando en popularidad.

Beneficios de una arquitectura de microservicios
- Los componentes de la aplicación se pueden construir en diferentes lenguajes de programación
- Se pueden mantener los flujos individuales de desarrollo e implementación continuos
- Se pueden construir aplicaciones extremadamente escalables
- Es posible el uso de opciones de implementación de función como servicio nativas de la nube
- Frecuentemente resultan en costos operativos más bajos
- El aislamiento y la estructura flexible permiten actualizaciones y mejoras compartimentadas
Ejemplos de casos de uso de arquitectura de microservicios
- Adoptar opciones de implementación nativas de la nube: aproveche la función sin servidor y la función como servicio para operaciones más eficientes y escalables.
- Migrar la funcionalidad de las aplicaciones tradicionales: descomponga los servicios de las grandes aplicaciones monolíticas para que se puedan mantener y escalar de forma independiente.
- Aprovechar la arquitectura moderna de aplicaciones: adopte patrones de aplicaciones de microservicio de estructura flexible y basados en eventos, con la capacidad de aprovechar diferentes lenguajes de programación según las necesidades del caso de uso. Por ejemplo, opte por funciones computacionalmente pesadas, Node.js para aplicaciones web rápidas, etc.
¿Qué es DevOps y por qué frecuentemente se asocia con los microservicios?
DevOps se puede explicar como una ideología centrada en herramientas. Básicamente, las herramientas y la tecnología se utilizan para simplificar el trabajo que deben realizar los desarrolladores. Junto con las herramientas mejoradas, la cooperación entre los equipos de operaciones y desarrollo ayuda a que los proyectos se completen de manera más rápida y eficiente.
Por ejemplo, supongamos que está creando una aplicación que permite a los usuarios verificar los saldos de sus cuentas. A menudo, en el pasado, el ciclo de desarrollo de la aplicación hacía que los desarrolladores la crearan y luego la entregaran al equipo de operaciones sin responsabilidad por el resultado final; Era el trabajo del equipo de operaciones hacer que funcionara. En un entorno DevOps más cohesionado, ambas partes trabajan juntas. Un desarrollador sería el propietario del ciclo de vida de la aplicación de principio a fin, lo que significa, por ejemplo, estar en turno durante el lanzamiento. Es necesaria una comunicación constante entre los dos grupos para asegurarse de que todo sea exitoso y de que obtenga los beneficios de DevOps (velocidad de comercialización, ciclo de desarrollo más sencillo, mayor responsabilidad, etc.).
El nuevo modelo de flujo de trabajo de DevOps crea un cambio cultural importante. El solo uso de nuevas herramientas no hace que un plan de DevOps sea exitoso. En todo caso, las nuevas herramientas podrían inhibir el éxito si le hacen creer sólidamente que todo se implementará adecuadamente.
Debido a la naturaleza de los microservicios, a menudo es necesario contar con procesos de DevOps sólidos para la implementación. El mayor uso de herramientas y prácticas compartidas más sólidas evita que los equipos se sientan abrumados por todas las piezas pequeñas y móviles. Reduce la interrupción o la carga de este cambio mientras continúa recibiendo los beneficios.

El futuro: microservicios basados en eventos, computación sin servidor y FaaS
Cuando las personas comienzan a experimentar con microservicios, a menudo utilizan de forma predeterminada técnicas familiares, por ejemplo, RESTful API. REST opera en un tipo de comunicación de solicitud-respuesta. El problema con este enfoque sincronizado es que deberá esperar una respuesta; los servicios se vuelven dependientes unos de otros. Si un servicio se ejecuta más lento o no responde, significa que el servicio que lo llamó se ejecutará más lento o fallará. Este acoplamiento puede significar perder algunos de los beneficios de una arquitectura de microservicios, creando una estructura más interdependiente similar a un estilo de arquitectura orientada a servicios (SOA).
Si diseña sus servicios utilizando un modelo basado en eventos, puede asegurarse de que algunas partes de su aplicación continúen funcionando, mientras que otras partes podrían no estar involucradas, en lugar de que toda la aplicación deje de responder. Tome Netflix como ejemplo. En ocasiones, puede notar que el botón "continuar viendo" no aparece. Esto se debe a que un servicio específico no está disponible. Sin embargo, eso no significa que todo Netflix se detenga. Los usuarios aún podrán buscar programas y ver vistas previas, por lo que otros aspectos del servicio de Netflix aún están disponibles, aunque es posible que un servicio no lo esté.
Los desarrolladores que adoptan completamente un enfoque de microservicios se dan cuenta de que la verdadera escalabilidad se habilita con una estructura flexible y una arquitectura basada en eventos. Un servicio puede ser asíncrono, realizar una acción, transmitir un mensaje y continuar con su función principal sin tener que esperar una respuesta de otro servicio.