53
MADRID · 20/04/2014 Meetups Ernesto Hernández Rodríguez @ehdez73 Arquitecturas de Microservicios

Arquitecturas de microservicios - @cibbva

Embed Size (px)

Citation preview

Page 1: Arquitecturas de microservicios - @cibbva

MADRID · 20/04/2014Meetups

Ernesto Hernández Rodríguez@ehdez73

Arquitecturas de Microservicios

Page 2: Arquitecturas de microservicios - @cibbva

MADRID · 20/04/2014Meetups

ERNESTO HERNÁNDEZ RODRÍGUEZ

http://linkdin.me/ehdez73

@ehdez73

Arquitecto de SoftwareInstructor certificado SpringSource

www.medianetsoftware.com

Page 3: Arquitecturas de microservicios - @cibbva

MADRID · 20/04/2014Meetups

¿MicroServicios?

Page 4: Arquitecturas de microservicios - @cibbva

MADRID · 20/04/2014Meetups

"Microservices is a software architecture design pattern, in which complex applications are composed of small, independent processes communicating with each other using language-agnostic APIs. These services are small, highly decoupled and focus on doing a small task."

Page 5: Arquitecturas de microservicios - @cibbva

MADRID · 20/04/2014Meetups

Evolución arquitectura

Page 6: Arquitecturas de microservicios - @cibbva

MADRID · 20/04/2014Meetups

Beneficios ∘ Servicios pequeños∘ Principio de responsabilidad única∘ Fácilmente abarcable∘ Políglota∘ PoC∘ Despliegues∘ Escalado eficiente

Page 7: Arquitecturas de microservicios - @cibbva

MADRID · 20/04/2014Meetups

Microservice with Spring Boot

$ spring run app.groovy

$ curl localhost:8080

Helllo World !

https://spring.io/guides/gs/spring-boot/

Page 8: Arquitecturas de microservicios - @cibbva

MADRID · 20/04/2014Meetups

Nuevos desafíos ∘ ¿Cómo localizo los servicios?∘ ¿Qué pasa si alguno falla?∘ ¿Cómo los configuro?∘ ¿Y los logs?∘ ¿Y los diferentes entornos?

Page 9: Arquitecturas de microservicios - @cibbva

MADRID · 20/04/2014Meetups

Necesitamos

Page 10: Arquitecturas de microservicios - @cibbva

MADRID · 20/04/2014Meetups

Page 11: Arquitecturas de microservicios - @cibbva

MADRID · 20/04/2014Meetups

http://screenagers.me/wp-content/uploads/2012/01/US-bandwidth.png

Page 12: Arquitecturas de microservicios - @cibbva

MADRID · 20/04/2014Meetups

Page 13: Arquitecturas de microservicios - @cibbva

MADRID · 20/04/2014Meetups

EUREKA ARCHAIUS HYSTRIX TURBINE

ZUUL BLITZ4J RIBBON

http://netflix.github.io

Page 14: Arquitecturas de microservicios - @cibbva

MADRID · 20/04/2014Meetups

Page 15: Arquitecturas de microservicios - @cibbva

MADRID · 20/04/2014Meetups

Logging

Page 16: Arquitecturas de microservicios - @cibbva

MADRID · 20/04/2014Meetups

Log Management

Logs Logstash ElasticSearch Kibana

ELK Stack

Page 17: Arquitecturas de microservicios - @cibbva

MADRID · 20/04/2014Meetups

CorrelationID

http://ragavj.blogspot.com.es/2013/08/how-to-lookup-error-in-sharepoint-2010.html

cid : { 887250bd-747b-4618-881b-d5eeb6cff59f }

cidcid

cid

cid

cid

Page 18: Arquitecturas de microservicios - @cibbva

MADRID · 20/04/2014Meetups

Spring Cloud

http://projects.spring.io/spring-cloud

Page 19: Arquitecturas de microservicios - @cibbva

MADRID · 20/04/2014Meetups

Registry

Page 20: Arquitecturas de microservicios - @cibbva

MADRID · 20/04/2014Meetups

Eureka Server

@Configuration

@EnableAutoConfiguration

@EnableEurekaServer

public class Application {

public static void main(String[] args) {

new SpringApplication.run(Application.class, args);

}

}

Page 21: Arquitecturas de microservicios - @cibbva

