22
@ContainerDay16 @jlrigau @tauffredou Architecture microservices hautement disponible au sein d’ un cluster Swarm

Paris Container Day 2016 : Architecture microservices hautement disponible au sein d’un cluster swarm (Xebia)

Embed Size (px)

Citation preview

@ContainerDay16 @jlrigau @tauffredou

Architecture microservices hautement disponible au sein d’un cluster Swarm

@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

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

@ContainerDay16 @jlrigau @tauffredou

Trombinoscope

@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

@ContainerDay16 @jlrigau @tauffredou

Architecture globale

Messaging Channel

Identity

Service Discovery

Trombinoscope

Identity Identity

IdentityIdentity

Identity

<publish>

<register>

<subscribe>

<discover>

@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

@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

@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

Interlock

Docker Engine

Interlock

Docker Engine

Interlock

Docker Engine

Interlock

Docker Engine

Interlock

Elastic Load Balancing

Elastic Load BalancingAmazon Route 53

Amazon Route 5380:80

*.service

3375:3375admin

Masters

Nodes

@ContainerDay16 @jlrigau @tauffredou

Workflow de mise en oeuvre

Création de l’infrastructure Provisioning Déploiement

@ContainerDay16 @jlrigau @tauffredou

Création de l’infrastructure avec Terraform

@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

@ContainerDay16 @jlrigau @tauffredou

Provisioning des instances avec Ansible

@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

@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

@ContainerDay16 @jlrigau @tauffredou

Déploiement de l’application avec Docker Compose

@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

@ContainerDay16 @jlrigau @tauffredou

Scalabilité de l’application avec Docker Compose

@ContainerDay16 @jlrigau @tauffredou

Scalabilité ?

Service Discovery

Trombinoscope

<register><discover>

interlockIdentity

Identity

Identity

80:80*.service

3375:3375admin

@ContainerDay16 @jlrigau @tauffredou

Scalabilité de l’application

● Ajout de nouvelles instances avec Docker Compose

$ docker-compose scale jlrigau=3 tauffredou=3

@ContainerDay16 @jlrigau @tauffredou

Sourceshttps://github.com/xebia-france/xke-haswarm

@ContainerDay16 @jlrigau @tauffredou

Q&A