BLOG

Ocho razones por las que el futuro del escalado de contenedores es la malla de servicios.

Miniatura de Lori MacVittie
Lori MacVittie
Publicado el 23 de abril de 2018

Los microservicios son excelentes para la velocidad del desarrollo, pero la complejidad de estas arquitecturas radica en la comunicación de servicio a servicio de la que dependen los microservicios.

En este momento, existen al menos tres opciones arquitectónicas diferentes para escalar microservicios en contenedores . Cada uno de ellos se basa, como todas las escalas, en un equilibrador de carga basado en proxy. Cada uno tiene su propio conjunto de desafíos. Varios de ellos se deben al simple hecho de que la escalabilidad dentro de entornos de contenedores a menudo depende de tablas IP y su fluidez limitada con cualquier cosa por encima de las capas de red tradicionales (es decir, IP y TCP).

Todos estos servidores proxy proporcionan la misma funcionalidad básica: escalar los servicios que se distribuyen en todo el entorno de contenedores. Lo loco es que los servicios son construcciones efímeras. En realidad no existen, excepto en los archivos de recursos (configuración) que los definen. El problema de las soluciones de escalamiento basadas en tablas IP es que estos servicios son construcciones de capa 7 (HTTP), que a menudo sirven como “backend” para una única llamada API en lugar de una aplicação completa.

Las aplicações, tal como las conocemos, pueden parecer desde el lado del cliente una construcción única y holística. En realidad, se componen de muchos microservicios diferentes (y distribuidos). Algunos de estos servicios son puramente internos, diseñados para ser utilizados por otros servicios. Lo que significa mucha comunicación de servicio a servicio dentro del entorno contenedorizado.

Necesita enrutamiento L7 (HTTP) en estos entornos porque todo son API sobre HTTP/HTTP2. También necesita una postura de seguridad consistente, autenticación y aplicación de políticas. Nada de eso sucederá con un enfoque basado en tablas IP.

Como suele ocurrir, el código abierto viene al rescate. Han surgido varias mallas de servicios de código abierto para abordar esos desafíos. Como es el caso de muchos proyectos de código abierto, estas mallas de servicios (como Istio ) se están ampliando mediante proyectos como Aspen Mesh con capacidades (y soporte) que brindan soluciones de nivel empresarial.

Estos esfuerzos ampliados se centran en resolver los ocho desafíos que enfrentan las organizaciones cuando implementan microservicios en contenedores.

Estos son los ocho desafíos y cómo una malla de servicios puede superarlos:

  1. Construir: este es uno de los desafíos: una malla de servicios tiene poco que ofrecer más allá de integrar políticas con cadenas de herramientas CI/CD y garantizar un modelo declarativo de configuración para que la malla de servicios pueda tratarse como infraestructura como código.
  2. Prueba e integración: una malla de servicios puede ayudar en este caso al garantizar una política coherente entre desarrollo, prueba, producción, etc. Algunas organizaciones buscan eliminar por completo las implementaciones por etapas. Este enfoque funcionó bien en el pasado, pero es uno de los obstáculos que introduce latencia en el proceso de implementación.  Estas personas buscan una forma de implementar servicios directamente en producción y emplear mecanismos de dirección de tráfico y reversión para lidiar con fallas.  
  3. Control de versiones: Service Mesh puede actuar como una puerta de enlace de API básica para enrutar el tráfico en función de variables como la versión de API e incluso traducir versiones para ayudar durante los períodos de transición de versiones de API. Las actualizaciones de clientes, especialmente para aplicaciones del sector de consumo, no siempre se pueden forzar, lo que implica que se reciben solicitudes de múltiples versiones. Una malla de servicios puede traducir solicitudes de versiones de API anteriores a las más recientes para ayudar a reducir los costos y la carga de mantener múltiples versiones de la misma API.
  4. Implementar: con su capacidad de hablar HTTP con fluidez, una malla de servicios es un excelente lugar para habilitar implementaciones Blue/Green , pruebas canarias y direccionamiento de tráfico.
  5. Registro: el registro distribuido siempre es un problema y es aún más problemático en entornos donde las instancias viven durante períodos de tiempo muy variables. Una malla de servicios ofrece una ubicación común y centralizada para implementar el registro, así como la capacidad de realizar funciones como el seguimiento de solicitudes.
  6. Monitoreo – En el corazón de la escala se encuentra el monitoreo. Si bien las aplicações pueden implementar ciertas funciones (reintentos, interrupción de circuitos, etc.) para lidiar con la falla inevitable de un servicio, esto coloca una carga sobre la aplicação que no debería tener que asumir. Una malla de servicios asume la carga de la comunicación entre servicios y proporciona un lugar para la supervisión. El objetivo es centrarse en MTTD y MTTR en producción, porque ejecutar en producción es difícil y el fracaso es inevitable.
  7. Depuración: cuanto más complejo sea un sistema, más difícil será depurarlo. Una malla de servicios puede ayudar en el análisis de causa raíz, brindar estadísticas y notificaciones previas a fallas mediante análisis y telemetría, y poner en cuarentena contenedores en lugar de matarlos para que se puedan examinar en profundidad. Esto es particularmente útil en casos donde el fallo se debe a pérdidas de memoria lentas.
  8. Redes: las redes siguen siendo fundamentales para los contenedores, quizás más que en entornos menos complejos. El deseo de abstraer servicios de esa red significa que hay muchas partes móviles que no desea implementar en cada servicio: Descubrimiento de servicios, gestión de certificados y SSL, disyuntores, reintentos, monitorización del estado, etc. El objetivo de los microservicios era “codificar localmente, codificar en pequeño”. La introducción de la necesidad de incluir funciones relacionadas con la red sobrecarga los microservicios e introduce una deuda arquitectónica y técnica adicional. Una malla de servicios asume esas funciones y ofrece la escala y seguridad deseadas sin ralentizar el desarrollo.

La malla de servicios es una evolución emocionante que combina los principios modernos de la nube y los contenedores con las bases sólidas de la escala. Se espera que la malla de servicios gane terreno a medida que en 2018 siga aumentando la adopción de contenedores y la demanda de escala y soporte de nivel empresarial.