MADRID · 20/04/2014Meetups

Eureka Server

@Configuration

@EnableAutoConfiguration

@EnableEurekaServer

public class Application {

public static void main(String[] args) {

new SpringApplication.run(Application.class, args);

}

}

application.yml

server: port: 8761

spring: application: name: eureka-server

Page 22: Arquitecturas de microservicios - @cibbva

MADRID · 20/04/2014Meetups

Eureka Client@Configuration

@EnableAutoConfiguration

@EnableEurekaClient

@RestController

public class Application {

@RequestMapping("/sayHello")

public String home() { return "Hello world"; }

public static void main(String[] args) {

new SpringApplication.run(Application.class, args);

}

}

Page 23: Arquitecturas de microservicios - @cibbva

MADRID · 20/04/2014Meetups

Eureka Client@Configuration

@EnableAutoConfiguration

@EnableEurekaClient

@RestController

public class Application {

@RequestMapping("/")

public String home() { return "Hello world"; }

public static void main(String[] args) {

new SpringApplication.run(Application.class, args);

}

}

application.yml

spring: application: name: eureka-clienteureka: client: serviceUrl: defaultZone: http://eureka.machine:8761/eureka/

Page 24: Arquitecturas de microservicios - @cibbva

MADRID · 20/04/2014Meetups

Load balancer

Page 25: Arquitecturas de microservicios - @cibbva

MADRID · 20/04/2014Meetups

Ribbon

@Autowired

private LoadBalancerClient loadBalancer;

public void useIt() {

ServiceInstance instance = loadBalancer.choose("eureka-client");

URI uri = URI.create( String.format(

"http://%s:%s",

instance.getHost(),

instance.getPort()));

// Now do something with the URI

}

LoadBalancerClient

Page 26: Arquitecturas de microservicios - @cibbva

MADRID · 20/04/2014Meetups

Ribbon

@Autowired

private RestTemplate template;

public void useIt() {

template.getForObject("http://eureka-client/sayHello", String.class);

}

Integrado con RestTemplate

Page 27: Arquitecturas de microservicios - @cibbva

MADRID · 20/04/2014Meetups

Circuit breaker

Page 28: Arquitecturas de microservicios - @cibbva

MADRID · 20/04/2014Meetups

Hystrix wrapper

@Component

public class StoreIntegration {

@HystrixCommand(fallbackMethod = "defaultStores")

public Object getStores(Map<String, Object> parameters) {

//do stuff that might fail

}

public Object defaultStores(Map<String, Object> parameters) {

return /* something useful */;

}

}

Page 29: Arquitecturas de microservicios - @cibbva

MADRID · 20/04/2014Meetups

Hystrix Config

@Configuration

@EnableAutoConfiguration

@EnableHystrix

@EnableHystrixDashboard

public class Application {

public static void main(String[] args) {

new SpringApplication.run(Application.class);

}

}

Page 30: Arquitecturas de microservicios - @cibbva

MADRID · 20/04/2014Meetups

Hystrix Dashboard

http://techblog.netflix.com/2012/12/hystrix-dashboard-and-turbine.html

Page 31: Arquitecturas de microservicios - @cibbva

MADRID · 20/04/2014Meetups

Edge service

Page 32: Arquitecturas de microservicios - @cibbva

MADRID · 20/04/2014Meetups

Zuul Config

@EnableZuulProxy

GET: /api/sayHello

Hystrix → Ribbon → Eureka

