SlideShare una empresa de Scribd logo
Cliente. Nombre proyecto.
Service mesh - Linkerd a fondo
Luis Mora
Meetup microservicios - Linkerd a fondo
About me
@luismoramedina
Luis Mora Medina
Arquitecto software @Paradigma
Meetup microservicios - Linkerd a fondo
introducción a service mesh
Linkerd a fondo
1
Meetup microservicios - Linkerd a fondo
1 Service mesh / Problemáticas de las “nuevas” aplicaciones
Aplicaciones deslocalizadas y distribuidas en numerosos componentes que hablan con numerosos
protocolos de red, arquitecturas complejas, que crecen en número de dependencias
● Service Discovery
● Enrutamiento y balanceo de carga
● Gestión de errores: time-out, reintentos, circuit-breaker
● Securización y control de acceso (autenticación / autorización)
● Comprobación de disponibilidad (Health check)
● Métricas, monitorización, logging y trazabilidad distribuidos
“The Hardest Part of Microservices:
Calling Your Services”
Christian Posta
Meetup microservicios - Linkerd a fondo
1 Service mesh / Que es?
“A service mesh is a dedicated infrastructure layer for handling
service-to-service communication. It’s responsible for the reliable
delivery of requests through the complex topology of services that
comprise a modern, cloud native application”
William Morgan, Buoyant CEO
April 2017
Meetup microservicios - Linkerd a fondo
Stubby
1 Service mesh / Service mesh “as a library”
● spring-cloud-netflix-hystrix
● spring-cloud-netflix-ribbon
● spring-cloud-netflix-eureka
● spring-cloud-netflix-zuul
● spring-cloud-sleuth
● spring-cloud-zipkin
● vertx-circuit-breaker
● vertx-service-discovery
● vertx-dropwizard-metrics
● vertx-zipkin
de Twitter
¿Es nuevo este concepto?
Meetup microservicios - Linkerd a fondo
● A alto nivel, la responsabilidad del service mesh es asegurar que las solicitudes
sean entregadas en las conexiones entre los servicios de nuestra arquitectura
distribuida
● Propicia arquitecturas políglotas
● Permite que los equipos de desarrollo se centren en la funcionalidad de sus
aplicaciones y que la lógica de negocio no se difumine con el código de
instrumentación de las conexiones
1 Service mesh / Que aporta?
Meetup microservicios - Linkerd a fondo
1 Service mesh / Patrón sidecar
Aplicación
principal
● Core de la
aplicación
● Tiene la
funcionalidad y
la ofrece por sí
sola
● Corre en un
proceso o
contenedor
diferente
Sidecar
Ofrece ayuda a la
aplicación principal
● Telemetría y
monitorización
● Logging
● Proxy
● Protocol
transformation
● Configuración
● Health
● Auditoría
● ...
Meetup microservicios - Linkerd a fondo
Pod
1 Service mesh / Patrón sidecar en Kubernetes
POD: Unidad de computación mínima que puede ser desplegada en
Kubernetes
main
sd container 2
sd container 3
Shared
● Network & IP
● Hostname
● Data Volumes
localhost
Meetup microservicios - Linkerd a fondo
1 Service mesh / Modos de instalación
Per host
● 1 proxy en cada host
● n..1 servicios - proxy
● menor gasto de memoria
● puede llegar a ser un SPOF
Meetup microservicios - Linkerd a fondo
1 Service mesh / Modos de instalación
Sidecar
● 1 proxy por cada servicio
● 1..1 servicios - proxy
● más versátil
● mejor rendimiento
Meetup microservicios - Linkerd a fondo
1 Service mesh / Data plane
Los service mesh suelen tener dos partes (1/2):
- El plano de datos (maya de proxies encargados
de gestionar conexiones entre componentes)
Meetup microservicios - Linkerd a fondo
1 Service mesh / Control plane
Los service mesh suelen tener dos partes (2/2):
- El plano de control (políticas, gestión,
configuración, monitorización del data plane)
Meetup microservicios - Linkerd a fondo
qué es Linkerd?
Linkerd a fondo
2
Meetup microservicios - Linkerd a fondo
2 Linkerd / Qué es?
What is Linkerd?
“Linkerd is an open source network proxy designed to be deployed
as a service mesh: a dedicated layer for managing, controlling,
and monitoring service-to-service communication within an
application.”
/linkerd-DEE/
Meetup microservicios - Linkerd a fondo
2 Linkerd / Producto
● Linkerd (l5d) aparece en 2016
● Open-source con Soporte comercial (Bouyant)
● Desarrollado en scala y ejecutado en la JVM
● Basado en Finagle y Netty
● Soporte a múltiples clouds, herramientas y protocolos
● “Performante” p99 (99% peticiones) < 1 milisegundo
● Extensible
● Dentro de la iniciativa CNCF
● Nuevo producto Linkerd2 (f.k.a. Conduit)
Meetup microservicios - Linkerd a fondo
2 Linkerd / Funcionalidades
● Enrutamiento dinámico
○ Blue green
○ Canary
● Balanceo de carga avanzado
○ Least loaded
○ Round robin, etc.
● Gestión de errores
○ Circuit breaking
○ Reintentos para llamadas fallidas
○ Límite de carga
● Autodescubrimiento
● Seguridad de red
service-to-service (TLS)
● Trazabilidad distribuida
● Monitorización y métricas
● Sidecar o proxy por host
● Multi protocolo
○ Http1
○ Http2 (Grpc)
○ Thrift
Meetup microservicios - Linkerd a fondo
2 Linkerd / Arquitecturas
https://linkerd.io/1/advanced/deployment/
Per host
● 1 Linkerd en cada host
● n..1 servicios - linkerd
● menor gasto de memoria
● puede llegar a ser un SPOF
Sidecar
● 1 Linkerd por cada servicio
● 1..1 servicios - linkerd
● más versátil
● mejor rendimiento
Meetup microservicios - Linkerd a fondo
2 Linkerd / Plano de control
¿Tiene Linkerd un plano de
control?
Meetup microservicios - Linkerd a fondo
2 Linkerd / Namers, namerd y dtab
● Los “namers” son los encargados de resolver nombres lógicos
de servicios y transformarlos en una dirección “física”
● Delegation tabs (dtabs) son las reglas de enrutado para
resolver los path lógicos
● Existen numerosos namers: k8s, marathon, consul, filesystem,
zookeeper, etc.
● Toda esta configuración puede estar en cada proxy o puede
estar en un servicio llamado “namerd”, que permite cambios en
caliente
Meetup microservicios - Linkerd a fondo
2 Linkerd / Enrutado
/meetup/goto
/kschool/goto
/madrid/magallanes/1/goto
/spain/madrid/magallanes/1/goto
/meetup => /kschool;
/kschool => /madrid/magallanes/1;
/madrid => /spain/madrid;
/meetup/goto
Finagle
delegation table
Logical path
Physical name
Meetup microservicios - Linkerd a fondo
2 Linkerd / Enrutado avanzado
/meetup => /kschool;
/kschool => /madrid/magallanes/1 * 0.9 & /madrid/sol/5 * 0.1;
/madrid => /spain/madrid;
Canary or AB
deployments
/svc/local => /$/inet/127.0.0.1/8080
/$/inet namer
/svc => /#/io.l5d.fs
file system
namer (not for
production)
192.0.2.220 8080
192.0.2.210 8080 * 2.0
/$ a classpath
namer
A configurable
namer
Meetup microservicios - Linkerd a fondo
2 Linkerd / Integraciones
Meetup microservicios - Linkerd a fondo
playground
Linkerd a fondo
3
Meetup microservicios - Linkerd a fondo
3 Playground / Configuración básica
admin:
port: 9990
ip: 0.0.0.0
routers:
- protocol: http
dtab: /svc/* => /$/inet/python/8080;
servers:
- port: 4140
ip: 0.0.0.0
4140
client
linkerd
python
8080
Meetup microservicios - Linkerd a fondo
3 Playground / Configuración balanceo
● Round Robin
● P2C (Power of two choices) Least loaded: coge 2 nodos del pool de
manera aleatoria y envía la petición al menos cargado de la tupla (el que
menos peticiones pendientes tiene). Por defecto.
● P2C (Power of two choices) Peak EWMA: variación del anterior pero que
tiene en cuenta los servidores con mayores latencias para dejarles
tiempo para su recuperación
● Aperture Least Loaded
● Heap Least Loaded
Meetup microservicios - Linkerd a fondo
3 Playground / Configuración balanceo
namers:
- kind: io.l5d.fs
rootDir: disco
routers:
- protocol: http
dtab: /svc => /#/io.l5d.fs/nginx;
servers:
- port: 4140
ip: 0.0.0.0
4140
client
linkerd
nginx1
8080
nginx2
8080
httpbin.org
Meetup microservicios - Linkerd a fondo
3 Playground / Configuración circuit breaking
● Linkerd elimina nodos del pool de balanceo cuando no están “sanos”
○ A nivel de conexión (failFast)
○ Basado en fallos (failureAccrual)
■ Número de fallos consecutivos
■ Porcentaje de peticiones erróneas (contabilizando las últimas peticiones o usando
una ventana de tiempo)
● Existe una política de reinserción en el pool
○ tiempo constante
○ jittered (tiempo incremental)
● El pool de nodos no se puede quedar vacío, se siguen enviando peticiones a alguno de los
nodos aunque todos hayan sobrepasado el umbral de “retirada”
● Por defecto se eliminará del pool un nodo a los 5 fallos consecutivos
Meetup microservicios - Linkerd a fondo
3 Playground / Configuración circuit breaking
routers:
- protocol: http
...
client:
failureAccrual:
kind: io.l5d.consecutiveFailures
# remove from the pool on 2 FAILs
failures: 2
backoff:
kind: constant
# wait 15s after reinserting
ms: 15000
4140
client
linkerd
nginx1 nginx2
httpbin.org
2x
Meetup microservicios - Linkerd a fondo
3 Playground / Configuración reintentos
service:
responseClassifier:
kind: io.l5d.http.retryableRead5XX
retries:
budget:
minRetriesPerSec: 0
# every failure is retried twice
percentCanRetry: 2
backoff:
kind: constant
ms: 300
4140
client
linkerd
nginx1 nginx2
httpbin.org
2x
retry
Meetup microservicios - Linkerd a fondo
3 Playground / Configuración telemetría
telemetry:
- kind: io.l5d.recentRequests
sampleRate: 1.0
- kind: io.l5d.prometheus
- kind: io.l5d.zipkin
host: zipkin
port: 9410
sampleRate: 1.0
linkerd
4140client
nginx1 nginx2
httpbin.org
prometheus
zipkin .
Meetup microservicios - Linkerd a fondo
3 Playground / Instalación en Kubernetes
Kubernetes
4141
client
8081
4141
8081
http://books
Pod
linkerd
books
Pod
linkerd
stars
/svc/stars
34140
2 4
5
1
Modo Sidecar
Meetup microservicios - Linkerd a fondo
3 Playground / Instalación en Kubernetes
Modo Proxy
por host
Kubernetes
4141
client
stars
books
8081
4140
4141
8081
/svc/stars
http://books
linkerd
1
3
2
4
5
Meetup microservicios - Linkerd a fondo
3 Playground / Adaptando tus aplicaciones
Y todo esto... ¿sin modificar nuestras
aplicaciones?
● Nuestros clientes http deben usar Linkerd como proxy* (HTTP_PROXY,
http.proxyHost, http.proxyPort)
● Se deben propagar, en las llamadas a otros servicios upstream, las
cabeceras de Linkerd (l5d-ctx-*)
* Linkerd puede actuar como proxy transparente en
k8s, modificando las iptables en un init container
Meetup microservicios - Linkerd a fondo
conclusiones
Linkerd a fondo
4
Meetup microservicios - Linkerd a fondo
4 Conclusiones / Pros y contras
Tiene soporte comercial
Soporte a múltiples entornos y clouds
Instalación en arquitectura sidecar o nodo por host
Integración con múltiples productos
Producto robusto, sólido y rápido
Abierto a la implementación de plugins con los
lenguajes de la JVM
No tiene un plano de control avanzado
El elevado footprint del proxy dificulta su instalación en
modo sidecar
La funcionalidad de circuit breaker tiene algunas
deficiencias
Se echan de menos funcionalidades extra de seguridad
CONTRASPROS
Meetup microservicios - Linkerd a fondo
4 Conclusiones / Linkerd VS Linkerd2
Linkerd 1 Linkerd 2
No tiene un plano de control diferenciado, se queda en
el plano de datos Tiene un plano de control
Diferentes modos de instalación (Sidecar proxy/Proxy
per host) Instalación en Sidecar dentro de pods
Proxy con footprint medio (JVM) ~150 megas Proxy ultraligero (Rust)
Múltiples integraciones con productos de terceros
Es un producto relativamente nuevo, menos integraciones
y menos funcionalidad (no circuit breaker, no routing, etc.)
Instalación y configuración es artesanal
Cuenta con un cli para realizar instalación y configuración
del sistema
Soporte a múltiples plataformas (AWS, DC/OS,
Kubernetes, Docker, On-Premise)
Diseñado inicialmente para funcionar en Kubernetes
(>=1.9)
Meetup microservicios - Linkerd a fondo
¿Preguntas?
https://github.com/luismoramedina/linkerd-playground
https://github.com/luismoramedina/linkerd-microservices

Más contenido relacionado

La actualidad más candente

MongoDB y Microservicios Parte 1: Power Microservices con Docker, Kubernetes,...
MongoDB y Microservicios Parte 1: Power Microservices con Docker, Kubernetes,...MongoDB y Microservicios Parte 1: Power Microservices con Docker, Kubernetes,...
MongoDB y Microservicios Parte 1: Power Microservices con Docker, Kubernetes,...
MongoDB
 

La actualidad más candente (11)

Derribando la torre de marfil - Plain Concepts Dev Day
Derribando la torre de marfil - Plain Concepts Dev DayDerribando la torre de marfil - Plain Concepts Dev Day
Derribando la torre de marfil - Plain Concepts Dev Day
 
Divide y Vencerás: introducción a los Microservicios
Divide y Vencerás: introducción a los MicroserviciosDivide y Vencerás: introducción a los Microservicios
Divide y Vencerás: introducción a los Microservicios
 
Implementación de microservicios en Vocento
Implementación de microservicios en VocentoImplementación de microservicios en Vocento
Implementación de microservicios en Vocento
 
Introducción a microservicios
Introducción a microserviciosIntroducción a microservicios
Introducción a microservicios
 
[El comercio]php zend framework (speech)
[El comercio]php zend framework (speech)[El comercio]php zend framework (speech)
[El comercio]php zend framework (speech)
 
MongoDB y Microservicios Parte 1: Power Microservices con Docker, Kubernetes,...
MongoDB y Microservicios Parte 1: Power Microservices con Docker, Kubernetes,...MongoDB y Microservicios Parte 1: Power Microservices con Docker, Kubernetes,...
MongoDB y Microservicios Parte 1: Power Microservices con Docker, Kubernetes,...
 
BBVA Arquitectura - Demo DevOps
BBVA Arquitectura - Demo DevOpsBBVA Arquitectura - Demo DevOps
BBVA Arquitectura - Demo DevOps
 
Desarrollo moderno con DevOps y Cloud Native
Desarrollo moderno con DevOps y Cloud NativeDesarrollo moderno con DevOps y Cloud Native
Desarrollo moderno con DevOps y Cloud Native
 
Implementando una Arquitectura de Microservicios
Implementando una Arquitectura de MicroserviciosImplementando una Arquitectura de Microservicios
Implementando una Arquitectura de Microservicios
 
.Net Core Real time App on My Rasperry PI - Codemotion 2017 talk
.Net Core Real time App on My Rasperry PI - Codemotion 2017 talk.Net Core Real time App on My Rasperry PI - Codemotion 2017 talk
.Net Core Real time App on My Rasperry PI - Codemotion 2017 talk
 
Arquitectura de microservicios
Arquitectura de microserviciosArquitectura de microservicios
Arquitectura de microservicios
 

Similar a Linkerd a fondo

Presentación administracion de la red
Presentación administracion de la  redPresentación administracion de la  red
Presentación administracion de la red
Santiago Bernal
 
Kubernetes para developers
Kubernetes para developersKubernetes para developers
Kubernetes para developers
Jaime Perera Merino
 
Orquestación de Microservicios Introducción a arquitecturas de desarrollo mod...
Orquestación de Microservicios Introducción a arquitecturas de desarrollo mod...Orquestación de Microservicios Introducción a arquitecturas de desarrollo mod...
Orquestación de Microservicios Introducción a arquitecturas de desarrollo mod...
ssuserc860fb
 
Nubitek falcon descripción técnica es
Nubitek falcon   descripción técnica esNubitek falcon   descripción técnica es
Nubitek falcon descripción técnica es
jcolladoandino
 
381429156-PLC-DVP-Fundamentals-RevB.pdf
381429156-PLC-DVP-Fundamentals-RevB.pdf381429156-PLC-DVP-Fundamentals-RevB.pdf
381429156-PLC-DVP-Fundamentals-RevB.pdf
elkinmeza1
 

Similar a Linkerd a fondo (20)

Presentación administracion de la red
Presentación administracion de la  redPresentación administracion de la  red
Presentación administracion de la red
 
Nagios para Dummies By pseudor00t
Nagios para Dummies By pseudor00tNagios para Dummies By pseudor00t
Nagios para Dummies By pseudor00t
 
Microservicios con .NET
Microservicios con .NETMicroservicios con .NET
Microservicios con .NET
 
Luiyiana lab2
Luiyiana lab2Luiyiana lab2
Luiyiana lab2
 
Kubernetes para developers
Kubernetes para developersKubernetes para developers
Kubernetes para developers
 
Protocolos snmp icmp
Protocolos snmp icmpProtocolos snmp icmp
Protocolos snmp icmp
 
SDN (Software Define Networking) - The evolution of the Network
SDN (Software Define Networking) - The evolution of the NetworkSDN (Software Define Networking) - The evolution of the Network
SDN (Software Define Networking) - The evolution of the Network
 
Orquestación de Microservicios Introducción a arquitecturas de desarrollo mod...
Orquestación de Microservicios Introducción a arquitecturas de desarrollo mod...Orquestación de Microservicios Introducción a arquitecturas de desarrollo mod...
Orquestación de Microservicios Introducción a arquitecturas de desarrollo mod...
 
Nubitek falcon descripción técnica es
Nubitek falcon   descripción técnica esNubitek falcon   descripción técnica es
Nubitek falcon descripción técnica es
 
Zookeeper
ZookeeperZookeeper
Zookeeper
 
Tecnologías de virtualización y despliegue de servicios
Tecnologías de virtualización y despliegue de serviciosTecnologías de virtualización y despliegue de servicios
Tecnologías de virtualización y despliegue de servicios
 
Seminario Web MongoDB-Paradigma: Cree aplicaciones más escalables utilizando ...
Seminario Web MongoDB-Paradigma: Cree aplicaciones más escalables utilizando ...Seminario Web MongoDB-Paradigma: Cree aplicaciones más escalables utilizando ...
Seminario Web MongoDB-Paradigma: Cree aplicaciones más escalables utilizando ...
 
Capacitación de SDN para COMSOC UNI
Capacitación de SDN para COMSOC UNICapacitación de SDN para COMSOC UNI
Capacitación de SDN para COMSOC UNI
 
Creando un SCADA con Python y HTML5
Creando un SCADA con Python y HTML5Creando un SCADA con Python y HTML5
Creando un SCADA con Python y HTML5
 
Administracion de servidores
Administracion de servidoresAdministracion de servidores
Administracion de servidores
 
Grid computing
Grid computingGrid computing
Grid computing
 
Ciena Blue Planet: Automatización del despliegue de redes 5G con la ayuda de ...
Ciena Blue Planet: Automatización del despliegue de redes 5G con la ayuda de ...Ciena Blue Planet: Automatización del despliegue de redes 5G con la ayuda de ...
Ciena Blue Planet: Automatización del despliegue de redes 5G con la ayuda de ...
 
381429156-PLC-DVP-Fundamentals-RevB.pdf
381429156-PLC-DVP-Fundamentals-RevB.pdf381429156-PLC-DVP-Fundamentals-RevB.pdf
381429156-PLC-DVP-Fundamentals-RevB.pdf
 
soporte tecnico
soporte tecnicosoporte tecnico
soporte tecnico
 
Pract campo
Pract campoPract campo
Pract campo
 

Más de Paradigma Digital

Más de Paradigma Digital (20)

Bots 3.0: Dejando atrás los bots conversacionales con Dialogflow.
Bots 3.0: Dejando atrás los bots conversacionales con Dialogflow.Bots 3.0: Dejando atrás los bots conversacionales con Dialogflow.
Bots 3.0: Dejando atrás los bots conversacionales con Dialogflow.
 
Horneando apis
Horneando apisHorneando apis
Horneando apis
 
Java 8 time to join the future
Java 8  time to join the futureJava 8  time to join the future
Java 8 time to join the future
 
Meetup de kubernetes, conceptos básicos.
Meetup  de kubernetes, conceptos básicos.Meetup  de kubernetes, conceptos básicos.
Meetup de kubernetes, conceptos básicos.
 
Equipo de Marketing de Paradigma Digital
Equipo de Marketing de Paradigma DigitalEquipo de Marketing de Paradigma Digital
Equipo de Marketing de Paradigma Digital
 
¿Cómo se despliega y autoescala Couchbase en Cloud? ¡Aprende de manera práctica!
¿Cómo se despliega y autoescala Couchbase en Cloud? ¡Aprende de manera práctica!¿Cómo se despliega y autoescala Couchbase en Cloud? ¡Aprende de manera práctica!
¿Cómo se despliega y autoescala Couchbase en Cloud? ¡Aprende de manera práctica!
 
Overview atlas (1)
Overview atlas (1)Overview atlas (1)
Overview atlas (1)
 
Cómo usar google analytics
Cómo usar google analyticsCómo usar google analytics
Cómo usar google analytics
 
Transformación Digital
Transformación DigitalTransformación Digital
Transformación Digital
 
Manuel Hurtado. Couchbase paradigma4oct
Manuel Hurtado. Couchbase paradigma4octManuel Hurtado. Couchbase paradigma4oct
Manuel Hurtado. Couchbase paradigma4oct
 
Programación Reactiva con RxJava
Programación Reactiva con RxJavaProgramación Reactiva con RxJava
Programación Reactiva con RxJava
 
¿Cómo vencer a los dragones digitales?
¿Cómo vencer a los dragones digitales?¿Cómo vencer a los dragones digitales?
¿Cómo vencer a los dragones digitales?
 
Python y Flink
Python y FlinkPython y Flink
Python y Flink
 
Kafka y python
Kafka y pythonKafka y python
Kafka y python
 
Cultura Digital Paradigma
Cultura Digital ParadigmaCultura Digital Paradigma
Cultura Digital Paradigma
 
Introducción a Kubernetes
Introducción a KubernetesIntroducción a Kubernetes
Introducción a Kubernetes
 
Analysis of Websites as Graphs for SEO
Analysis of Websites as Graphs for SEOAnalysis of Websites as Graphs for SEO
Analysis of Websites as Graphs for SEO
 
Use Groovy&Grails in your spring boot projects
Use Groovy&Grails in your spring boot projectsUse Groovy&Grails in your spring boot projects
Use Groovy&Grails in your spring boot projects
 
Introducción a Django
Introducción a DjangoIntroducción a Django
Introducción a Django
 
ECMAScript 6
ECMAScript 6ECMAScript 6
ECMAScript 6
 

Último (6)

EduLearnIAappde IAparatodosdisponible.pptx
EduLearnIAappde IAparatodosdisponible.pptxEduLearnIAappde IAparatodosdisponible.pptx
EduLearnIAappde IAparatodosdisponible.pptx
 
fase 4-Estudio de la geometria analitica[1].pptx
fase 4-Estudio de la geometria analitica[1].pptxfase 4-Estudio de la geometria analitica[1].pptx
fase 4-Estudio de la geometria analitica[1].pptx
 
INSTITUTO AUCARA SEMANA NUMERO 7 AGROPECUARIA I
INSTITUTO AUCARA SEMANA NUMERO 7 AGROPECUARIA IINSTITUTO AUCARA SEMANA NUMERO 7 AGROPECUARIA I
INSTITUTO AUCARA SEMANA NUMERO 7 AGROPECUARIA I
 
SliderSHARE ¿que es? y ¿c0mo funciona ?.
SliderSHARE ¿que es? y ¿c0mo funciona ?.SliderSHARE ¿que es? y ¿c0mo funciona ?.
SliderSHARE ¿que es? y ¿c0mo funciona ?.
 
PANCREATITIS aguda explicacion anatomia todo
PANCREATITIS aguda explicacion anatomia todoPANCREATITIS aguda explicacion anatomia todo
PANCREATITIS aguda explicacion anatomia todo
 
PLAN LOS ANIMALES MARINOS.pdf con las actividades a realizar día a días, tota...
PLAN LOS ANIMALES MARINOS.pdf con las actividades a realizar día a días, tota...PLAN LOS ANIMALES MARINOS.pdf con las actividades a realizar día a días, tota...
PLAN LOS ANIMALES MARINOS.pdf con las actividades a realizar día a días, tota...
 

Linkerd a fondo

  • 1. Cliente. Nombre proyecto. Service mesh - Linkerd a fondo Luis Mora
  • 2. Meetup microservicios - Linkerd a fondo About me @luismoramedina Luis Mora Medina Arquitecto software @Paradigma
  • 3. Meetup microservicios - Linkerd a fondo introducción a service mesh Linkerd a fondo 1
  • 4. Meetup microservicios - Linkerd a fondo 1 Service mesh / Problemáticas de las “nuevas” aplicaciones Aplicaciones deslocalizadas y distribuidas en numerosos componentes que hablan con numerosos protocolos de red, arquitecturas complejas, que crecen en número de dependencias ● Service Discovery ● Enrutamiento y balanceo de carga ● Gestión de errores: time-out, reintentos, circuit-breaker ● Securización y control de acceso (autenticación / autorización) ● Comprobación de disponibilidad (Health check) ● Métricas, monitorización, logging y trazabilidad distribuidos “The Hardest Part of Microservices: Calling Your Services” Christian Posta
  • 5. Meetup microservicios - Linkerd a fondo 1 Service mesh / Que es? “A service mesh is a dedicated infrastructure layer for handling service-to-service communication. It’s responsible for the reliable delivery of requests through the complex topology of services that comprise a modern, cloud native application” William Morgan, Buoyant CEO April 2017
  • 6. Meetup microservicios - Linkerd a fondo Stubby 1 Service mesh / Service mesh “as a library” ● spring-cloud-netflix-hystrix ● spring-cloud-netflix-ribbon ● spring-cloud-netflix-eureka ● spring-cloud-netflix-zuul ● spring-cloud-sleuth ● spring-cloud-zipkin ● vertx-circuit-breaker ● vertx-service-discovery ● vertx-dropwizard-metrics ● vertx-zipkin de Twitter ¿Es nuevo este concepto?
  • 7. Meetup microservicios - Linkerd a fondo ● A alto nivel, la responsabilidad del service mesh es asegurar que las solicitudes sean entregadas en las conexiones entre los servicios de nuestra arquitectura distribuida ● Propicia arquitecturas políglotas ● Permite que los equipos de desarrollo se centren en la funcionalidad de sus aplicaciones y que la lógica de negocio no se difumine con el código de instrumentación de las conexiones 1 Service mesh / Que aporta?
  • 8. Meetup microservicios - Linkerd a fondo 1 Service mesh / Patrón sidecar Aplicación principal ● Core de la aplicación ● Tiene la funcionalidad y la ofrece por sí sola ● Corre en un proceso o contenedor diferente Sidecar Ofrece ayuda a la aplicación principal ● Telemetría y monitorización ● Logging ● Proxy ● Protocol transformation ● Configuración ● Health ● Auditoría ● ...
  • 9. Meetup microservicios - Linkerd a fondo Pod 1 Service mesh / Patrón sidecar en Kubernetes POD: Unidad de computación mínima que puede ser desplegada en Kubernetes main sd container 2 sd container 3 Shared ● Network & IP ● Hostname ● Data Volumes localhost
  • 10. Meetup microservicios - Linkerd a fondo 1 Service mesh / Modos de instalación Per host ● 1 proxy en cada host ● n..1 servicios - proxy ● menor gasto de memoria ● puede llegar a ser un SPOF
  • 11. Meetup microservicios - Linkerd a fondo 1 Service mesh / Modos de instalación Sidecar ● 1 proxy por cada servicio ● 1..1 servicios - proxy ● más versátil ● mejor rendimiento
  • 12. Meetup microservicios - Linkerd a fondo 1 Service mesh / Data plane Los service mesh suelen tener dos partes (1/2): - El plano de datos (maya de proxies encargados de gestionar conexiones entre componentes)
  • 13. Meetup microservicios - Linkerd a fondo 1 Service mesh / Control plane Los service mesh suelen tener dos partes (2/2): - El plano de control (políticas, gestión, configuración, monitorización del data plane)
  • 14. Meetup microservicios - Linkerd a fondo qué es Linkerd? Linkerd a fondo 2
  • 15. Meetup microservicios - Linkerd a fondo 2 Linkerd / Qué es? What is Linkerd? “Linkerd is an open source network proxy designed to be deployed as a service mesh: a dedicated layer for managing, controlling, and monitoring service-to-service communication within an application.” /linkerd-DEE/
  • 16. Meetup microservicios - Linkerd a fondo 2 Linkerd / Producto ● Linkerd (l5d) aparece en 2016 ● Open-source con Soporte comercial (Bouyant) ● Desarrollado en scala y ejecutado en la JVM ● Basado en Finagle y Netty ● Soporte a múltiples clouds, herramientas y protocolos ● “Performante” p99 (99% peticiones) < 1 milisegundo ● Extensible ● Dentro de la iniciativa CNCF ● Nuevo producto Linkerd2 (f.k.a. Conduit)
  • 17. Meetup microservicios - Linkerd a fondo 2 Linkerd / Funcionalidades ● Enrutamiento dinámico ○ Blue green ○ Canary ● Balanceo de carga avanzado ○ Least loaded ○ Round robin, etc. ● Gestión de errores ○ Circuit breaking ○ Reintentos para llamadas fallidas ○ Límite de carga ● Autodescubrimiento ● Seguridad de red service-to-service (TLS) ● Trazabilidad distribuida ● Monitorización y métricas ● Sidecar o proxy por host ● Multi protocolo ○ Http1 ○ Http2 (Grpc) ○ Thrift
  • 18. Meetup microservicios - Linkerd a fondo 2 Linkerd / Arquitecturas https://linkerd.io/1/advanced/deployment/ Per host ● 1 Linkerd en cada host ● n..1 servicios - linkerd ● menor gasto de memoria ● puede llegar a ser un SPOF Sidecar ● 1 Linkerd por cada servicio ● 1..1 servicios - linkerd ● más versátil ● mejor rendimiento
  • 19. Meetup microservicios - Linkerd a fondo 2 Linkerd / Plano de control ¿Tiene Linkerd un plano de control?
  • 20. Meetup microservicios - Linkerd a fondo 2 Linkerd / Namers, namerd y dtab ● Los “namers” son los encargados de resolver nombres lógicos de servicios y transformarlos en una dirección “física” ● Delegation tabs (dtabs) son las reglas de enrutado para resolver los path lógicos ● Existen numerosos namers: k8s, marathon, consul, filesystem, zookeeper, etc. ● Toda esta configuración puede estar en cada proxy o puede estar en un servicio llamado “namerd”, que permite cambios en caliente
  • 21. Meetup microservicios - Linkerd a fondo 2 Linkerd / Enrutado /meetup/goto /kschool/goto /madrid/magallanes/1/goto /spain/madrid/magallanes/1/goto /meetup => /kschool; /kschool => /madrid/magallanes/1; /madrid => /spain/madrid; /meetup/goto Finagle delegation table Logical path Physical name
  • 22. Meetup microservicios - Linkerd a fondo 2 Linkerd / Enrutado avanzado /meetup => /kschool; /kschool => /madrid/magallanes/1 * 0.9 & /madrid/sol/5 * 0.1; /madrid => /spain/madrid; Canary or AB deployments /svc/local => /$/inet/127.0.0.1/8080 /$/inet namer /svc => /#/io.l5d.fs file system namer (not for production) 192.0.2.220 8080 192.0.2.210 8080 * 2.0 /$ a classpath namer A configurable namer
  • 23. Meetup microservicios - Linkerd a fondo 2 Linkerd / Integraciones
  • 24. Meetup microservicios - Linkerd a fondo playground Linkerd a fondo 3
  • 25. Meetup microservicios - Linkerd a fondo 3 Playground / Configuración básica admin: port: 9990 ip: 0.0.0.0 routers: - protocol: http dtab: /svc/* => /$/inet/python/8080; servers: - port: 4140 ip: 0.0.0.0 4140 client linkerd python 8080
  • 26. Meetup microservicios - Linkerd a fondo 3 Playground / Configuración balanceo ● Round Robin ● P2C (Power of two choices) Least loaded: coge 2 nodos del pool de manera aleatoria y envía la petición al menos cargado de la tupla (el que menos peticiones pendientes tiene). Por defecto. ● P2C (Power of two choices) Peak EWMA: variación del anterior pero que tiene en cuenta los servidores con mayores latencias para dejarles tiempo para su recuperación ● Aperture Least Loaded ● Heap Least Loaded
  • 27. Meetup microservicios - Linkerd a fondo 3 Playground / Configuración balanceo namers: - kind: io.l5d.fs rootDir: disco routers: - protocol: http dtab: /svc => /#/io.l5d.fs/nginx; servers: - port: 4140 ip: 0.0.0.0 4140 client linkerd nginx1 8080 nginx2 8080 httpbin.org
  • 28. Meetup microservicios - Linkerd a fondo 3 Playground / Configuración circuit breaking ● Linkerd elimina nodos del pool de balanceo cuando no están “sanos” ○ A nivel de conexión (failFast) ○ Basado en fallos (failureAccrual) ■ Número de fallos consecutivos ■ Porcentaje de peticiones erróneas (contabilizando las últimas peticiones o usando una ventana de tiempo) ● Existe una política de reinserción en el pool ○ tiempo constante ○ jittered (tiempo incremental) ● El pool de nodos no se puede quedar vacío, se siguen enviando peticiones a alguno de los nodos aunque todos hayan sobrepasado el umbral de “retirada” ● Por defecto se eliminará del pool un nodo a los 5 fallos consecutivos
  • 29. Meetup microservicios - Linkerd a fondo 3 Playground / Configuración circuit breaking routers: - protocol: http ... client: failureAccrual: kind: io.l5d.consecutiveFailures # remove from the pool on 2 FAILs failures: 2 backoff: kind: constant # wait 15s after reinserting ms: 15000 4140 client linkerd nginx1 nginx2 httpbin.org 2x
  • 30. Meetup microservicios - Linkerd a fondo 3 Playground / Configuración reintentos service: responseClassifier: kind: io.l5d.http.retryableRead5XX retries: budget: minRetriesPerSec: 0 # every failure is retried twice percentCanRetry: 2 backoff: kind: constant ms: 300 4140 client linkerd nginx1 nginx2 httpbin.org 2x retry
  • 31. Meetup microservicios - Linkerd a fondo 3 Playground / Configuración telemetría telemetry: - kind: io.l5d.recentRequests sampleRate: 1.0 - kind: io.l5d.prometheus - kind: io.l5d.zipkin host: zipkin port: 9410 sampleRate: 1.0 linkerd 4140client nginx1 nginx2 httpbin.org prometheus zipkin .
  • 32. Meetup microservicios - Linkerd a fondo 3 Playground / Instalación en Kubernetes Kubernetes 4141 client 8081 4141 8081 http://books Pod linkerd books Pod linkerd stars /svc/stars 34140 2 4 5 1 Modo Sidecar
  • 33. Meetup microservicios - Linkerd a fondo 3 Playground / Instalación en Kubernetes Modo Proxy por host Kubernetes 4141 client stars books 8081 4140 4141 8081 /svc/stars http://books linkerd 1 3 2 4 5
  • 34. Meetup microservicios - Linkerd a fondo 3 Playground / Adaptando tus aplicaciones Y todo esto... ¿sin modificar nuestras aplicaciones? ● Nuestros clientes http deben usar Linkerd como proxy* (HTTP_PROXY, http.proxyHost, http.proxyPort) ● Se deben propagar, en las llamadas a otros servicios upstream, las cabeceras de Linkerd (l5d-ctx-*) * Linkerd puede actuar como proxy transparente en k8s, modificando las iptables en un init container
  • 35. Meetup microservicios - Linkerd a fondo conclusiones Linkerd a fondo 4
  • 36. Meetup microservicios - Linkerd a fondo 4 Conclusiones / Pros y contras Tiene soporte comercial Soporte a múltiples entornos y clouds Instalación en arquitectura sidecar o nodo por host Integración con múltiples productos Producto robusto, sólido y rápido Abierto a la implementación de plugins con los lenguajes de la JVM No tiene un plano de control avanzado El elevado footprint del proxy dificulta su instalación en modo sidecar La funcionalidad de circuit breaker tiene algunas deficiencias Se echan de menos funcionalidades extra de seguridad CONTRASPROS
  • 37. Meetup microservicios - Linkerd a fondo 4 Conclusiones / Linkerd VS Linkerd2 Linkerd 1 Linkerd 2 No tiene un plano de control diferenciado, se queda en el plano de datos Tiene un plano de control Diferentes modos de instalación (Sidecar proxy/Proxy per host) Instalación en Sidecar dentro de pods Proxy con footprint medio (JVM) ~150 megas Proxy ultraligero (Rust) Múltiples integraciones con productos de terceros Es un producto relativamente nuevo, menos integraciones y menos funcionalidad (no circuit breaker, no routing, etc.) Instalación y configuración es artesanal Cuenta con un cli para realizar instalación y configuración del sistema Soporte a múltiples plataformas (AWS, DC/OS, Kubernetes, Docker, On-Premise) Diseñado inicialmente para funcionar en Kubernetes (>=1.9)
  • 38. Meetup microservicios - Linkerd a fondo ¿Preguntas? https://github.com/luismoramedina/linkerd-playground https://github.com/luismoramedina/linkerd-microservices