introducción a microservicios

40
Erasmo Domínguez http://www.meetup.com/es-ES/Dev_Ops_Tnf/ @erasmolpa Introducción a Microservicios

Upload: erasmo-dominguez-jimenez

Post on 14-Jan-2017

219 views

Category:

Technology


16 download

TRANSCRIPT

Page 1: Introducción a microservicios

Erasmo Domínguez

http://www.meetup.com/es-ES/Dev_Ops_Tnf/

@erasmolpa

Introducción a Microservicios

Page 2: Introducción a microservicios

Arquitectura de Software

Page 3: Introducción a microservicios

• Definir algo (software), en componentes y sus interacciones.

Structura

Visión

Solución

• Se toman decisiones significativas del diseño del software.

• El resultado ha de ser un producto que solucione el problema planteado y facilite futuras obras de mejoras y mantenimiento.

Page 4: Introducción a microservicios

Arquitectura Monolítica

Page 5: Introducción a microservicios

MONOLITO JAVA http://www.slideshare.net/Codemotion/refactor-microservices

Page 6: Introducción a microservicios

MONOLITO JAVA http://www.slideshare.net/Codemotion/refactor-microservices

Page 7: Introducción a microservicios

VERSIONANDO EL MONOLITOhttp://www.slideshare.net/Codemotion/refactor-microservices

Page 8: Introducción a microservicios

Características

• Fácil de “testear” y depurar.

• Fácil de escalar horizontalmente.

• El código está centralizado en un mismo sitio, integrado en un IDE.

• Equipo Dev y equipo Ops centralizados y claramente identificado.

Page 9: Introducción a microservicios

You build it, you run it.Werner Vogels

Page 10: Introducción a microservicios

MARTIN FOWLER

“A particular way of designing software applications as suites of independently deployable services.”

Page 11: Introducción a microservicios

“Microservices is a software architecture style in which complex applications are composed of small, independent processes communicating with each other using language-agnostic APIs”

Page 12: Introducción a microservicios

Y QUE PASA CON SOA?

• SOA Service Oriented Architecture• https://es.wikipedia.org/wiki/Arquitectura_orientada_a_servicios

Page 13: Introducción a microservicios

CARACTERÍSTICAS I• Principio responsabilidad única.”Independencia”,”Aislamiento”.

• Entregas rápidas y facilidad de marcha atrás

• Independencia en la entrega entre diferentes equipos / servicios.

• Tecnología /framework / lenguaje adecuado para cada problema. ”Implementación y configuración óptima”.

• Domain Driven Desing “DDD”.

• “Mantenibilidad”

• Incrementa la agilidad y productividad de negocio. ”Entrega contínua”.

• Facilita la escalabilidad. Horizontal y vertical. ”Sólo crece lo que necesita crecer”

• Fundamental aplicar “DevOps”.Eje: (1 Microservicio = Container) ?

Page 14: Introducción a microservicios

CARACTERÍSTICAS II

• Organizado alrededor de capacidades de negocio.

• Se crean componentes que son servicios. Actualizables y fácil de sustituir por otra pieza.

• Enfocado a producto y no a proyecto.

• Automatización de la infraestructura.

• Diseñado para el fallo.

Page 15: Introducción a microservicios

A TENER EN CUENTA….• Deploy independientes

• Cultura de Automatización

• Estrategia de escalado

• Testing Necesidad de probar el “ecosistema” al completo. No es suficiente con pruebas centradas en el microservicio. Tolerancia a fallos.

• Monitorizar el ecosistema Ejm usando frameworks como ELK

• Service Discovery “Auto descubrimiento” No es fácil de gestionar / optimizar.

• Sistemas distribuidos (latencia, tolerancia a fallos…)

• “Fan out” de peticiones Aumento conciderable de tráfico.

Page 16: Introducción a microservicios

DOMAIN DRIVEN DESING “DDD”.

http://martinfowler.com/bliki/BoundedContext.html

Bounded contextLas fronteras de estos contextos son los puntos por los cuales se pueden comunicar los subdominio de un contexto con otro, Esta comunicación se hace mediante servicios.

Page 17: Introducción a microservicios

FRAMEWORKS• Node.js

• Senecajs

• Strongloop(Loopback )

• Java

• Spring Boot

• Spring Cloud “Netflix OSS”

• Dropwizard

Page 18: Introducción a microservicios

@XEBECH

DEL MONOLITO HACIA MICROSERVICES

Page 19: Introducción a microservicios

UNA DE TANTOS PLANTEAMIENTOS...

Monitoring(logs)

ConfigurationManagement

Service Discovery(Circuit Breaker)

Load Balancer

Service Registry

Edge Service

(GateAway)

Service Client

Serv

icio

de

Cach

é Se

rvic

io d

e Se

gurid

ad

Central (Proxy) Loadbalancer

Service Service

Service

Page 20: Introducción a microservicios

Ejemplo

