Arquitectura de Microservicios y Docker

  • Escalabilidad
  • Portabilidad
  • Flexibilidad
  • Seguridad

Los microservicios están aquí para quedarse.

Separar un complejo conjunto de operaciones (conocido como arquitectura monolítica*) en partes pequeñas y menos complejas** tiene multitud de ventajas:

Facilita el cambio de una parte de la aplicación sin afectar a otras (bueno para desarrolladores)

No se necesita que se reinicie toda la aplicación cuando algo cambia (bueno para sysadmins)

Permite escalar cada servicio individualmente según sus necesidades.

En vez de necesitar grandes servidores, los microservicios se pueden desplegar en pequeños servidores con los recursos mínimos necesarios.

Añade un extra de flexibilidad, ya que cada microservicio puede ser desarrollado en el lenguaje más adecuado para las operaciones que realiza el servicio

Proporciona un plus de seguridad porque si diferentes partes están aisladas unas de otras, un atacante que pueda hackear un servicio no obtiene el control total de la aplicación.

monolithic-architecture

*Arquitectura monolítica

microservices-architecture

**Pequeñas partes menos complejas

Pero no todo son ventajas, la arquitectura de microservicios también tienen algunos inconvenientes:

  • Es difícil saber que host está corriendo ciertos servicios, ya que pueden estar repartidos entre varios servidores.
  • La cantidad de hosts crecerá rápidamente a medida que la arquitectura de microservicios se amplíe, lo que dará como resultado un sobre aprovisionamiento, mayores costos y complejidad de administración
  • Si se utilizan diferentes lenguajes de programación, cada servicio necesitara sus propias librerías y frameworks, resultando los despliegues más complejos

Y para solucionar todo esto usamos…

logo docker

Docker puede ayudarte a resolver muchos de estos desafíos:

Los contenedores hacen uso de las interfaces del kernel que permiten que varios contenedores compartan el mismo kernel mientras se ejecutan en total aislamiento uno del otro. Este aislamiento hace que la implementación de código de microservicio desarrollado usando diferentes lenguajes y frameworks sea muy fácil.

 

La portabilidad de los contenedores hace que la implementación de microservicios sea muy sencilla. Lanzar una nueva versión de un servicio es tan simple como detener el contenedor en ejecución e iniciar uno nuevo basado en una imagen de Docker utilizando la última versión del código de servicio. Todos los otros contenedores que se ejecutan en el host no se verán afectados por este cambio

 

Si un servicio determinado no utiliza todos los recursos (CPU, RAM) en un host, se pueden iniciar servicios adicionales en contenedores en ese servidor que hacen uso de los recursos inactivos, lo que ayuda con la utilización eficiente de los recursos en su plataforma

 

En resumen, el uso de una arquitectura de microservicios con contenedores linux aborda la necesidad de hacer un mejor uso de los recursos informáticos como la necesidad de mantener aplicaciones web cada vez más complejas

El equipo de Geko tiene mucha experiencia con Docker y el ciclo de vida de los contenedores, podemos ayudarte con:

  • Entornos de desarrollo basado en Docker
  • Orquestación de contenedores (Kubernetes o Docker Swarm)
  • Construcción y despliegue de contenedores (CI y CD)
  • Migración de entornos monolíticos a microservicios
  • Optimización de la plataforma