Close

Microservices: understanding what it is and its benefits

No hace mucho tiempo, el método por excelencia para crear aplicaciones de software era usar una arquitectura monolítica, que era una única unidad autónoma. Este enfoque funcionó bien para muchos desarrolladores hasta que las aplicaciones aumentaron en complejidad. Cuando se modifica una pequeña sección de código en un sistema monolítico, es necesario recompilar todo el sistema, ejecutar todas las pruebas en él e implementar una versión completamente nueva de la aplicación.

Luego llegaron los microservicios, un enfoque que consiste en dividir los sistemas de software en unidades más pequeñas que se desarrollan e implementan de forma autónoma. La arquitectura de microservicios fue impulsada por el movimiento DevOps, cuyo objetivo es entregar con frecuencia actualizaciones, como nuevas funciones, correcciones de errores y mejoras de seguridad. También dio pie, en muchos casos, a que las empresas reescribieran aplicaciones antiguas utilizando lenguajes de programación modernos y actualizaciones de una pila tecnológica.

Los microservicios son un conjunto de unidades pequeñas que entregan e implementan aplicaciones grandes y complejas de forma continua.

¿Qué son los microservicios?


Una arquitectura de microservicios, o simplemente "microservicios", es un concepto para crear una aplicación en forma de una serie de servicios que se pueden implementar de forma independiente, están descentralizados y se desarrollan de forma autónoma. Estos servicios están poco vinculados, se pueden implementar de forma independiente y se mantienen fácilmente. Si bien una aplicación monolítica se crea como una sola unidad indivisible, los microservicios dividen esa unidad en una colección de unidades independientes que contribuyen a un todo más amplio. Los microservicios son una parte integral de DevOps, ya que son la base de las prácticas de entrega continua que permiten a los equipos adaptarse rápidamente a los requisitos de los usuarios.

Ilustración de microservicios

Un microservicio es un servicio web responsable de una parte de la lógica del dominio. Se combinan varios microservicios para crear una aplicación, y cada uno de ellos proporciona una parte de la funcionalidad de un dominio. Los microservicios interactúan entre sí mediante API, como REST o gRPC, pero no conocen el funcionamiento interno de los demás servicios. Esta armoniosa interacción entre microservicios es una arquitectura de microservicios.

Con una arquitectura de microservicios, los desarrolladores se pueden organizar en equipos más pequeños especializados en servicios distintos, con implementaciones desacopladas y pilas diferentes. Por ejemplo, Jira funciona con varios microservicios, cada uno de los cuales proporciona funciones específicas, como buscar incidencias, ver detalles de incidencias, comentarios, transiciones de incidencias y muchas otras.

Características de los microservicios


No existe una definición formal de arquitectura de microservicios, pero hay algunos patrones o características comunes que es importante conocer.

En una arquitectura de microservicios, cada componente se puede desarrollar, implementar, operar, cambiar y volver a implementar sin afectar al funcionamiento de otros servicios o a la integridad de una aplicación.

Ventajas de los microservicios


Microservices provide many advantages. They simplify development and project management. Sometimes, they may eliminate the need for separate operations teams since developers can handle operations for the microservices they build. 

Some other benefits of microservices include:

Ilustración de balanza

Escalado flexible

Como los microservicios están distribuidos por definición y se pueden implementar en clústeres, permiten escalar de forma horizontal y dinámica más allá de los límites de los servicios. Si un microservicio está alcanzando su capacidad de carga, se pueden implementar rápidamente nuevas instancias de ese servicio al clúster que lo acompaña para aliviar la presión.

Ilustración de metodología ágil

Agilidad

Como los equipos pequeños e independientes suelen crear un servicio dentro de los microservicios, esto los anima a adoptar prácticas de metodología ágil. Los equipos pueden trabajar de forma independiente y moverse rápidamente, lo que acorta el ciclo de desarrollo.

Ilustración de caja de herramientas

Flexibilidad tecnológica

Las arquitecturas de microservicios no tienen por qué seguir un enfoque establecido con una cadena de herramientas, sino que dan a los equipos la libertad de seleccionar las herramientas que desean.

