![Page 1: Arquitecturas de microservicios - Codemotion 2014](https://reader033.vdocument.in/reader033/viewer/2022052910/559c131a1a28abac098b4573/html5/thumbnails/1.jpg)
MADRID · NOV 21-22 · 2014
Ernesto Hernández RodríguezArquitecto Java en Medianet Software@ehdez73
Arquitecturas de Microservicios
![Page 2: Arquitecturas de microservicios - Codemotion 2014](https://reader033.vdocument.in/reader033/viewer/2022052910/559c131a1a28abac098b4573/html5/thumbnails/2.jpg)
MADRID · NOV 21-22 · 2014
![Page 3: Arquitecturas de microservicios - Codemotion 2014](https://reader033.vdocument.in/reader033/viewer/2022052910/559c131a1a28abac098b4573/html5/thumbnails/3.jpg)
MADRID · NOV 21-22 · 2014
![Page 4: Arquitecturas de microservicios - Codemotion 2014](https://reader033.vdocument.in/reader033/viewer/2022052910/559c131a1a28abac098b4573/html5/thumbnails/4.jpg)
MADRID · NOV 21-22 · 2014
¿MicroServicios?
![Page 5: Arquitecturas de microservicios - Codemotion 2014](https://reader033.vdocument.in/reader033/viewer/2022052910/559c131a1a28abac098b4573/html5/thumbnails/5.jpg)
MADRID · NOV 21-22 · 2014
"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 6: Arquitecturas de microservicios - Codemotion 2014](https://reader033.vdocument.in/reader033/viewer/2022052910/559c131a1a28abac098b4573/html5/thumbnails/6.jpg)
MADRID · NOV 21-22 · 2014
Evolución arquitectura
![Page 7: Arquitecturas de microservicios - Codemotion 2014](https://reader033.vdocument.in/reader033/viewer/2022052910/559c131a1a28abac098b4573/html5/thumbnails/7.jpg)
MADRID · NOV 21-22 · 2014
Beneficios ∘ Servicios pequeños∘ Principio de responsabilidad única∘ Fácilmente abarcable∘ Políglota∘ PoC∘ Despliegues∘ Escalado eficiente
![Page 8: Arquitecturas de microservicios - Codemotion 2014](https://reader033.vdocument.in/reader033/viewer/2022052910/559c131a1a28abac098b4573/html5/thumbnails/8.jpg)
MADRID · NOV 21-22 · 2014
![Page 9: Arquitecturas de microservicios - Codemotion 2014](https://reader033.vdocument.in/reader033/viewer/2022052910/559c131a1a28abac098b4573/html5/thumbnails/9.jpg)
MADRID · NOV 21-22 · 2014
BUT…WAIT A
MOMENT!
![Page 10: Arquitecturas de microservicios - Codemotion 2014](https://reader033.vdocument.in/reader033/viewer/2022052910/559c131a1a28abac098b4573/html5/thumbnails/10.jpg)
MADRID · NOV 21-22 · 2014
Nuevos desafíos ∘ ¿Cómo localizo los servicios?∘ ¿Qué pasa si alguno falla?∘ ¿Cómo los configuro?∘ ¿Y las trazas?∘ ¿Y los diferentes entornos?
![Page 11: Arquitecturas de microservicios - Codemotion 2014](https://reader033.vdocument.in/reader033/viewer/2022052910/559c131a1a28abac098b4573/html5/thumbnails/11.jpg)
MADRID · NOV 21-22 · 2014
Necesitamos
![Page 12: Arquitecturas de microservicios - Codemotion 2014](https://reader033.vdocument.in/reader033/viewer/2022052910/559c131a1a28abac098b4573/html5/thumbnails/12.jpg)
MADRID · NOV 21-22 · 2014
![Page 13: Arquitecturas de microservicios - Codemotion 2014](https://reader033.vdocument.in/reader033/viewer/2022052910/559c131a1a28abac098b4573/html5/thumbnails/13.jpg)
MADRID · NOV 21-22 · 2014http://screenagers.me/wp-content/uploads/2012/01/US-bandwidth.png
![Page 14: Arquitecturas de microservicios - Codemotion 2014](https://reader033.vdocument.in/reader033/viewer/2022052910/559c131a1a28abac098b4573/html5/thumbnails/14.jpg)
MADRID · NOV 21-22 · 2014
![Page 15: Arquitecturas de microservicios - Codemotion 2014](https://reader033.vdocument.in/reader033/viewer/2022052910/559c131a1a28abac098b4573/html5/thumbnails/15.jpg)
MADRID · NOV 21-22 · 2014
EUREKA ARCHAIUS HYSTRIX TURBINE
ZUUL BLITZ4J RIBBON
http://netflix.github.io
![Page 16: Arquitecturas de microservicios - Codemotion 2014](https://reader033.vdocument.in/reader033/viewer/2022052910/559c131a1a28abac098b4573/html5/thumbnails/16.jpg)
MADRID · NOV 21-22 · 2014
![Page 17: Arquitecturas de microservicios - Codemotion 2014](https://reader033.vdocument.in/reader033/viewer/2022052910/559c131a1a28abac098b4573/html5/thumbnails/17.jpg)
MADRID · NOV 21-22 · 2014
CorrelationID
http://ragavj.blogspot.com.es/2013/08/how-to-lookup-error-in-sharepoint-2010.html
![Page 18: Arquitecturas de microservicios - Codemotion 2014](https://reader033.vdocument.in/reader033/viewer/2022052910/559c131a1a28abac098b4573/html5/thumbnails/18.jpg)
MADRID · NOV 21-22 · 2014
ELK STACK
Files Logstash ElasticSearch Kibana
![Page 19: Arquitecturas de microservicios - Codemotion 2014](https://reader033.vdocument.in/reader033/viewer/2022052910/559c131a1a28abac098b4573/html5/thumbnails/19.jpg)
MADRID · NOV 21-22 · 2014
Spring Cloud
https://github.com/spring-cloud
![Page 20: Arquitecturas de microservicios - Codemotion 2014](https://reader033.vdocument.in/reader033/viewer/2022052910/559c131a1a28abac098b4573/html5/thumbnails/20.jpg)
MADRID · NOV 21-22 · 2014
Eureka Server
@Configuration
@EnableAutoConfiguration
@EnableEurekaServer
public class Application {
public static void main(String[] args) {
new SpringApplicationBuilder(Application.class)
.web(true)
.run(args);
}
}
![Page 21: Arquitecturas de microservicios - Codemotion 2014](https://reader033.vdocument.in/reader033/viewer/2022052910/559c131a1a28abac098b4573/html5/thumbnails/21.jpg)
MADRID · NOV 21-22 · 2014
Eureka Server
@Configuration
@EnableAutoConfiguration
@EnableEurekaServer
public class Application {
public static void main(String[] args) {
new SpringApplicationBuilder(Application.class)
.web(true)
.run(args);
}
}
application.yml
server: port: 8761
eureka: instance: hostname: localhost client: registerWithEureka: false fetchRegistry: false serviceUrl: defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
![Page 22: Arquitecturas de microservicios - Codemotion 2014](https://reader033.vdocument.in/reader033/viewer/2022052910/559c131a1a28abac098b4573/html5/thumbnails/22.jpg)
MADRID · NOV 21-22 · 2014
Eureka Client@Configuration
@ComponentScan
@EnableAutoConfiguration
@EnableEurekaClient
@RestController
public class Application {
@RequestMapping("/")
public String home() { return "Hello world"; }
public static void main(String[] args) {
new SpringApplicationBuilder(Application.class)
.web(true).run(args);
}
}
![Page 23: Arquitecturas de microservicios - Codemotion 2014](https://reader033.vdocument.in/reader033/viewer/2022052910/559c131a1a28abac098b4573/html5/thumbnails/23.jpg)
MADRID · NOV 21-22 · 2014
Eureka Client@Configuration
@ComponentScan
@EnableAutoConfiguration
@EnableEurekaClient
@RestController
public class Application {
@RequestMapping("/")
public String home() { return "Hello world"; }
public static void main(String[] args) {
new SpringApplicationBuilder(Application.class)
.web(true).run(args);
}
}
application.ymleureka: client: serviceUrl: defaultZone: http://localhost:8761/eureka/
![Page 24: Arquitecturas de microservicios - Codemotion 2014](https://reader033.vdocument.in/reader033/viewer/2022052910/559c131a1a28abac098b4573/html5/thumbnails/24.jpg)
MADRID · NOV 21-22 · 2014
Ribbon
RibbonAutoConfiguration.java@Bean
@ConditionalOnMissingBean(RestTemplate.class)
public RestTemplate restTemplate(RibbonInterceptor ribbonInterceptor) {
RestTemplate restTemplate = new RestTemplate();
List<ClientHttpRequestInterceptor> list = new ArrayList<>();
list.add(ribbonInterceptor);
restTemplate.setInterceptors(list);
return restTemplate;
}
}
Transparente vía RestTemplate
http://github.com/.../RibbonAutoConfiguration.java
![Page 25: Arquitecturas de microservicios - Codemotion 2014](https://reader033.vdocument.in/reader033/viewer/2022052910/559c131a1a28abac098b4573/html5/thumbnails/25.jpg)
MADRID · NOV 21-22 · 2014
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 26: Arquitecturas de microservicios - Codemotion 2014](https://reader033.vdocument.in/reader033/viewer/2022052910/559c131a1a28abac098b4573/html5/thumbnails/26.jpg)
MADRID · NOV 21-22 · 2014
Hystrix Config
@Configuration
@EnableAutoConfiguration
@EnableHystrix
@EnableHystrixDashboard
@ComponentScan
public class Application {
public static void main(String[] args) {
new SpringApplicationBuilder(Application.class)
.web(true)
.run(args);
}
}
![Page 27: Arquitecturas de microservicios - Codemotion 2014](https://reader033.vdocument.in/reader033/viewer/2022052910/559c131a1a28abac098b4573/html5/thumbnails/27.jpg)
MADRID · NOV 21-22 · 2014
Hystrix Dashboard
http://techblog.netflix.com/2012/12/hystrix-dashboard-and-turbine.html
![Page 28: Arquitecturas de microservicios - Codemotion 2014](https://reader033.vdocument.in/reader033/viewer/2022052910/559c131a1a28abac098b4573/html5/thumbnails/28.jpg)
MADRID · NOV 21-22 · 2014
Zuul Config
@EnableZuulProxy
/api/users → /users
Hystrix → Ribbon → Eureka
zuul.proxy.mapping: /apizuul.proxy.route.users: /users
![Page 29: Arquitecturas de microservicios - Codemotion 2014](https://reader033.vdocument.in/reader033/viewer/2022052910/559c131a1a28abac098b4573/html5/thumbnails/29.jpg)
MADRID · NOV 21-22 · 2014
Spring Cloud Config ∘ Properties en repositorio Git ∘ API∘ App/Profile∘ Encriptado∘ @RefreshScope
https://github.com/spring-cloud/spring-cloud-config
![Page 30: Arquitecturas de microservicios - Codemotion 2014](https://reader033.vdocument.in/reader033/viewer/2022052910/559c131a1a28abac098b4573/html5/thumbnails/30.jpg)
MADRID · NOV 21-22 · 2014
Spring Cloud Config - Server
@Configuration
@EnableAutoConfiguration
@EnableEurekaClient
@EnableConfigServer
public class ConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class, args);
}
}
![Page 31: Arquitecturas de microservicios - Codemotion 2014](https://reader033.vdocument.in/reader033/viewer/2022052910/559c131a1a28abac098b4573/html5/thumbnails/31.jpg)
MADRID · NOV 21-22 · 2014
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: configserver
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 32: Arquitecturas de microservicios - Codemotion 2014](https://reader033.vdocument.in/reader033/viewer/2022052910/559c131a1a28abac098b4573/html5/thumbnails/32.jpg)
MADRID · NOV 21-22 · 2014
Spring Cloud Config - Client
@Configuration
@EnableAutoConfiguration
@RestController
public class Application {
@RequestMapping("/")
public String home() { return "Hello world"; }
public static void main(String[] args) {
new SpringApplicationBuilder(Application.class)
.web(true)
.run(args);
}
}
![Page 33: Arquitecturas de microservicios - Codemotion 2014](https://reader033.vdocument.in/reader033/viewer/2022052910/559c131a1a28abac098b4573/html5/thumbnails/33.jpg)
MADRID · NOV 21-22 · 2014
@Configuration
@EnableAutoConfiguration
@RestController
public class Application {
@RequestMapping("/")
public String home() { return "Hello world"; }
public static void main(String[] args) {
new SpringApplicationBuilder(Application.class)
.web(true)
.run(args);
}
}
Spring Cloud Config - Client
bootstrap.ymlspring: cloud: config: uri: http://localhost:${config.port:8888}
![Page 34: Arquitecturas de microservicios - Codemotion 2014](https://reader033.vdocument.in/reader033/viewer/2022052910/559c131a1a28abac098b4573/html5/thumbnails/34.jpg)
MADRID · NOV 21-22 · 2014
DevOps
![Page 35: Arquitecturas de microservicios - Codemotion 2014](https://reader033.vdocument.in/reader033/viewer/2022052910/559c131a1a28abac098b4573/html5/thumbnails/35.jpg)
MADRID · NOV 21-22 · 2014
![Page 36: Arquitecturas de microservicios - Codemotion 2014](https://reader033.vdocument.in/reader033/viewer/2022052910/559c131a1a28abac098b4573/html5/thumbnails/36.jpg)
MADRID · NOV 21-22 · 2014
![Page 37: Arquitecturas de microservicios - Codemotion 2014](https://reader033.vdocument.in/reader033/viewer/2022052910/559c131a1a28abac098b4573/html5/thumbnails/37.jpg)
MADRID · NOV 21-22 · 2014
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 ehdez73/myapp1 .$ docker run -d -p 8080:8080 --name="m1" ehdez73/myapp1
$ docker ps$ docker stop m1$ docker start m1
https://registry.hub.docker.com/u/dockerfile/java/dockerfile/
![Page 39: Arquitecturas de microservicios - Codemotion 2014](https://reader033.vdocument.in/reader033/viewer/2022052910/559c131a1a28abac098b4573/html5/thumbnails/39.jpg)
MADRID · NOV 21-22 · 2014
Fig.sh
![Page 40: Arquitecturas de microservicios - Codemotion 2014](https://reader033.vdocument.in/reader033/viewer/2022052910/559c131a1a28abac098b4573/html5/thumbnails/40.jpg)
MADRID · NOV 21-22 · 2014
fig.ymlmyapp1: image: ehdez73/myapp1 ports: - "8880:8880"
myapp2: image: ehdez73/myapp2 ports: - "8881:8881" links: - db
db: image: postgres
http://www.fig.sh/yml.html
$ fig up
![Page 41: Arquitecturas de microservicios - Codemotion 2014](https://reader033.vdocument.in/reader033/viewer/2022052910/559c131a1a28abac098b4573/html5/thumbnails/41.jpg)
MADRID · NOV 21-22 · 2014
DEMO
![Page 42: Arquitecturas de microservicios - Codemotion 2014](https://reader033.vdocument.in/reader033/viewer/2022052910/559c131a1a28abac098b4573/html5/thumbnails/42.jpg)
MADRID · NOV 21-22 · 2014
MINIONIZE THE WORLD !!!Minions ipsum tulaliloo potatoooo pepete jeje baboiii poulet tikka masala chasy la bodaaa butt. La bodaaa aaaaaah tulaliloo wiiiii la bodaaa la bodaaa belloo! Tulaliloo para tú belloo! Me want bananaaa! Para tú aaaaaah bananaaaa para tú jiji po kass. Potatoooo tulaliloo potatoooo chasy me want bananaaa! Ti aamoo! para tú.
https://github.com/ehdez73/minionize-the-world
The minions
![Page 43: Arquitecturas de microservicios - Codemotion 2014](https://reader033.vdocument.in/reader033/viewer/2022052910/559c131a1a28abac098b4573/html5/thumbnails/43.jpg)
MADRID · NOV 21-22 · 2014
Muchas gracias@ehdez73