Microservicios

¿Qué son los microservicios?

Es una forma de llevar a cabo el desarrollo del software. Una aplicación con arquitectura basada en microservicios estará compuesta por un conjunto de pequeños servicios independientes entre si.

Cada microservicio estará asociado a un área del negocio de la aplicación y se ejecutará de forma autónoma en su propio proceso (en la misma maquina que el resto o en una maquina dedicada).

Arquitectura monolítica vs microservicios

La mejor forma de entender este concepto es comparandolo con la clásica arquitectura monolítica.

Arquitectura monolítica

Todas las funcionalidades corren en el mismo proceso, por lo que no depende de ningún componente externo para funcionar.

El escalado se realiza de forma atómica, replicando la totalidad de la aplicación en diferentes máquinas.

La más mínima modificación en alguna de las funcionalidades implicaría el despliegue de una versión nueva de todo el conjunto.

Arquitectura de microservicios

Cada funcionalidad corre en un proceso independiente, por lo que tendrán múltiples dependencias externas.

El escalado se realiza a nivel de microservicio según se requiera.

La modificación de un microservicio solo supone el relanzado de ese módulo en concreto, sin afectar al resto.

Ventajas e inconvenientes

Ventajas

Menor acoplamiento: Al tratarse de un servicio encapsulado con una funcionalidad bien delimitada, se pueden desplegar modificaciones sin afectar al resto de la aplicación. Incluso, se podrá implementar cada microservicio en un lenguaje de programación diferente.

Equipos de trabajo reducidos: Al tratarse de una pequeña parte independiente de la aplicación total, la cantidad de personas implicadas en su desarrollo se verá reducida.

Despliegue inmediato: Esta arquitectura permite el uso de contenedores (como Docker), lo que simplifica considerablemente el tiempo de despliegue. Además, cada microservidio es independiente del resto, por lo que se podrá desplegar de forma individual sin necesidad de desplegar el conjunto completo que compone la aplicación.

Mantenimiento y expansión sencillos: El código implicado en cada microservicio debe ser simple y claro, por lo que su modificación y mantenimiento posteriores resultarán fáciles y rápidos.

Escalabilidad: Cada microservicio se podrá escalar de forma independiente, por lo que no será necesario replicar la totalidad del código si solo se necesita una funcionalidad específica.

Inconvenientes

Planificación más costosa: Determinar los microservicios en los que se va a fragmentar una aplicación es una tarea que puede suponer varias horas.

Pruebas y testeo complejos: Al tratarse de un sistema distribuido, las pruebas pueden resultar más complejas.

Configuración complejas: Es importante gestionar aspectos como el balanceo de carga, la latencia de la red, la tolerancia a fallos, etc.

Mayor cantidad de recursos: En este tipo de arquitectura el consumo de memoria es mayor y, puesto que los microservicios suelen correr en máquinas independientes, la cantidad de máquinas implicadas en su despliegue también será mayor.

Casos de éxito

Grandes empresas como Netflix, Amazon, Twitter, Ebay o Uber apostaron por los microservicios. Al tratarse de grandes empresas con servicios extensos y complejos, una estructura monolítica implicaba un mantenimiento, coste y esfuerzo elevados. La división de sus arquitectura en microservicios les supuso grandes ventajas.

Deja una respuesta

Subir ↑