Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.

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

3.495 visualizaciones

Publicado el

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, ...

Publicado en: Internet
  • Sé el primero en comentar

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/

×