¿Qué son los microservicios?
Los microservicios son una interpretación moderna de las arquitecturas orientadas a servicios en las que una aplicación se divide en muchos servicios pequeños, lo que permite a los equipos innovar más rápido y lograr una escala masiva.
Muchas empresas crearon sus servicios originales utilizando una arquitectura de aplicación monolítica; en otras palabras, todos los componentes de la arquitectura residen en una sola infraestructura. Cuando los desarrolladores utilizan una arquitectura de microservicios, desglosan todos los componentes del sistema y los implementan como servicios individuales. Los servicios se comunican entre sí mediante llamadas a la API.
El resultado es un estilo arquitectónico conectable que permite actualizaciones rápidas y rentables. Si necesitas expandir solo un área del sistema, es más fácil y menos costoso que expandir todo el sistema. Los desarrolladores utilizan herramientas de orquestación de contenedores y Kubernetes para asignar de manera adecuada la potencia de procesamiento y cualquier otro recurso que requieran. Estos servicios se ejecutan en un contenedor en un servidor basado en la nube.
Para comprender la arquitectura de microservicios puede compararla con una arquitectura de aplicación monolítica heredada. Con un estilo arquitectónico monolítico, todos los componentes individuales forman parte de una sola unidad. Todo se desarrolla, implementa y expande en conjunto. Los equipos deben escribir toda la aplicación en un solo lenguaje con un solo tiempo de ejecución.
Eso significa que los diferentes equipos que trabajan en diferentes componentes de la aplicación deben coordinarse para no afectar el trabajo de los demás. Por ejemplo, una parte de la aplicación puede depender de un módulo que necesita una versión específica, por ejemplo, la 1.8, mientras que otro equipo necesita el mismo módulo pero requiere la versión 1.7 porque la versión 1.8 es incompatible con otra dependencia. En una aplicación monolítica, se tiene que elegir una opción o la otra. Del mismo modo, las aplicaciones monolíticas implementan todo como una aplicación única. Para esto se requieren pruebas y la implementación del código en conjunto.
Con los microservicios, cada componente se desglosa e implementa de manera individual como servicios que se comunican entre sí a través de llamadas a la API.
Los microservicios maximizan la confiabilidad de las aplicaciones y la velocidad de implementación. Esto es particularmente importante en un mercado que se mueve y evoluciona más rápido que nunca. La arquitectura en contenedores de los microservicios mueve las aplicaciones a cualquier lugar sin alterar ni interrumpir el entorno, lo que facilita la velocidad y reduce el tiempo de inactividad.
Estos son los componentes principales de una arquitectura de microservicios:
- Clientes: las aplicaciones cliente generalmente deben consumir la funcionalidad de varios microservicios y requieren actualizaciones frecuentes.
- Bases de datos: una API de servicio actualiza las bases de datos de microservicios llevando todos los servicios remotos que admiten las comunicaciones entre procesos para diferentes pilas.
- Puerta de enlace de la API: una puerta de enlace de la API es un patrón de diseño de microservicios que es un punto de entrada único y esencial para las solicitudes de enrutamiento y la traducción de protocolos.
- Proveedores de identidad: un microservicio de identidad debe permitir el acceso de servidor a servidor y dirigido por el usuario a los datos de identidad.
- Formatos de mensajería: los microservicios se comunican con patrones de arquitectura de microservicios sincrónicos o asincrónicos.
- Contenido estático: los clientes reciben contenido estático a través de servicios de almacenamiento basados en la nube y redes de entrega de contenido.
- Gestión: este componente permite a los usuarios comerciales configurar los servicios durante el tiempo de ejecución.
- Descubrimiento de servicio: se requiere un mecanismo de descubrimiento de servicio para solicitar el servicio.
El artículo por excelencia de Martin Fowler sobre microservicios define nueve componentes que la mayoría de las arquitecturas de microservicios tienen en común.
1. Componentización a través de servicios
Por su naturaleza, las arquitecturas de microservicios se dividen en servicios de componentes. De este modo, cada servicio se puede designar, implementar, perfeccionar y volver a implementar de forma independiente sin afectar al entorno. Esto significa que, por lo general, es posible cambiar un servicio en lugar de volver a implementar una aplicación completa.
2. Se organiza en torno a las capacidades comerciales
Con el enfoque monolítico, los equipos técnicos se centraron por separado en las capacidades relacionadas con la tecnología, como la interfaz de usuario, las bases de datos y la lógica del lado del servidor. Por otro lado, los microservicios organizan equipos interdisciplinarios en torno a las capacidades y prioridades comerciales. Los equipos pueden diseñar productos basados en servicios individuales que se comunican mediante un bus de mensajes.
3. Productos, no proyectos
Anteriormente, los desarrolladores de aplicaciones usaban el modelo de proyecto en el que se asignaba a los equipos la tarea de crear software, que luego se enviaba a una organización de mantenimiento al finalizar. La arquitectura de microservicios favorece a un equipo que posee el producto durante su vida útil. Esto permite a los desarrolladores interactuar con sus productos de nuevas maneras, ver cómo se comportan en la producción y aumentar el contacto con los usuarios. También permite a los ingenieros y las empresas aumentar la colaboración y comprender los campos de los demás.
4. Puntos finales inteligentes y tuberías tontas
Los microservicios tienen mucho en común con el sistema Unix tradicional. Reciben una solicitud, la procesan y generan una respuesta adecuada. Fowler se refiere a este enfoque como «puntos finales inteligentes y tuberías tontas». La infraestructura suele ser «tonta», ya que sirve únicamente como un enrutador de mensajes, y toda la inteligencia reside en los puntos finales que producen y consumen puntos finales.
5. Gobernanza descentralizada
La gobernanza descentralizada es la estructura predeterminada de una arquitectura de microservicios porque las plataformas de tecnología única a menudo conducen a una estandarización excesiva. Una gran ventaja de los microservicios en comparación con los monolitos es el uso de diferentes lenguajes de programación y tecnologías donde son más adecuados. Por ejemplo, los microservicios de Spring Boot pueden crear una aplicación para un componente, y Spring Cloud para otro.
6. Gestión descentralizada de datos
La mayoría de los microservicios permiten que cada componente administre su propia base de datos a partir de la gestión descentralizada de datos. Siempre puede usar el mejor almacén de datos para un proyecto específico al tiempo que elimina la laboriosa tarea de las actualizaciones de bases de datos compartidas.
7. Automatización de infraestructuras
Los expertos en CI/CD utilizan la automatización de infraestructuras en microservicios. Reduce las cargas de trabajo de los desarrolladores y mejora significativamente la eficiencia del plazo de implementación.
8. Diseño para evitar el fracaso
Al igual que las mejores empresas, los microservicios tienen en cuenta la resiliencia. Como los servicios únicos y diversos deben comunicarse, es probable que fallen. Esta es la principal desventaja de los microservicios en comparación con los monolitos porque la solución requiere una complejidad adicional.
Es necesario el uso de configuraciones sofisticadas de supervisión y registro para evitar que las fallas afecten a los consumidores. Si bien esto requiere más trabajo para los ingenieros, significa que la resistencia a fallas está bien desarrollada.
9. Diseño evolutivo
En una industria tecnológica tan vertiginosa, el diseño evolutivo ya no es un lujo, sino una necesidad. Nuevos dispositivos electrónicos llegan al mercado cada año, y sus aplicaciones deben estar listas para adaptarse a ellos. El diseño deconstruido de los microservicios significa que puede dar a sus aplicaciones un cambio de imagen sin una reimplementación.
Fowler profundizó en cada uno de estos componentes en esta charla de GOTO.
Los diseños de microservicios son ágiles y flexibles y permiten un tiempo de inactividad mínimo para el mantenimiento, las reparaciones y las actualizaciones.
Algunos casos de uso clave para los microservicios incluyen lo siguiente:
1. Procesamiento de datos
Las aplicaciones que se ejecutan en la arquitectura de microservicios pueden manejar más solicitudes simultáneas en menos tiempo, lo que las hace más eficientes.
2. Migración de sitios web
Los microservicios evitan el tiempo de inactividad de la migración de la interfaz de usuario, la estructura y/o el dominio del sitio.
3. Medios a gran escala
Las plataformas pueden encargarse de un número extremo de solicitudes de distintos subdominios sin errores ni retrasos.
4. Facturas y transacciones
Los microservicios pueden ayudar a que las transacciones sean más robustas con una reducción de las fallas de las aplicaciones. Esto permite que las empresas puedan expandirse sin volver a implementarlas.
5. Sistemas obsoletos
El desarrollo de un nuevo sistema en contenedores es más eficiente y efectivo que la actualización de monolitos viejos y torpes.
Implementar una arquitectura de microservicios, o bien descomponer un monolito heredado en microservicios, puede aumentar la velocidad, flexibilidad y escalabilidad, a menudo a costa de la simplicidad. Los monolitos son fáciles de crear, implementar y depurar, pero difíciles de expandir. Si bien una arquitectura de microservicios es más compleja, hay varios beneficios para los ingenieros:
Implementación independiente
Cada microservicio debe ser una pila completa para funcionar correctamente. Los equipos de DevOps pueden corregir errores fácilmente en un solo microservicio sin afectar a todo el entorno.
Escalabilidad
En un monolito, todos los elementos de la aplicación deben expandirse juntos, lo que significa que algunas partes podrían tener que expandirse innecesariamente. Con componentes independientes, cada microservicio puede expandirse individualmente según su carga. Los equipos que desarrollan aplicaciones con una arquitectura de microservicios pueden cambiar cada servicio sin interrumpir el resto de la aplicación. Los programadores pueden trabajar en paralelo para identificar servicios críticos, actualizar la funcionalidad y expandir los servicios seleccionados.
Libertad de pila tecnológica
La dependencia de una única pila tecnológica para toda la aplicación es una de las características más limitantes de una arquitectura monolítica. Con los microservicios, los desarrolladores pueden desarrollar una aplicación utilizando el lenguaje de programación, el marco, las bases de datos y las herramientas front-end y back-end adecuadas para el job. Esto evita tener que comprometerse con una pila estandarizada de uso general, pero que no destaca en ningún área.
Aislamiento de fallas
Una sola falla por lo general significa que falla una aplicación monolítica completa. Los microservicios aíslan las fallas de sus componentes para que toda la aplicación no se vea afectada. Cuando un microservicio falla, el resto de la aplicación puede permanecer en línea. Es recomendable mostrar el estado de cada microservicio en un panel de algún tipo para que el personal de mantenimiento pueda identificar problemas y resolverlos rápidamente. La solución de problemas puede ser tan simple como mover un control deslizante para poner en línea un servidor adicional con virtualización bajo demanda.
Productividad
Los microservicios reducen los silos y promueven el trabajo en equipo multifuncional para las fuerzas de trabajo distribuidas y remotas de la actualidad. Se pueden probar de forma independiente mientras los desarrolladores se encargan de otros aspectos. Esto optimiza el control de calidad. Para los ingenieros, las arquitecturas de microservicios permiten la creación de servicios escalables y resilientes que son fáciles de implementar.
Con la entrega continua, las empresas pueden probar las funcionalidades al hacer que diferentes versiones de los servicios estén disponibles para diferentes subconjuntos de sus usuarios. Incluso las empresas que actualmente cuentan con software monolítico están explorando formas de modernizar su pila con microservicios.
Los microservicios aportan los beneficios de la resiliencia y la escalabilidad. Sin embargo, hacer que los pequeños servicios independientes trabajen en conjunto no es tan sencillo.
Estos son algunos aspectos que debe tener en cuenta.
- Complejidad: a medida que aumenta la cantidad de microservicios, pueden volverse más complejos de gestionar y orquestar. La automatización de la infraestructura y la CI/CD son fundamentales.
- Consistencia de los datos: los microservicios trabajan en conjunto dentro de un sistema extenso a la vez que mantienen sus propios datos. Eso significa que habrá datos comunes en múltiples servicios. Los cambios deben replicarse en todos los servicios al consumidor siempre que se produzcan cambios en esos datos comunes.
- Riesgo de falla de comunicación: a diferencia de las llamadas a funciones en proceso, las llamadas a otros servicios pueden fallar a través de la red. Es un sacrificio necesario para obtener la resiliencia y escalabilidad de la arquitectura de microservicios. Para fortalecer la resiliencia, puede aplicar patrones de aislamiento y disyuntores.
Hoy en día, las arquitecturas de microservicios prevalecen en todo el mundo de los negocios: muchas empresas ya están utilizando microservicios o planean hacerlo pronto. Los microservicios ahorran dinero, reducen los dolores de cabeza de la ingeniería y minimizan el tiempo de inactividad.
Para las empresas de todos los tamaños, ahora es el momento. Nunca ha habido un mejor momento para trasladar su arquitectura de una estructura monolítica a una que se basa en microservicios. Le ahorrará dinero a largo plazo, hará que su negocio funcione de manera más eficiente y mantendrá a sus clientes más felices. Los microservicios son la arquitectura del futuro, y es momento de que descubra cómo pueden ayudar a su negocio.
Los microservicios tienen una serie de ventajas comerciales en comparación con los monolitos. Fomentan una relación simbiótica entre los desarrolladores y los líderes de negocios, lo que lleva a obtener mejores resultados. Los microservicios promueven:
- Ritmo de innovación más rápido: su diseño evolutivo facilita el cambio y la actualización de los componentes de la aplicación.
- Mayor estabilidad/resiliencia: los microservicios prácticamente eliminan el tiempo de inactividad porque, a diferencia de las arquitecturas monolíticas, los servicios están separados y los desarrolladores pueden actualizar un componente a la vez.
- Escalabilidad: los equipos de desarrollo pueden trabajar en componentes individuales sin afectar a todo el entorno, lo que les permite mantenerse al día con las demandas comerciales.
- Menores costos y mejores ingresos: los microservicios necesitan menos infraestructura general, minimizan el tiempo de inactividad y mejoran la estabilidad para mejorar la experiencia del cliente. También reducen los plazos desde el prototipo hasta la implementación.
A medida que más empresas y personas confían en las aplicaciones SaaS y aumenta la complejidad del desarrollo de aplicaciones, la necesidad de contar con disponibilidad y escalabilidad es mayor que nunca. Los servicios de asistencia como bases de datos escalables, entrega continua, herramientas de observabilidad y transmisión de datos y eventos también están creciendo rápidamente.
Los ingenieros adquieren continuamente conocimientos que les ayudan a superar estos desafíos. Mientras tanto, la arquitectura de microservicios y la infraestructura de red aún están madurando. Es fácil prever un futuro en el que las aplicaciones de microservicios sean más fáciles de mantener y desarrollar y proporcionen aún más valor a las empresas.
Con GitLab, puede confirmar su código y tener las herramientas que necesita en una aplicación única. Se acabó lo de juntar 10 herramientas diferentes para cada proyecto.
El uso de una plataforma de DevOps para gestionar sus microservicios le ayuda a evitar los silos de información. Aumentar la visibilidad entre los equipos y facilitar los traspasos conduce a un ciclo de vida de DevOps más rápido, al tiempo que garantiza que sus proyectos se implementen y permanezcan estables.
GitLab simplifica la orquestación de microservicios con:
- CI/CD integrada: como señala Fowler, la automatización de la infraestructura mediante la entrega y la implementación continuas es necesaria para los microservicios. La CI/CD integrada de GitLab es ideal para las empresas que buscan aprovechar los microservicios.
- Registro de contenedores integrado y una integración de Kubernetes sólida: si bien la arquitectura de microservicios se puede usar con la tecnología de máquina virtual (VM) heredada, los contenedores y Kubernetes hacen que la creación de microservicios sea significativamente más fácil. GitLab está diseñado para funcionar bien con Kubernetes.
- Supervisión integrada: la supervisión es fundamental para el éxito de una operación. Las capacidades de supervisión de GitLab que aprovechan Prometheus hacen que GitLab sea ideal para microservicios.
- Pipelines de varios proyectos: GitLab admite la ejecución de pipelines con dependencias entre proyectos, lo que facilita la gestión de las interacciones entre diferentes repositorios.
- Soporte de monorepositorio y la capacidad de ejecutar un pipeline solo cuando cambia el código en un directorio específico: esto reduce el tiempo que se pierde en la ejecución de pipelines en todo el repositorio.
- Clústeres de Kubernetes a nivel de grupo: varios proyectos se pueden integrar con un solo clúster de Kubernetes.
GitLab es una plataforma única de DevOps que atrae a los mejores desarrolladores que buscan colaborar y mejorar. A continuación se enumeran algunas de las principales ventajas de convertirse en promotor de GitLab:
- Sin cambios entre aplicaciones: los desarrolladores no necesitan cambiar constantemente de contexto, lo que facilita la concentración y el enfoque en la tarea. Además, puede vincular fácilmente los tickets con el trabajo, aumentar la productividad y eliminar los principales problemas de los ingenieros de software.
- Reducir su carga de trabajo: GitLab facilita la automatización de tareas para que pueda centrarse en actividades más exigentes y basadas en resultados. Las tareas manuales repetitivas le quitan la alegría a la jornada laboral de un desarrollador. Automatice las tareas para mejorar la satisfacción y la productividad en el trabajo.
- Colaboración y transparencia: la colaboración y la transparencia son ventajas clave de la plataforma de GitLab. La transparencia entre el desarrollador y el cliente facilita la colaboración para lograr soluciones rápidas y fáciles y menos comunicación.
- Ser parte de la comunidad: todos los desarrolladores son libres de contribuir al núcleo de código abierto de GitLab para mejorar la aplicación. Es una comunidad cálida, amigable y altamente receptiva que da la bienvenida a nuevos miembros de la comunidad y los ayuda a aprender lo que necesitan.
- Aprender prácticas de desarrollo de software de vanguardia: la codificación y el desarrollo de aplicaciones es uno de los campos de más rápido crecimiento en un mundo cada vez más acelerado. GitLab actualiza a su comunidad sobre los últimos desarrollos y los ayuda a aprender las prácticas recomendadas.
Inicie su transformación a Cloud Native (Nativo de la nube)
Compile, pruebe, implemente y supervise su código desde una única aplicación.
Descubra cómo Ask Media Group migró de los servidores locales a la nube de AWS con las herramientas e integraciones de GitLab. Únase a nosotros y aprenda de su experiencia.
Recursos relacionados
Video
Dominar el caos: una guía de microservicios de Netflix
Video
La culpa pasa del monolito a los microservicios
¿Todo listo para comenzar?
Descubra lo que su equipo puede hacer con una plataforma de DevSecOps unificada.