Ilustración de bloques apilados

Publicaciones frecuentes

Una de las principales ventajas de los microservicios son los ciclos de publicación frecuentes y más rápidos. Como elemento clave de la integración continua y la entrega continua (CI/CD), los microservicios permiten a los equipos experimentar con nuevas funciones y revertirlas si algo no funciona. Esto facilita la actualización del código y acelera el tiempo de salida al mercado de nuevas funciones.

Desafíos de los microservicios


Microservices-based architecture has many benefits, but it also comes with challenges. 

One challenge of microservices is that the independent services generate their logs. This is a disadvantage compared to monoliths' centralized logs, which provide a single source of truth for developers and operations teams. Monitoring and infrastructure management are also more complicated since many moving pieces exist. Testing and debugging are challenging because, unlike monoliths, no integrated development environment (IDE) exists.

Atlassian's Compass can help with all these challenges. Compass facilitates collaboration and allows companies to manage the complexities of distributed architectures as they scale. It does this by bringing the disconnected information together in a central, searchable location.

Expansión descontrolada

Pasar de una arquitectura monolítica a los microservicios conlleva una mayor complejidad. Hay más servicios en más lugares y creados por varios equipos. Esto hace que sea difícil determinar cómo se relacionan los diferentes componentes entre sí, quién es el propietario de un componente en particular y cómo evitar causar un impacto negativo en los componentes dependientes. Si no se gestiona la expansión, se reduce la velocidad de desarrollo y el rendimiento operativo. A medida que un sistema crece, requiere un equipo de operaciones experimentado para gestionar las reimplementaciones constantes y los cambios frecuentes en la arquitectura.

Falta de claridad en cuanto a la propiedad

Con una arquitectura de microservicios, es más difícil saber quién es el propietario de cada componente. Un equipo de DevOps puede ejecutar una combinación de API, bibliotecas de componentes, herramientas de monitorización e imágenes de Docker para que los usuarios implementen una aplicación. Es importante tener clara cierta información sobre los componentes, como sus propietarios, recursos y relaciones cambiantes con otros componentes. Es necesario tener una comunicación y coordinación precisas entre numerosos equipos para que todos los involucrados puedan encontrar fácilmente los conocimientos necesarios para entender un producto.

Costes de infraestructura exponenciales

Cada nuevo microservicio que se añade a la implementación de producción viene con sus propios costes asociados al conjunto de pruebas, manuales de estrategias de implementación, infraestructura de alojamiento, herramientas de monitorización, etc.

Sobrecarga organizativa añadida

Se necesita un nivel adicional de comunicación y colaboración para coordinar las actualizaciones e interfaces entre los equipos de arquitectura de microservicios.

Depuración

Puede resultar difícil depurar una aplicación que contiene varios microservicios, cada uno con su propio conjunto de registros. Un solo proceso empresarial puede ejecutarse en varias máquinas en distintos momentos, lo que complica aún más la depuración.

Respuesta ante incidencias

Es importante contar con documentación de respuesta ante incidentes de microservicios que incluya información como quién usa el microservicio, dónde y cómo se implementó, y con quién contactar cuando surgen problemas.

Microservicios y DevOps: como uña y carne


Dado el aumento de la complejidad y las dependencias de los microservicios, las prácticas de DevOps de automatización de la implementación, la monitorización y el ciclo de vida se consideran una parte integral de las arquitecturas de microservicios. Por eso, los microservicios a menudo se consideran el primer paso para adoptar una cultura de DevOps, que permite:

  • Automatización
  • Mayor escalabilidad
  • Facilidad de gestión
  • Agilidad
  • Entrega e implementación más rápidas

Tecnologías y herramientas clave para una arquitectura de microservicios


Un contenedor es simplemente el paquete de una aplicación y todas sus dependencias, lo que permite implementarlo de manera fácil y coherente. Como los contenedores no tienen la sobrecarga de su propio sistema operativo, son más pequeños y ligeros que las máquinas virtuales tradicionales. Pueden activarse y desactivarse más rápidamente, por lo que son perfectos para los servicios más pequeños que se encuentran en las arquitecturas de microservicios.

