Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.
Selancerdans
l’aventure
microservices
avecSpring
Cloud
JulienRoy
ArchitecteJava
@vanr0y
github.com/vanroy
22
1. Définition
2. Problématiques
3. Solutions
4. Implémentation
5 Retours d’expériences
3
Définition
1.
4
Microservices
« In short, the microservice architectural style is an
approach to developing a single application as a
su...
55
Périmètre fonctionnel
Connaissance métier
Domain Driven Design
Concepts
Processus indépendant
Couplage lâche
API REST
M...
66
Scalabilité
Granularité fine
Bénéfices
Isolation
Défaillances
Indépendance
Cycle de vie
Stockage
Technos / Langage
Prod...
7
Problématiques
2.
88
Externalisée
Versionnée
Modifiable à chaud
Configuration
99
Cataloguer
Localiser
Distribution
1010
Interconnexion
Repartition charge
Exposition
Communication
1111
Timeout
Défaillances
Cascades
Résilience / Fallback
Tolérancepannes
12
Solutions
3.
1313
Airbnb : SmartStack
HashiCorp : Consul
Netflix : Eureka, Feign, …
Solutions
1414
Boite à outils
Abstraction
Systémes distribués
Spring Boot
SpringCloud
1515
SpringCloud spring-cloud-aws
spring-cloud-bus
spring-cloud-cli
spring-cloud-commons
spring-cloud-config
spring-cloud-...
1616
SpringCloud spring-cloud-cloudfoundry
spring-cloud-cluster
spring-cloud-consul
spring-cloud-lattice
spring-cloud-sleu...
17
Implémentation
4.
1818
Serveur / Client
Backend GIT
Configs versionnées
Rechargement à chaud
Chiffrement des configs
SpringCloudConfig
19
ConfigServer
dependencies {
compile 'org.springframework.cloud:spring-cloud-server'
}
@SpringBootApplication
@EnableCon...
20
ConfigClient
dependencies {
compile 'org.springframework.cloud:spring-cloud-starter-config'
}
spring.cloud.config.uri: ...
2121
Service d’enregistrement
Localisationdes services
État de santé
AWS Aware
Tableau de bord
SpringCloudNetflix
Eureka
22
EurekaServer
dependencies {
compile 'org.springframework.cloud:spring-cloud-starter-eureka-server'
}
@SpringBootApplica...
23
EurekaClient
dependencies {
compile 'org.springframework.cloud:spring-cloud-starter-eureka'
}
eureka.client.serviceUrl....
24
EurekaDashboard
2525
Client REST Dynamique
Annotate les interfaces
Processors JAX-RS , Spring
MVC, Retrofit
Personnalisationdes
Encoder / ...
26
Feign
dependencies {
compile 'org.springframework.cloud:spring-cloud-starter-feign'
}
@SpringBootApplication
@EnableDis...
2727
Load balancer coté client
Algorithmes
• Round robin
• Aléatoire
• Temps réponse
Liste de serveur
• Configurable
• Aut...
28
Ribbon
dependencies {
compile 'org.springframework.cloud:spring-cloud-starter-ribbon'
}
@SpringBootApplication
@EnableD...
29
Ribbon
@Autowired
private LoadBalancerClient loadBalancer;
public List<Actors> getActors() {
ServiceInstance instance =...
3030
Coupe circuit
Timeout
Cascade d’erreur
Fallback
Tableau de bord
SpringCloudNetflix
Hystrix
31
Hystrix
dependencies {
compile 'org.springframework.cloud:spring-cloud-starter-hystrix'
}
@SpringBootApplication
@Enabl...
32
HystrixDashboard
3333
Routage
• A/B Testing
• Mise à jour
Filtrage
• Sécurité
• Supervision
Programmable ( JVM )
Intégration Eureka / Hystr...
34
Zuul
dependencies {
compile 'org.springframework.cloud:spring-cloud-starter-zuul'
}
@SpringBootApplication
@EnableDisco...
35
Retoursd'expériences
5.
‹N°›36
Organisation Independance
1 dépôt GIT par service
1 build par service
1 déploiment par service
Attention au DRY
Ind...
‹N°›37
Architecture Messaging
Découplage
Reactive programming
Resilience
‹N°›38
Exploitation Conteneur
Simplification déploiement
Dev ISO Prod
Cloud
Scalabilité
Disponibilité
Souplesse
Monitoring...
39
Do not be afraid
Microservices it’s not a silver bullet and it
come with few problems
But
We have many great solutions,...
40
Ressources • Projet démo sur GitHub
https://github.com/VanRoy/tvshowsdb-microservices
• Martin Fowler : Microservicesar...
Nächste SlideShare
Wird geladen in …5
×

Se lancer dans l'aventure microservices avec Spring Cloud - Julien Roy

3.496 Aufrufe

Veröffentlicht am

Vous êtes convaincus par l’architecture micro-services et vous souhaitez vous lancer dans l'aventure. Durant cette session, nous expliquons comment démarrer concrètement ; quelles sont les nouvelles problématiques que soulève cette architecture et comment les résoudre. Nous détaillons – à travers une application de démonstration qui implémente les concepts de Service Discovery, Circuit Breaker, Routing et Client Side Load Balancing – l'utilisation de la libraire Spring Cloud Netflix (Eureka, Hystrix, Ribbon , ...). Nous survolerons ensuite les différentes alternatives développées par les autres géants du Web tels que Twitter, Airbnb, ...

Veröffentlicht in: Internet
  • Als Erste(r) kommentieren

Se lancer dans l'aventure microservices avec Spring Cloud - Julien Roy

  1. 1. Selancerdans l’aventure microservices avecSpring Cloud JulienRoy ArchitecteJava @vanr0y github.com/vanroy
  2. 2. 22 1. Définition 2. Problématiques 3. Solutions 4. Implémentation 5 Retours d’expériences
  3. 3. 3 Définition 1.
  4. 4. 4 Microservices « In short, the microservice architectural style is an approach to developing a single application as a suite of small services, each running in its own process and communicating with lightweight mechanisms, often an HTTP resource API. (…) » JamesLewisandMartinFowler
  5. 5. 55 Périmètre fonctionnel Connaissance métier Domain Driven Design Concepts Processus indépendant Couplage lâche API REST Messaging Déploiement Automatisé Continu
  6. 6. 66 Scalabilité Granularité fine Bénéfices Isolation Défaillances Indépendance Cycle de vie Stockage Technos / Langage Productivité Montée compétences Dette technique Refactoring
  7. 7. 7 Problématiques 2.
  8. 8. 88 Externalisée Versionnée Modifiable à chaud Configuration
  9. 9. 99 Cataloguer Localiser Distribution
  10. 10. 1010 Interconnexion Repartition charge Exposition Communication
  11. 11. 1111 Timeout Défaillances Cascades Résilience / Fallback Tolérancepannes
  12. 12. 12 Solutions 3.
  13. 13. 1313 Airbnb : SmartStack HashiCorp : Consul Netflix : Eureka, Feign, … Solutions
  14. 14. 1414 Boite à outils Abstraction Systémes distribués Spring Boot SpringCloud
  15. 15. 1515 SpringCloud spring-cloud-aws spring-cloud-bus spring-cloud-cli spring-cloud-commons spring-cloud-config spring-cloud-netflix spring-cloud-security spring-cloud-starters 17 projets 8 en RELEASE ( 1.0.2 / 1.0.3 ) spring-cloud-aws spring-cloud-bus spring-cloud-cli spring-cloud-commons spring-cloud-config spring-cloud-netflix spring-cloud-security spring-cloud-starters
  16. 16. 1616 SpringCloud spring-cloud-cloudfoundry spring-cloud-cluster spring-cloud-consul spring-cloud-lattice spring-cloud-sleuth spring-cloud-dataflow spring-cloud-stream spring-cloud-stream-modules spring-cloud-zookeeper 17 projets 8 en RELEASE ( 1.0.2 / 1.0.3 ) 9 en BUILD-SNAPSHOT
  17. 17. 17 Implémentation 4.
  18. 18. 1818 Serveur / Client Backend GIT Configs versionnées Rechargement à chaud Chiffrement des configs SpringCloudConfig
  19. 19. 19 ConfigServer dependencies { compile 'org.springframework.cloud:spring-cloud-server' } @SpringBootApplication @EnableConfigServer public class ConfigServerApplication { public static void main(String[] args) { SpringApplication.run(ConfigServerApplication.class, args); } } spring.cloud.config.server.git.uri: https://github.com/myproject/...
  20. 20. 20 ConfigClient dependencies { compile 'org.springframework.cloud:spring-cloud-starter-config' } spring.cloud.config.uri: http://myconfigserver.com @SpringBootApplication public class Application { @Value("${config.name}") String name = "World"; ... }
  21. 21. 2121 Service d’enregistrement Localisationdes services État de santé AWS Aware Tableau de bord SpringCloudNetflix Eureka
  22. 22. 22 EurekaServer dependencies { compile 'org.springframework.cloud:spring-cloud-starter-eureka-server' } @SpringBootApplication @EnableEurekaServer public class Application { ... }
  23. 23. 23 EurekaClient dependencies { compile 'org.springframework.cloud:spring-cloud-starter-eureka' } eureka.client.serviceUrl.defaultZone: http://localhost:8001/eureka/ @SpringBootApplication @EnableDiscoveryClient public class Application { ... }
  24. 24. 24 EurekaDashboard
  25. 25. 2525 Client REST Dynamique Annotate les interfaces Processors JAX-RS , Spring MVC, Retrofit Personnalisationdes Encoder / Decoder SpringCloudNetflix Feign
  26. 26. 26 Feign dependencies { compile 'org.springframework.cloud:spring-cloud-starter-feign' } @SpringBootApplication @EnableDiscoveryClient @EnableFeignClients public class Application { ... } @FeignClient("actors") public interface ActorClient { @RequestMapping(method = RequestMethod.GET, value = "/actors") List<Actor> getActors(); }
  27. 27. 2727 Load balancer coté client Algorithmes • Round robin • Aléatoire • Temps réponse Liste de serveur • Configurable • Auto découverte Eureka SpringCloudNetflix Ribbon
  28. 28. 28 Ribbon dependencies { compile 'org.springframework.cloud:spring-cloud-starter-ribbon' } @SpringBootApplication @EnableDiscoveryClient @RibbonClient(name="actors", configuration=ActorsRibbonConfig.class) public class Application { ... } @Configuration public class ProductsRibbonConfiguration { @Bean public IRule ribbonRule() { return new RoundRobinRule(); } }
  29. 29. 29 Ribbon @Autowired private LoadBalancerClient loadBalancer; public List<Actors> getActors() { ServiceInstance instance = loadBalancer.choose("actors"); String url = "http://"+instance.getHost()+":"+instance.getPort(); ... // Get the actors list with RestTemplate ( Backend by ribbon ) restTemplate.getForEntity("http://actors/actors", Actor[].class);
  30. 30. 3030 Coupe circuit Timeout Cascade d’erreur Fallback Tableau de bord SpringCloudNetflix Hystrix
  31. 31. 31 Hystrix dependencies { compile 'org.springframework.cloud:spring-cloud-starter-hystrix' } @SpringBootApplication @EnableCircuitBreaker public class Application { ... } @HystrixCommand(fallbackMethod = "defaultActor") public Actor get(String id) { return actorRestClient.get(id); } public Actor defaultActor(String id) { return new Actor("Actor not found");}
  32. 32. 32 HystrixDashboard
  33. 33. 3333 Routage • A/B Testing • Mise à jour Filtrage • Sécurité • Supervision Programmable ( JVM ) Intégration Eureka / Hystrix SpringCloudNetflix Zuul
  34. 34. 34 Zuul dependencies { compile 'org.springframework.cloud:spring-cloud-starter-zuul' } @SpringBootApplication @EnableDiscoveryClient @EnableZuulProxy public class Application { ... } zuul: routes: shows: /tvshows/** actors: /actors/** reviews: / reviews /**
  35. 35. 35 Retoursd'expériences 5.
  36. 36. ‹N°›36 Organisation Independance 1 dépôt GIT par service 1 build par service 1 déploiment par service Attention au DRY Independance entre service Privilégier la création de librairie Consumer-Driven Contracts
  37. 37. ‹N°›37 Architecture Messaging Découplage Reactive programming Resilience
  38. 38. ‹N°›38 Exploitation Conteneur Simplification déploiement Dev ISO Prod Cloud Scalabilité Disponibilité Souplesse Monitoring Tracer ( Zipkin, … ) Centraliser logs ( ELK, … )
  39. 39. 39 Do not be afraid Microservices it’s not a silver bullet and it come with few problems But We have many great solutions, big actors experiences and a lots of benefits Try it
  40. 40. 40 Ressources • Projet démo sur GitHub https://github.com/VanRoy/tvshowsdb-microservices • Martin Fowler : Microservicesarchitecture http://martinfowler.com/articles/microservices.html • Chris Richardson : Introduction to microservices https://www.nginx.com/blog/introduction-to-microservices/ • Adam Wiggins: The Twelve-Factor App http://12factor.net/ • PaulChapman : Microservices with Spring https://spring.io/blog/2015/07/14/microservices-with-spring • Rohit Kelapure: An Architecture for Microservices usingSpringon Cloud Foundry https://docs.google.com/document/d/15G8ew0qEDqpuBTWH9YGHKh da6HaLvfKuS4pnB-CPm50 • Dave Syer : SpringCloud, SpringBoot andNetflix OSS http://presos.dsyer.com/decks/cloud-boot-netflix.html • Netflix : Open SourceSoftware Center https://netflix.github.io/ • SpringCloud http://projects.spring.io/spring-cloud/

×