¿Qué es una malla de servicios?
Una malla de servicios es una capa de software que gestiona toda la comunicación entre los servicios de las aplicaciones. Esta capa se compone de microservicios en contenedores. A medida que las aplicaciones escalan y aumenta la cantidad de microservicios, supervisar el rendimiento de los servicios se torna complicado. Para administrar las conexiones entre servicios, una malla de servicios ofrece nuevas características, como la supervisión, el registro, el rastreo y el control del tráfico. Es independiente del código de cada servicio, con lo que puede funcionar a través de los límites de la red y con múltiples sistemas de administración de servicios.
¿Por qué necesita una malla de servicios?
En la arquitectura de aplicaciones moderna, puede crear aplicaciones como un conjunto de microservicios pequeños que se pueden implementar de forma independiente. Diferentes equipos pueden crear microservicios individuales y elegir sus lenguajes y herramientas de codificación. Sin embargo, los microservicios deben comunicarse para que el código de la aplicación funcione correctamente.
El rendimiento de las aplicaciones depende de la velocidad y la resiliencia de la comunicación entre los servicios. Los desarrolladores deben supervisar y optimizar la aplicación en todos los servicios, pero es difícil obtener visibilidad debido a la naturaleza distribuida del sistema. A medida que las aplicaciones escalan, la administración de las comunicaciones se hace aún más compleja.
Hay dos factores principales que impulsan la adopción de redes de servicios, que detallamos a continuación.
Más información sobre los microservicios »
Observabilidad a nivel de servicio
A medida que se implementan más cargas de trabajo y servicios, a los desarrolladores les resulta difícil entender cómo funciona todo en conjunto. Por ejemplo, los equipos de servicio quieren saber cuáles son sus dependencias ascendentes y descendentes. Quieren una mayor visibilidad de la forma en que los servicios y las cargas de trabajo se comunican en la capa de aplicación.
Control de nivel de servicio
Los administradores quieren controlar qué servicios se comunican entre sí y qué acciones llevan a cabo. Quieren un control y una gobernanza detallados sobre el comportamiento, las políticas y las interacciones de los servicios dentro de una arquitectura de microservicios. La aplicación de las políticas de seguridad es fundamental para el cumplimiento de la normativa.
¿Cuáles son los beneficios de una malla de servicios?
Una malla de servicios proporciona una capa de infraestructura dedicada y centralizada que gestiona las complejidades de la comunicación entre servicios dentro de una aplicación distribuida. A continuación, le mostraremos varios beneficios de la malla de servicios.
Detección de servicios
Las mallas de servicios proporcionan una función de detección de servicios automatizada, lo que reduce la carga operativa de la administración de los puntos de conexión de servicio. Utilizan un registro de servicios para descubrir y hacer un seguimiento dinámico de todos los servicios dentro de la malla. Los servicios se pueden encontrar y comunicar entre sí sin problemas, independientemente de su ubicación o de la infraestructura subyacente. Puede escalar rápidamente con la implementación de nuevos servicios, en caso de que sea necesario.
Balanceador de carga
Las mallas de servicios utilizan varios algoritmos (como el método de turno rotativo, conexiones mínimas o el equilibrio de carga ponderado) para distribuir las solicitudes entre varias instancias de servicio de forma inteligente. El equilibrio de carga mejora el uso de los recursos y garantiza una alta disponibilidad y escalabilidad. Puede optimizar el rendimiento y evitar los cuellos de botella en la comunicación a través de la red.
Administración del tráfico
Las mallas de servicios ofrecen características avanzadas de administración del tráfico, que proporcionan un control detallado del enrutamiento de las solicitudes y el comportamiento del tráfico. A continuación se muestran algunos ejemplos.
División del tráfico
Puede dividir el tráfico entrante entre diferentes versiones o configuraciones del servicio. La malla dirige parte del tráfico a la versión actualizada, lo que permite una implementación controlada y gradual de los cambios. Esto proporciona una transición suave y minimiza el impacto de los cambios.
Creación de reflejos de solicitudes
Puede duplicar el tráfico a un servicio de prueba o supervisión para analizarlo sin afectar el flujo de solicitudes principal. Cuando crea reflejos de las solicitudes, obtiene información sobre cómo el servicio gestiona solicitudes particulares sin afectar al tráfico de producción.
Implementaciones de valores controlados
Puede dirigir un pequeño subconjunto de usuarios o tráfico a una nueva versión del servicio, mientras que la mayoría de los usuarios siguen utilizando la versión estable existente. Con una exposición limitada, puede experimentar con el comportamiento y rendimiento de la nueva versión en un entorno real.
Seguridad
Las mallas de servicios proporcionan características de comunicación seguras, como el cifrado, la autenticación y la autorización TLS (mTLS) mutuo. El TLS mutuo permite la verificación de identidad en la comunicación de servicio a servicio. Ayuda a garantizar la confidencialidad e integridad de los datos mediante el cifrado del tráfico. También puede aplicar políticas de autorización para controlar qué servicios acceden a puntos de conexión específicos o llevan a cabo acciones específicas.
Supervisión
Las mallas de servicios ofrecen características integrales de supervisión y observabilidad para obtener información sobre el estado, rendimiento y comportamiento de los servicios. La supervisión también asiste con la solución de problemas y la optimización del rendimiento. Estos son algunos ejemplos de características de supervisión que puede usar:
- Recopile métricas como la latencia, las tasas de error y el uso de recursos para analizar el rendimiento general del sistema
- Haga un rastreo distribuido para ver la ruta completa y el tiempo de las solicitudes en varios servicios
- Capture los eventos del servicio en los registros con fines de auditoría, depuración y cumplimiento
¿Cómo funciona una malla de servicios?
Una malla de servicios elimina la lógica que rige la comunicación entre servicios de los servicios individuales y abstrae la comunicación a su propia capa de infraestructura. Utiliza varios proxies de red para dirigir y rastrear la comunicación entre los servicios.
Un proxy actúa como puerta de enlace intermediaria entre la red de la organización y el microservicio. Todo el tráfico hacia y desde el servicio se dirige a través del servidor proxy. Los proxies individuales a veces se denominan sidecares porque funcionan por separado, pero, lógicamente, están al lado de cada servicio. En conjunto, los proxies forman la capa de malla de servicios.
Hay dos componentes principales en la arquitectura de malla de servicios: el plano de control y el plano de datos.
Plano de datos
El plano de datos es el componente de manejo de datos de una malla de servicios. Incluye todos los proxies de sidecar y sus funciones. Cuando un servicio quiere comunicarse con otro servicio, el proxy del sidecar lleva a cabo las siguientes acciones:
- El sidecar intercepta la solicitud.
- Encapsula la solicitud en una conexión de red independiente.
- Establece un canal seguro y cifrado entre los proxies de origen y de destino.
Los proxies de sidecar gestionan la mensajería de bajo nivel entre servicios. También implementan características, como la interrupción del circuito y los reintentos de solicitud, para mejorar la resiliencia y evitar la degradación del servicio. La funcionalidad de malla de servicios, como el equilibrio de carga, la detección de servicios y el enrutamiento del tráfico, se implementa en el plano de datos.
Plano de control
El plano de control actúa como la capa central de administración y configuración de la malla de servicios.
Con el plano de control, los administradores pueden definir y configurar los servicios dentro de la malla. Por ejemplo, pueden especificar parámetros como puntos de conexión de servicio, reglas de enrutamiento, políticas de equilibrio de carga y configuraciones de seguridad. Una vez definida la configuración, el plano de control distribuye la información necesaria al plano de datos de la malla de servicios.
Los proxies utilizan la información de configuración para decidir cómo gestionar las solicitudes entrantes. También pueden recibir cambios de configuración y adaptar su comportamiento de forma dinámica. Puede llevar a cabo cambios en tiempo real en la configuración de la malla de servicios sin reinicios ni interrupciones del servicio.
Las implementaciones de malla de servicios suelen incluir las siguientes capacidades en el plano de control:
- Registro de servicios que hace un seguimiento de todos los servicios dentro de la malla
- Detección automática de nuevos servicios y eliminación de servicios inactivos
- Recopilación y agregación de datos de telemetría, como métricas, registros e información de seguimiento distribuido
¿Qué es Istio?
Istio es un proyecto de malla de servicios de código abierto diseñado para funcionar principalmente con Kubernetes. Kubernetes es un sistema de orquestación de contenedores de código abierto que se usa para implementar y administrar aplicaciones en contenedores a escala.
Los propios componentes del plano de control de Istio se ejecutan como cargas de trabajo de Kubernetes. Utiliza un pod de Kubernetes (un conjunto de contenedores estrechamente acoplados que comparten una dirección IP) como base para el diseño del proxy del sidecar.
El proxy de capa 7 de Istio se ejecuta como otro contenedor en el mismo contexto de red que el servicio principal. Desde esa posición, puede interceptar, inspeccionar y manipular todo el tráfico de la red que pasa por el pod. Sin embargo, el contenedor principal no necesita ninguna modificación ni siquiera el conocimiento de que esto está sucediendo.
¿Cuáles son los desafíos de las implementaciones de mallas de servicios de código abierto?
Estos son algunos de los desafíos comunes de la malla de servicios asociados a las plataformas de código abierto como Istio, Linkerd y Consul.
Complejidad
Las mallas de servicios presentan componentes de infraestructura, requisitos de configuración y consideraciones de implementación adicionales. Tienen una curva de aprendizaje empinada, lo que requiere que los desarrolladores y operadores adquieran experiencia en el uso de la implementación específica de la malla de servicios. La formación de los equipos requiere tiempo y recursos. Una organización debe asegurarse de que los equipos tengan los conocimientos necesarios para comprender las complejidades de la arquitectura de malla de servicios y configurarla de manera eficaz.
Gastos generales operativos
Las mallas de servicio introducen gastos generales adicionales para implementar, administrar y supervisar los proxies del plano de datos y los componentes del plano de control. Por ejemplo, tiene que hacer lo siguiente:
- Garantice la alta disponibilidad y escalabilidad de la infraestructura de malla de servicios.
- Supervise el estado y el rendimiento de los proxies.
- Gestione las actualizaciones y los problemas de compatibilidad.
Es fundamental diseñar y configurar cuidadosamente la malla de servicios para minimizar cualquier impacto en el rendimiento del sistema en general.
Desafíos de integración
Una malla de servicios debe integrarse a la perfección con la infraestructura existente para llevar a cabo las funciones requeridas. Esto incluye plataformas de orquestación de contenedores, soluciones de redes y otras herramientas de la pila tecnológica.
Puede resultar difícil garantizar la compatibilidad y la integración fluida con otros componentes en entornos complejos y diversos. Se requieren una planificación y pruebas continuas para cambiar las API, los formatos de configuración y las dependencias. Lo mismo ocurre si necesita actualizar a nuevas versiones en cualquier parte de la pila.
¿Cómo puede AWS satisfacer sus requisitos de malla de servicios?
AWS App Mesh es una malla de servicios completamente administrados y de alta disponibilidad que ofrece Amazon Web Service (AWS). App Mesh facilita la supervisión, el control y la depuración de las comunicaciones entre los servicios.
App Mesh utiliza Envoy, un proxy de malla de servicios de código abierto que se implementa junto con sus contenedores de microservicios. Se puede utilizar con contenedores de microservicios de Amazon Elastic Container Service (Amazon ECS), Amazon Elastic Kubernetes Service (Amazon EKS), AWS Fargate y Kubernetes en AWS. También se puede utilizar con los servicios de Amazon Elastic Compute Cloud (Amazon EC2).
Para comenzar a utilizar la malla de servicios de AWS, cree una cuenta hoy mismo.
Siguientes pasos en AWS
Obtenga acceso instantáneo al nivel Gratuito de AWS.
Comience a crear en la consola de administración de AWS.