PROGRAMACION

¿Qué es la arquitectura de microservicios?

18 sep. 2019|Lectura de 4 minutos

La arquitectura de microservicios es empleada por empresas como Netflix y Google. En este artículo aprenderás qué problemas resuelve y porque deberías usar esta arquitectura.

Almacenamiento en AWS

Curso: Almacenamiento en AWS

Aprende a usar servicios de almacenamiento, como S3, en Amazon Web Services

La arquitectura de microservicios se ha hecho bastante conocida en los últimos años, es empleada por grandes empresas como Netflix, Google, Twitter, PayPal entre otras.

¿Porque usar esta arquitectura de microservicios? ¿Que problemas resuelve?, Para saber esto hay que empezar a hablar sobre la arquitectura monolítica, que es la que normalmente se emplea cuando se empieza a desarrollar una aplicación.

Arquitectura monolítica

Esta arquitectura se enfoca en desarrollar una aplicación como una sola unidad, por ejemplo, imaginemos una plataforma como EDteam.

Arquitectura monolitica

Como vemos en la imagen, la aplicación cuenta con funcionalidades para manejar los usuarios, pagos, cursos y una interfaz web. Con esta aplicación los usuarios pueden entrar a la plataforma, iniciar sesión, comprar cursos, ver los cursos y la aplicación responderá de una forma u otra según se haya programado, pero las diferentes funcionalidades, se empaquetan en un único ejecutable, y es por esto que se les llama aplicaciones monolíticas, toda la lógica está en una sola aplicación.

Arquitectura de microservicios

Esta arquitectura se enfoca en desarrollar una aplicación de software como una serie de pequeños servicios, cada uno ejecutándose de forma autónoma y comunicándose entre sí, por ejemplo: a través de APIs.

arquitectura microservicios

Como vemos en la imagen, en esta arquitectura cada funcionalidad sería una aplicación independiente que corre en su propio proceso a diferencia de una arquitecta monolítica donde las funcionalidades están empaquetadas en una sola aplicación.

Escalar la aplicación

Con el tiempo empezaremos a tener más concurrencia de usuarios y posiblemente nuestra aplicación no lo pueda soportar, entonces tendremos que escalar la aplicación para poder soportar una mayor cantidad de usuarios en la plataforma.

Arquitectura monolítica

Para escalar una aplicación con esta arquitectura tendríamos que replicar la aplicación en tantos servidores como sea necesario y utilizar un balanceador de cargas el cual es un programa que se encarga de balancear las solicitudes que llegan de los clientes a los servidores usando algún algoritmo.

escalado monolitico

Tendríamos que replicar toda la aplicación, aunque la sobrecarga se concentre en el módulo de usuarios, además, si necesitamos hacer un cambio en la aplicación, tendríamos que subir esos cambios a todos los servidores.

Arquitectura de microservicios

En esta arquitectura cada funcionalidad es una aplicación independiente. Solo tendríamos que replicar aquellos servicios que necesiten más recursos, en nuestro ejemplo sería el servicio de Usuarios. Si necesitamos hacer un cambio en un servicio, solo se subirían los cambios a los servidores donde tengamos el servicio.

Escalado microservicios

Características de la arquitectura de microservicios

  • Cada microservicio se puede desplegar de forma independiente sin afectar a los demas.
  • Es más fácil de escalar a nivel de software, ya que en lugar de replicar toda la aplicación, replicaremos los servicios que requieran más recursos.
  • Podemos utilizar diferentes lenguajes de programación y base de datos dentro de cada microservicio.
  • El uso de una puerta de enlace de API. Los clientes no llamarían directamente a los microservicios, en su lugar, llaman a la puerta de enlace que reenvía la llamada a los servicios apropiados.

Desafios:

  • Nuestra aplicación va a llegar a un punto donde tendremos muchos microservicios con diferentes lenguajes, base de datos por lo que la administración llegara a ser compleja.
  • El uso de muchos servicios trae problemas en la latencia de la red, por ejemplo, el cliente hace una petición al servicio A, pero para que el servicio A le conteste primero tiene que hacer una petición al B y el B al C, y así sucesivamente.
  • Es posible que varios servicios se actualicen en cualquier momento, por lo tanto, sin un cuidadoso diseño, podrían surgir problemas con la compatibilidad con versiones anteriores o posteriores.

 

Hemos visto que la arquitectura de microservicios nos ofrece beneficios y resuelve algunos problemas que nos encontramos en una arquitectura monolítica, pero también introduce cierta complejidad al tener más servicios que administrar. Lo ideal sería empezar con una aplicación monolítica e ir migrando a una de microservicios (si es necesario).