Con la proliferación de servicios y contenedores, es esencial coordinar y gestionar grupos numerosos de contenedores. Docker es una popular plataforma de contenedorización y un tiempo de ejecución de contenedores que ayuda a los desarrolladores a crear, implementar y ejecutar contenedores. No obstante, es difícil ejecutar y gestionar contenedores a gran escala solo con Docker. Kubernetes y otras soluciones como Docker Swarm, Mesos o HashiCorp Nomad ayudan a llevar a cabo la contenedorización a gran escala.

La contenedorización y la implementación de contenedores son un nuevo patrón de infraestructura distribuida. Docker y Kubernetes empaquetan un servicio en un contenedor completo que se puede implementar y descartar rápidamente. Estas herramientas de infraestructura complementan la arquitectura de microservicios. Los microservicios se pueden almacenar en contenedores, así como implementar y gestionar fácilmente mediante un sistema de gestión de contenedores.

¿Qué son los microservicios?


Una arquitectura de microservicios, o simplemente "microservicios", es un concepto para crear una aplicación en forma de una serie de servicios que se pueden implementar de forma independiente, están descentralizados y se desarrollan de forma autónoma. Estos servicios están poco vinculados, se pueden implementar de forma independiente y se mantienen fácilmente. Si bien una aplicación monolítica se crea como una sola unidad indivisible, los microservicios dividen esa unidad en una colección de unidades independientes que contribuyen a un todo más amplio. Los microservicios son una parte integral de DevOps, ya que son la base de las prácticas de entrega continua que permiten a los equipos adaptarse rápidamente a los requisitos de los usuarios.

Ilustración de microservicios

Un microservicio es un servicio web responsable de una parte de la lógica del dominio. Se combinan varios microservicios para crear una aplicación, y cada uno de ellos proporciona una parte de la funcionalidad de un dominio. Los microservicios interactúan entre sí mediante API, como REST o gRPC, pero no conocen el funcionamiento interno de los demás servicios. Esta armoniosa interacción entre microservicios es una arquitectura de microservicios.

Con una arquitectura de microservicios, los desarrolladores se pueden organizar en equipos más pequeños especializados en servicios distintos, con implementaciones desacopladas y pilas diferentes. Por ejemplo, Jira funciona con varios microservicios, cada uno de los cuales proporciona funciones específicas, como buscar incidencias, ver detalles de incidencias, comentarios, transiciones de incidencias y muchas otras.

El futuro de los microservicios


What tools do people commonly use in microservices?

Businesses often use containerization tools such as Kubernetes and Docker. They also frequently use API gateways between microservices and their clients. These gateways perform API traffic functions such as authentication, access control, and load balancing.

How do microservices differ from monolithic architecture?

Monoliths are large codebases that function as one system. They require system downtime for updates and debugging. Microservices architectures are distributed applications with smaller, independent chunks of functionality. Developers can upgrade, improve, and debug these modules without taking the entire application offline. This simplifies scaling and aids development velocity.

How do microservices impact DevOps?

Those who understand DevOps know that continuous integration and continuous delivery (the DevOps CI/CD pipeline) are the mainstays of DevOps methodologies. The modular nature of microservices aligns perfectly with this approach. Microservices empower developers to swiftly create, test, and deploy small, frequent releases.

Join the Atlassian Community for more microservices articles and discussions.

Gestiona tus microservicios con Compass

Si trabajas con una arquitectura de microservicios, Atlassian Compass se encarga de gestionar la complejidad de las arquitecturas distribuidas que se escalan. Es una plataforma de experiencia extensible para desarrolladores que reúne la información suelta sobre los procesos de ingeniería y la colaboración en el equipo en un lugar centralizado que permite hacer búsquedas. Además de ayudarte a controlar la expansión de tus microservicios con el Catálogo de componentes, Compass puede ayudarte a establecer prácticas recomendadas y evaluar el estado de tu software con cuadros de mandos, así como ofrecerte datos e información útil en toda tu cadena de herramientas de DevOps mediante extensiones creadas en la plataforma Atlassian Forge.

Ilustración de microservicios en Compass