zuul: routes: eureka-client: /api/**

Page 33: Arquitecturas de microservicios - @cibbva

MADRID · 20/04/2014Meetups

Config

Page 34: Arquitecturas de microservicios - @cibbva

MADRID · 20/04/2014Meetups

Spring Cloud Config ∘ Properties en repositorio Git ∘ API∘ App/Profile∘ Cifrado∘ @RefreshScope

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

Page 35: Arquitecturas de microservicios - @cibbva

MADRID · 20/04/2014Meetups

Spring Cloud Config - Server

@Configuration

@EnableAutoConfiguration

@EnableEurekaClient

@EnableConfigServer

public class ConfigServerApplication {

public static void main(String[] args) {

SpringApplication.run(ConfigServerApplication.class, args);

}

}

Page 36: Arquitecturas de microservicios - @cibbva

MADRID · 20/04/2014Meetups

Spring Cloud Config - Server

@Configuration

@EnableAutoConfiguration

@EnableEurekaClient

@EnableConfigServer

public class ConfigServerApplication {

public static void main(String[] args) {

SpringApplication.run(ConfigServerApplication.class, args);

}

}

bootstrap.ymlspring: application: name: config-server

encrypt: keyStore: location: classpath:keystore.jks password: ${KEYSTORE_PASSWORD} # foobar alias: test

application.ymlspring: cloud: config: server: basedir: target/config uri: https://github.com/ehdez73/minionize-the-world-config

security: user: password: '{cipher}AQBunH7b87s86E='

Page 37: Arquitecturas de microservicios - @cibbva

MADRID · 20/04/2014Meetups

Spring Cloud Config - Client

@Configuration

@EnableAutoConfiguration

@RestController

public class Application {

@RequestMapping("/")

public String home() { return "Hello world"; }

public static void main(String[] args) {

new SpringApplication.run(Application.class, args);

}

}

Page 38: Arquitecturas de microservicios - @cibbva

MADRID · 20/04/2014Meetups

@Configuration

@EnableAutoConfiguration

@RestController

public class Application {

@RequestMapping("/")

public String home() { return "Hello world"; }

public static void main(String[] args) {

new SpringApplication.run(Application.class, args);

}

}

Spring Cloud Config - Client

bootstrap.ymlspring: cloud: config: uri: http://${config-server}:${config.port:8888}

Page 39: Arquitecturas de microservicios - @cibbva

MADRID · 20/04/2014Meetups

Page 40: Arquitecturas de microservicios - @cibbva

MADRID · 20/04/2014Meetups

Page 41: Arquitecturas de microservicios - @cibbva

MADRID · 20/04/2014Meetups

Page 42: Arquitecturas de microservicios - @cibbva

MADRID · 20/04/2014Meetups

FROM dockerfile/javaMANTAINER Ernesto Hdez, [email protected] target/myapp1.jar /tmp/myapp1.jarEXPOSE 8080ENTRYPOINT ["java", "-jar", "/tmp/myapp1.jar"]

Dockerfile

$ mvn package$ docker build -t ehdez/myapp1 .$ docker run -d -p 8080:8080 --name="m1" ehdez/myapp1

$ docker ps$ docker stop m1$ docker start m1

https://registry.hub.docker.com/u/dockerfile/java/dockerfile/

Page 43: Arquitecturas de microservicios - @cibbva

MADRID · 20/04/2014Meetups

https://docs.docker.com/compose

Docker Compose

Page 44: Arquitecturas de microservicios - @cibbva

MADRID · 20/04/2014Meetups

Docker Compose

docker-compose.yml

Page 45: Arquitecturas de microservicios - @cibbva

MADRID · 20/04/2014Meetups

docker-compose.ymlmyapp1: image: ehdez73/myapp1 ports: - "8880:8880"

myapp2: image: ehdez73/myapp2 ports: - "8881:8881" links: - db

db: image: postgres

$ docker-compose up

Page 46: Arquitecturas de microservicios - @cibbva

MADRID · 20/04/2014Meetups

DEMO

Page 47: Arquitecturas de microservicios - @cibbva

MADRID · 20/04/2014Meetups

https://github.com/ehdez73/minionize-the-world

Page 48: Arquitecturas de microservicios - @cibbva

MADRID · 20/04/2014Meetups

https://github.com/ehdez73/minionize-the-world

Fallo Minium - Characters

Page 49: Arquitecturas de microservicios - @cibbva

MADRID · 20/04/2014Meetups

https://github.com/ehdez73/minionize-the-world

Fallo Minium - Ipsum

Fallo Minium - Characters

Page 50: Arquitecturas de microservicios - @cibbva

MADRID · 20/04/2014Meetups

Minionize the world !!!

https://github.com/ehdez73/minionize-the-world

Page 51: Arquitecturas de microservicios - @cibbva

MADRID · 20/04/2014Meetups

https://github.com/ehdez73/minionize-the-world

Page 52: Arquitecturas de microservicios - @cibbva

MADRID · 20/04/2014Meetups

https://github.com/ehdez73/minionize-the-world

Page 53: Arquitecturas de microservicios - @cibbva

MADRID · 20/04/2014Meetups

Muchas gracias@ehdez73