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

Architecture microservices hautement disponible...

Architecture microservices hautement disponible au sein d’un cluster Swarm @ Paris Container Day

Les conteneurs épousent la philosophie des architectures microservices. Nous vous présenterons un socle technique résilient et scalable pour distribuer des microservices sur une infrastructure s’appuyant sur Docker Swarm pour l’orchestration des conteneurs et Interlock avec HAProxy pour la gestion du Service Discovery, le tout accessible depuis le Cloud. Nous déploierons au sein de cette infrastructure une application de trombinoscope développée en architecture microservices. Chaque individu présent au sein du trombinoscope sera représenté par un microservice spécifique, que nous pourrons déployer et faire scaler au sein du cluster. Avec autant de microservices, il est nécessaire de mesurer leur état, nous vous présenterons également les outils de supervision que nous avons mis en place au sein de la solution.

Jean-Louis Rigau

June 29, 2016
Tweet

More Decks by Jean-Louis Rigau

Other Decks in Programming

Transcript

  1. @ContainerDay16 @jlrigau @tauffredou Jean-Louis RIGAU @jlrigau Continuous Delivery, DevOps and

    Docker @ Xebia IT Architects Thomas AUFFREDOU @tauffredou Continuous Delivery, DevOps and Docker @ Xebia IT Architects
  2. @ContainerDay16 @jlrigau @tauffredou Contexte La startup Tromb'In souhaite révolutionner le

    marché des réseaux sociaux en proposant une application de trombinoscope offrant une fonctionnalité de vote innovante. Elle a fait le choix de développer son application en s’appuyant sur une architecture microservices et de gérer l’ensemble de son infrastructure sur Amazon AWS. Elle a entendu parler de Docker et souhaite mettre en place une solution d’orchestration de conteneurs résiliente et scalable pour déployer son application.
  3. @ContainerDay16 @jlrigau @tauffredou • Identity ◦ Affiche une identité :

    nom + photo ◦ Permet de voter ◦ Génère un évènement à chaque vote • Messaging Channel ◦ Redis en Publish/Subscribe • Service Discovery ◦ Liste l’ensemble des applications Identity • Trombinoscope ◦ Liste l’ensemble des identités ◦ Affiche le nombre de votes (Hit/Sec) Une application, plusieurs services
  4. @ContainerDay16 @jlrigau @tauffredou Architecture globale Messaging Channel Identity Service Discovery

    Trombinoscope Identity Identity Identity Identity Identity <publish> <register> <subscribe> <discover>
  5. @ContainerDay16 @jlrigau @tauffredou “Microservices” • 1 identité = 1 service

    • Composition de services • Mécanisme de Service Discovery • Architecture orientée évènements • Paradigme de message Publish/Subscribe
  6. @ContainerDay16 @jlrigau @tauffredou • Mise en place d’un cluster Docker

    Swarm ◦ 3 masters en quorum + 5 nodes • Utilisation de Consul comme KV-Store ◦ Configuration du cluster + Overlay Network • Service discovery avec Interlock avec Nginx ◦ Exposition de l’ensemble des services • Load Balancing avec Amazon ELB ◦ masters sur le port 3375 ◦ nodes sur le port 80 • Gestion des DNS avec Route 53 ◦ admin ◦ *.service Choix d’infrastructure
  7. @ContainerDay16 @jlrigau @tauffredou Schéma d’infrastructure node #2 node #3 node

    #4 node #5 master #1 master #2 master #3 Docker Engine Docker Engine Docker Engine node #1 Docker Engine Inter lock Docker Engine Inter lock Docker Engine Inter lock Docker Engine Inter lock Docker Engine Inter lock Elastic Load Balancing Elastic Load Balancing Amazon Route 53 Amazon Route 53 80:80 *.service 3375:3375 admin Masters Nodes
  8. @ContainerDay16 @jlrigau @tauffredou Création de l’infrastructure • Entièrement sur Amazon

    AWS • Terraform pour automatiser la création de l’infrastructure ◦ Instances Amazon EC2 ◦ Security Groups ◦ Elastic Load Balancing ◦ Règles Route 53 • Nombre d’instances configurable $ make launch-infra
  9. @ContainerDay16 @jlrigau @tauffredou Génération de l’inventaire • Génération de l’inventaire

    pour Ansible ◦ à partir des données de Terraform ◦ script en javascript pour la conversion $ make terraform-to-ansible
  10. @ContainerDay16 @jlrigau @tauffredou Provisioning des instances • Provisioning des instances

    avec Ansible ◦ Installation de docker ◦ Configuration du cluster ◦ Déploiement de conteneurs de base $ make configure
  11. @ContainerDay16 @jlrigau @tauffredou Déploiement de l’application • Compilation en utilisant

    un conteneur de build • Création des images applicatives • Stockage des images sur le Docker Hub • Déploiement avec Docker Compose $ docker-compose up -d
  12. @ContainerDay16 @jlrigau @tauffredou Scalabilité ? Service Discovery Trombinoscope <register> <discover>

    interlock Identity Identity Identity 80:80 *.service 3375:3375 admin
  13. @ContainerDay16 @jlrigau @tauffredou Scalabilité de l’application • Ajout de nouvelles

    instances avec Docker Compose $ docker-compose scale jlrigau=3 tauffredou=3