Page 21: Introducción a microservicios

Ejemplo

Page 22: Introducción a microservicios

Ejemplo

Page 23: Introducción a microservicios

• Zuul Punto de entrada al ecosistema.• Eureka Registro y descubrimiento de servicios.

• Ribbon Balanceo de carga.

• Hystrix Circuit Breaker.Tolerancia a fallos.

https://netflix.github.io/

ALGUNAS PIEZAS DE NETFLIX

Page 24: Introducción a microservicios

ZUUL• Punto de entrada al ecosistema de microservicios y será el encargado de enrutar, balancear,

securizar, monitorizar las peticiones.

• Wiki oficial del desarrollo de Zuul: https://github.com/Netflix/zuul/wiki

Page 25: Introducción a microservicios

EUREKA• Se encargar de registrar las diferentes instancias de microservicios existentes, su localización,

estado, metadatos.

• Cada microservicio durante su arranque se comunicará con el servidor Eureka para notificar que está disponible. Eureka consulta “heartbeats” cada x tiempo si el servicio esta disponible y en caso contrario , tras varios reintentos lo elimina de su registro.

• Integrado con Spring Cloud Config y Asgard.

• Wiki oficial del desarrollo de Eureka: https://github.com/Netflix/eureka/wiki

Page 26: Introducción a microservicios

EUREKA

Page 27: Introducción a microservicios

HYSTRIX• Gestiona las interacciones entre servicios en sistemas distribuidos añadiendo lógica de

latencia y tolerancia a fallos. Es el famoso patrón circuit Breaker y nos permite programar que hacer en caso de fallo.

• Esto hay que verlo ttps://github.cohttps://github.com/Netflix/Hystrix/wiki/How-it-Works#Flowm/Netflix/Hystrix/wiki/How-it-Works#Flow

• Demo https://github.com/marcelbirkner/docker-hystrix-demo

• Wiki oficial del desarrollo de Hystrix https://github.com/Netflix/Hystrix/wiki

Page 28: Introducción a microservicios
Page 29: Introducción a microservicios

A single “bad” service can still bring your service down

Page 30: Introducción a microservicios

RIBBON• Se encarga de la comunicación entre procesos en la nube que realiza balanceo de carga en el

lado cliente.

• Wiki oficial del desarrollo de Ribbon: https://github.com/Netflix/ribbon/wiki

Page 31: Introducción a microservicios

Eureka, Zuul y Ribbon

Page 32: Introducción a microservicios

VISUALIZACION DE DEPENDENCIASWTF!!!!

Page 33: Introducción a microservicios

• Cuantas dependencias tiene mi servicio?

• Cuál es el volumen de llamadas a mi servicio?

• Que hago si mi servicio falla? .Es un fallo en mi invocación? Es un fallo por un servicio que invoco?.

• Cuál de mis procesos de negocio es el más lento. Caso de uso más “pesado”

• Podría responder a la pregunta, de cuantos y que tipos de errores he tenido en peticiones a mi servicio en los últimos x minutos?

http://neo4j.com/graphgist/4f1e5fe25088209dcc26/

DEPENDENCIAS ENTRE SERVICIOS

Page 34: Introducción a microservicios

OTROS PROYECTOS DE NETFLIX• Spring Cloud Netflix http://cloud.spring.io/spring-cloud-netflix/

• Cloud -config https://github.com/spring-cloud/spring-cloud-config

• Turbine https://github.com/Netflix/Turbine/wiki

• Asgard https://github.com/Netflix/asgard/wiki

• Simian Army https://github.com/Netflix/SimianArmy

• Archaius https://github.com/Netflix/archaius

Page 35: Introducción a microservicios
Page 36: Introducción a microservicios

DEVOPS-CONTENEDORES

Page 37: Introducción a microservicios

MICROSERVICIO

Page 38: Introducción a microservicios

Conclusiones• Apps Monolíticas Ideales para organizaciones pequeñas.

• MicroServices Presenta multiples ventajas con respecto a un planteamiento más tradicional.

• Tu compañía / proyecto necesita Escalar?

• Proveedor de Cloud son el entorno ideal para este tipo de arquitecturas. Auto Scalado!

• NetflixOSS Proporciona todas las librerias y piezas de infraestructura para montar la arquitectura.

Page 39: Introducción a microservicios

MÁS SITIOS….

• http://es.slideshare.net/AmazonWebServices/convert-your-code-into-a-microservice-using-aws-lambda

• http://martinfowler.com/bliki/BoundedContext.html

• http://martinfowler.com/bliki/CircuitBreaker.html

• http://www.oodesign.com/command-pattern.html

• http://fabric8.io/presentations/kubernetes-for-java-developers/#/

• http://microservices.io/index.html

• http://start.spring.io/

Page 40: Introducción a microservicios

Donde va todo esto? Auto escalado?

En la próxima charla…Introducción a Kubernetes que ya toca!!!!