Linkerd, Service Mesh microservice management

Linkerd, Service Mesh microservice management

Las Arquitecturas basadas en Microservicios han facilitado y continúan facilitando mucho todos nuestros desarrollos, puestas en producción y release management, pero ciertamente se puede continuar mejorando y una forma es implementando un Service Mesh.

Service Mesh

¿Qué es un Service Mesh?

Pero: ¿Qué es un Service Mesh?. En modo resumen rápido podemos decir que es una infraestructura, basada en software, encargada de manejar las comunicaciones entre microservicios y/o distintos componentes. Para explicarlo mejor podemos ver unas funcionalidades ejemplos donde podríamos implementarlo:

  • Podríamos dar disponibilidad entre servicios, creando patrones de Circuit-breaking, número de reintentos y tiempos para definir los timeouts.

  • Definir métricas, monitorización, sistema de logging o establecer unos KPis que se encargarán de controlar los tiempos de respuesta de las peticiones procesadas.

  • Niveles de autenticación y autorización como de trazabilidad de los datos, donde podremos ver o identificar los ciclos de vida entre las llamadas a los microservicios.

Una ventaja importante respecto lo visto hasta ahora es que, a diferencia de los patrones de diseño utilizados, donde las todo se gestiona por código, en ésta ocasión, se realizará en infraestructura dotando así de una mayor agilidad y simplicidad. Podríamos decir que es similar al funcionamiento de un proxy dónde éste proporciona acceso a los servicios de infraestructura que se requieren y canaliza la connectividad hacia ellos.

El Service Mesh nos ofrece una capa ligera de distintos elementos homogéneos, cosa que resulta bastante atractiva cuando consideramos la posibilidad de implementar un sistema de control que gestione y monitorice todos las instancias, convirtiéndose en un punto de control, recolección de métricas o monitorización, como se comentó anteriormente. El Service Mesh puede funcionar a nivel de capa de aplicación, no solamente de red (TCP/IP), teniendo la capacidad de poder diferenciar, por ejemplo, las peticiones que finalizan con código de error 404 (¡Qué grande!).

Probando Linkerd

Anteriormente, en otro post, hablamos de Hystrix como Circuit-breaking, que podríamos decir es un intento de Service Mesh pero basado en código y no directamente sobre infraestructura. Tenemos algunos Service Mesh, con importante implementaciones y comunidades como son:

Aunque en el post actual hablaremos de Linkerd (Kubernetes cloud native) y, rápidamente, podremos ver en formato lista que de dispone “by default” de algunas de las funcionalidades anteriores como son:

  • Balanceo de carga avanzado.
  • Gestión del circuit breaking y reintentos.
  • Autenticación/Autorización.
  • Trazabilidad distribuida.
  • Monitorización y métricas.

Existen más funcionalidades pero, hemos listados las que nos parecieron más interesantes. Como decíamos, es Kubernetes native pero, también, podremos desplegarlo en Apache Mesos o bien “on-premise”. Es interesante destacar la gran capacidad de integración con servicios como Zookeeper para descubrimiento de servicios o, bien, para integraciones con servicios de message broker.

Tenemos que saber que Linkerd expone tres puertos, el 4141 para las peticiones HTTP de entrada, el 4140 para las de salida y el 9990 para la administración y gestión. Una ventaja más es que podremos gestionar los enviroment mediante un fichero yaml o json teniendo un formato, ejemplo, como:

admin:
  ip: 0.0.0.0
  port: 9990

namers:
- kind: io.l5d.fs
  rootDir: /io.buoyant/disco

routers:
- protocol: http
  dtab: |
    /svc => /#/io.l5d.fs
  servers:
  - ip: 0.0.0.0
    port: 4140

Podemos descargar el ejemplo vía GitHub.

Service Mesh vs API Gateway

Es importante diferenciar una API Gateway de un Service Mesh. Digamos que una API Gateway es una parte muy clave de la exposición de servicios (API) y un Service Mesh es una infraestructura de comunicación entre servicios y no tiene ninguna exposición externa. Por lo tanto, pueden convivir tranquilamente.

Autor: Joakim Vivas

comments powered by Disqus