Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Vers une architecture de microservices

Avatar for Stephan L Stephan L
October 16, 2015

Vers une architecture de microservices

Conférence donnée à l'occasion de Bdx.io 2015

Avatar for Stephan L

Stephan L

October 16, 2015

More Decks by Stephan L

Other Decks in Technology

Transcript

  1. Vous allez voir comment... • l’architecture de microservices a émergé

    • se caractérise un microservice • définir la taille et le périmètre d’un microservice • évaluer les risques d’une telle architecture • développer et surveiller un micro service avec Spring Boot • l’enregistrer dans Zookeeper à l’aide de Curator • le déployer avec Ansible • utiliser la stack Netflix pour le rendre plus robuste avec Hystrix • le tester avec WireMock
  2. Qui sommes nous donc ? Stéphane Lagraulet • Architecte SI

    • Chez Ippon depuis 2013 • Code en Java depuis 2000… • Microservices addict • @stephlag Olivier Revial • Développeur • Chez Ippon depuis 2013 • Code en Java depuis le berceau • @PommeDouze
  3. Ippon Technologies • 200 ingénieurs en France et aux USA

    – Paris, Nantes, Bordeaux – Richmond (Virginie), Washington (DC) • Expertise – Digital, Big Data, Cloud – Java, Agilité, DevOps • Projets open source – Tatami – JHipster • @ippontech, @ipponusa
  4. Le projet • Membres de l’équipe en charge du moteur

    de recherche d’un site de e- commerce (mais confidentiel) • Création d’une architecture de microservices pour alimenter, interroger et monitorer les composants du moteur de recherche • Projet multi plateformes et multilingue (multi tenants) • Démarrage en début d’année, déploiement toujours en cours
  5. Contexte Technologique historique Historiquement environnement Full .Net / Microsoft mais

    un petit village résiste encore et toujours… enfin vous connaissez la suite de l’histoire ...
  6. Convergence de plusieurs mouvements • Agilité – Équipes multi compétences

    – Réduction du “time to market” – Itérations courtes – Boucle de feedback rapide • Devops – Fin du silo dev / prod – Continuous Delivery – Tests automatisés – Génération de livrables “Production Ready” – Canary testing - tests A/B
  7. Convergence de plusieurs mouvements • Environnement technique plus complexe –

    Hétérogénéité des langages – Multiplication des frameworks – Diversité des solutions de stockage SQL & NoSQL • Évolution des patterns d’architecture – Stateless Services – API Web (REST / HTTP) - voir conférence de David Martin (Ippon) – HATEAOS – CQRS – Asynchronisme (“Relax”)
  8. Convergence de plusieurs mouvements • Cloud – Élastique, démarrage d’instances

    à la demande – Sujet à des pannes et/ou des latences – En remplacement ou en relais de l’infra “historique” • Containerization - Docker – Génération de containers – Déploiement sur toutes les plate-formes du même livrable – Isolation des ressources • Provisioning - Mesos, Kubernetes – Auto provisionning de ressources en fonction des besoins – Voir la conférence suivante sur Kubernetes...
  9. Microservices - The Unix Way James Lewis présente une conférence

    en Mars 2012 à Krakow intitulée Micro-services - Java the Unix Way “This is the Unix philosophy: Write programs that do one thing and do it well. Write programs to work together. Write programs to handle text streams, because that is a universal interface.”
  10. Microservices Découplage Du monolithe au microservices (1) Jusqu’en 1990 Années

    2000 Années 2010 Pre-SOA (monolithique) Couplage fort SOA Couplage plus faible
  11. Du monolithe aux microservices (2) © Martin Fowler Une application

    monolithique déploie toutes ses fonctionnalités dans un seul ensemble… Une architecture de microservices isole chaque fonctionnalité dans un service dédié... … et assure la scalabilité en distribuant ces services sur les serveurs, répliquant si nécessaire. … et assure la scalabilité en répliquant cet ensemble sur plusieurs serveurs.
  12. Caractéristiques d’un microservice • Embarque le container web – Pour

    Java embedded jetty, tomcat, undertow – Facile à tester (HttpUnit, WireMock), rapide à lancer • Packagé comme un jar exécutable • Installable comme un simple service Linux • Déployable de façon autonome et en continu • Utilise la source de données qui lui convient (sa propre base?) • Doit pouvoir fournir les informations sur son état (monitoring) • Communication via HTTP
  13. Taille et périmètre d’un microservice • Petits avec une responsabilité

    limitée – généralement un business case (domain driven design) – “Small enough to fit in your head” James Lewis again… – assez petits pour être jetables (réécriture plutôt que maintenance) et donc faciles à remplacer – dérogations à la règle DRY (Don’t Repeat Yourself) • Il peut y avoir du code commun mais utilisé en tant que librairie embarquée – Pas de microservice de persistence! – Pas de code “métier” dans les librairies
  14. But… “Microservices are not a free lunch” • Programmation distribuée

    • Organiser les équipes pour se conformer à la “loi de Conway” – microservices = microteams • Besoin d’une usine logicielle fiable et complète – Tests automatisés et qualité de code à assurer • Complexité supplémentaire de déploiement et de surveillance • Construction d’API compatibles (versionning) • Tolérance aux pannes
  15. Notre boite à outils: Spring Boot • Bootable: génère un

    exécutable avec container web embarqué • Fournit un ensemble de “starters” permettant d’utiliser les fonctionnalités issues du framework Spring • Permet de surcharger la configuration par défaut selon les besoins • Pas de configuration XML, pas de génération de code • Auto reload des classes (avec l’IDE) • Démarrage rapide facilitant le développement • Une boîte à outils pour créer des microservices
  16. Spring Boot Actuator • Ensemble de endpoints pour le monitoring

    en production (objectif DevOps) – health - permet de savoir si une instance est up – info - infos générales de l’application – metrics - nombre d’appels, performance du dernier appel – mappings - urls accessibles – beans - les infos du container Spring – env - toutes les variables d’environnement – shutdown - désactivé par défaut (!) – ...
  17. Discovery - Utilisation de Zookeeper • Pourquoi Zookeeper? Déjà utilisé

    par SolrCloud et installé sur nos serveurs • Système léger et robuste si bien installé • Éprouvé par l’utilisation intensive de SolrCloud • Fournit des solutions pour la programmation distribuée • Utilisation via Apache Curator (initialement projet Netflix)
  18. Zookeeper: les pièges à éviter • Attention au paramétrage (partagé

    avec SolrCloud) • Utiliser la classe ServiceProvider pour récupérer des instances de services. • Bien conserver les erreurs pour ne pas router les appels vers des instances de services KO • Zookeeper est un système CP, c’est donc un point faible de l’architecture. • Nécessite une surveillance (Exhibitor mais qui a besoin… d’un autre Zookeeper) • Nous allons utiliser nos propres instances de ZK pour les services (isolation des responsabilités)
  19. Déploiement avec Ansible • Automatisation des déploiements • Pas d’installation

    sur les serveurs cible • Utilisation de OpenSSH pour la communication • Reprise sur pannes (“replay”) • Nombre max d’échecs Serveurs
  20. Tester avec WireMock • Test via en HTTP de l’API

    du service déployé • Mock des dépendances HTTP Test Unitaire Service Testé HTTP Dépendance “mockée” avec WireMock HTTP
  21. Quelques éléments de la stack Netflix • Ce que nous

    utilisons – Curator - Zookeeper simplified – Hystrix - “Defend your app” – Feign - Rest client • En cours de développement – Zuul - Edge server / dynamic routing – Ribbon - Load Balancer • Ce qui existe – Archaius - centralized configuration – Hystrix Dashboard (avec Turbine) – ...
  22. Communication entre les services • Toujours sur le protocole HTTP

    • Pour démarrer en Json • Versionning des services • Pour assurer la compatibilité des services, la portabilité – Protobuf – Thrift • Pour plus d’infos suivre la conférence suivante de David Bruant “JSON c'est nul. Parlons de binaire et protocol buffer”
  23. Autres implémentations • Discovery – AirBnB: Synapse, Nerve qui “proxifient”

    Zookeeper – Consuul – Etcd / CoreOs • Edge server / Gateway – Nginx – HAProxy