SlideShare ist ein Scribd-Unternehmen logo
1 von 24
Downloaden Sie, um offline zu lesen
12-Factor application
… avec un peu de Node.js et un peu de Docker
@lucjuggery - SophiaConf 04/07/2016
Quelques mots sur TRAXxs
● Startup créée en 2013
● IoT / wearable - semelles connectées
● Hardware / Software (embarqué, api, front)
● Protection du travailleur isolé (PTI)
Origine de la méthodologie
● De nombreuses applications en SaaS
● Retour d’expérience des déploiements sur Heroku
● Manifeste de création d’applications web en 12 facteurs
○ Portabilité
○ Scalabilité horizontale
○ Cloud-ready
● Approche sous forme de checklist
Un fil conducteur
● Une application à faire évoluer avec la méthodologie 12-Factor
● API HTTP Rest Node.js / Sails.js
$ sails new messageApp
$ cd messageApp
$ sails generate api message
$ npm start
$ curl -XPOST http://localhost:1337/message?text=hello
{
"text": "hello",
"createdAt": "2016-06-15T19:22:41.211Z",
"updatedAt": "2016-06-15T19:22:41.211Z",
"id": 1
}
$ curl http://localhost:1337/message
[
{
"text": "hello",
"createdAt": "2016-06-15T19:22:41.211Z",
"updatedAt": "2016-06-15T19:22:41.211Z",
"id": 1
}
]
Creation
Test
1. Codebase
● Une application ⇔ un repo pour versionner le code
● Plusieurs déploiement de l’application
$ echo "# messageApp" >> README.md
$ git init
$ git add .
$ git commit -m 'First commit'
$ git remote add origin git@github.com:lucj/messageApp.git
$ git push origin master
Création de messageApp sur Github Create et push 1er commit
2. Dépendances
● Doivent être déclarées et isolées
● Déclaration dans le fichier package.json
● Isolation dans le répertoire node_modules
"dependencies": {
"ejs": "2.3.4",
"grunt": "0.4.5",
"grunt-contrib-clean": "0.6.0",
"grunt-contrib-coffee": "0.13.0",
"grunt-contrib-concat": "0.5.1",
...
"grunt-sails-linker": "~0.10.1",
"grunt-sync": "0.2.4",
"include-all": "~0.1.6",
"rc": "1.0.1",
"sails": "~0.12.3",
"sails-disk": "~0.10.9",
"sails-mongo": "^0.12.0"
},
package.json
$ npm install sails-mongo --save
3. Configuration
● Dans les variables d’environnement
○ identifiants
○ connexion à des services tiers
○ ...
● Découplage du code et de l’environnement d’execution
module.exports.connections = {
mongo: {
adapter: 'sails-mongo',
url: process.env.MONGO_URL'
}
};
config/connection.js
4. Services externes
● Ensemble des services réseau utilisés par l’application
○ Database, Message Queue, Logs, API, …
● Pas de distinction entre les services locaux et les services tiers
● Ressources que l’on doit pouvoir remplacer
● Assure le découplage (loosely coupled)
5. Build / Release / Run
● Séparation des différentes étapes
● Une release est déployée sur l’environnement d’execution et est immutable
Build
FROM mhart/alpine-node:4.4.5
# Copy list of dependencies
COPY package.json /tmp/package.json
# Install dependencies
RUN cd /tmp && npm install
# Copy dependencies libraries
RUN mkdir /app && cp -a /tmp/node_modules /app/
# Change working directory
WORKDIR /app
# Copy source code
COPY . /app
# Expose API port to the outside
EXPOSE 80
# Launch application
CMD ["npm","start"]
Dockerfile
● Utilisation de Docker
● Instructions dans le fichier Dockerfile
● Creation d’une image de l’application
○ docker build -t message-app:1.2 .
Release
● Utilisation de Docker Compose
● Injection de la configuration
● Executé par un orchestrateur ou avec la CLI
● Ouverture vers une architecture microservices
○ ajout possible de services associés à l’application
docker-compose.yml
version: '2'
services:
app:
image: message-app:1.2
ports:
- "8000:80"
environment:
- MONGO_URL=mongodb://mysite.com/mydb
6. Processus
● Une application est constituée de processus stateless qui ne partagent rien
● Pas de stockage en local (mémoire, disk) mais dans une ressource stateful
● Pas de sticky sessions mais un KV Store (ex: Redis)
module.exports.session = {
...
adapter: 'redis',
host: process.env.REDIS_HOST
};
config/sessions.js
7. Associations de ports
● Exposition d’une application via un port
● Utilisation de dépendances spécialisées (serveur http, …)
○ application autonome
● Requêtes routées depuis l’environnement d’execution
app:
image: message-app:1.2
ports:
- "8000:80"
environment:
- MONGO_URL=mongodb://mysite.com/mydb
docker-compose.yml
8. Concurrence
● Application constituée de différents types de processus
● Scalabilité horizontale à l’aide du modèle de processus
# Kafka message broker
zookeeper:
image: wurstmeister/zookeeper
ports:
- "2181:2181"
kafka:
image: wurstmeister/kafka
ports:
- "9092:9092"
links:
- zookeeper:zk
environment:
KAFKA_ADVERTISED_HOST_NAME: 192.168.99.100
KAFKA_CREATE_TOPICS: "DATA:1:1"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
9. Jetable
● Pet vs Cattle
● Démarrage rapide
● Arrêt gracieux
● Robustesse au crash
Kafka pour processus de type worker
10. Parité dev / prod
● Alignement des environnements
○ outils
○ niveau de code
● Docker très bon pour minimiser le gap
● Nombreux outils disponibles sur le hub
● Orienté déploiement continu
version: '2'
services:
redis:
image: redis:alpine
zookeeper:
image: wurstmeister/zookeeper
kafka:
image: wurstmeister/kafka
app:
image: message-app:1.2
ports:
- "8000:80"
depends_on:
- redis
- kafka
environment:
- MONGO_URL=mongodb://mysite.com/mydb
- REDIS_HOST=redis
- MQ_HOST=kafka
volumes:
networks:
docker-compose.yml
11. Logs
● Un flux d’évènements temporel
● Dirigé vers stdout / stderr (pas de fichier de logs en local)
● Gestion centralisée pour faciliter leur exploitation
log:
command: '-t a80277ea-4233-7785203ae328'
image: 'logentries/docker-logentries’
restart: always
tags:
- development
volumes:
- '/var/run/docker.sock:/var/run/docker.sock'
Utilisation de de logentries
12. Processus d’administration
● One-off processus
● Executé sur la même release que l’application
● Définition d’un service en “standby” dans le fichier compose
○ accès à l’ensemble des services de l’application
12-Factor application - en résumé
● Méthodologie à étudier
● Prépare une application à un déploiement “cloud”
● Quelles adaptations pour une architecture microservices ?
● Approche Docker / Docker Compose
○ découpage de l’application
○ enrichissement avec des outils
○ portabilité
Questions ?

Weitere ähnliche Inhalte

Was ist angesagt?

Was ist angesagt? (20)

Docker le buzz est il justifié ?
Docker le buzz est il justifié ? Docker le buzz est il justifié ?
Docker le buzz est il justifié ?
 
REX Openshift à la Poste
REX Openshift à la PosteREX Openshift à la Poste
REX Openshift à la Poste
 
Présentation docker et kubernetes
Présentation docker et kubernetesPrésentation docker et kubernetes
Présentation docker et kubernetes
 
Gitlab CI : Integration et Déploiement Continue
Gitlab CI : Integration et Déploiement ContinueGitlab CI : Integration et Déploiement Continue
Gitlab CI : Integration et Déploiement Continue
 
Introduction to WebRTC on iOS
Introduction to WebRTC on iOSIntroduction to WebRTC on iOS
Introduction to WebRTC on iOS
 
Petit-déjeuner OCTO - L'Infra au service de ses projets
Petit-déjeuner OCTO - L'Infra au service de ses projetsPetit-déjeuner OCTO - L'Infra au service de ses projets
Petit-déjeuner OCTO - L'Infra au service de ses projets
 
Devoxx France : Kubernetes University, Cap sur l’orchestration Docker !
Devoxx France : Kubernetes University, Cap sur l’orchestration Docker !Devoxx France : Kubernetes University, Cap sur l’orchestration Docker !
Devoxx France : Kubernetes University, Cap sur l’orchestration Docker !
 
Paris Container Day 2016 : Les nouveaux défis du déploiement (Xebia Labs)
Paris Container Day 2016 : Les nouveaux défis du déploiement (Xebia Labs)Paris Container Day 2016 : Les nouveaux défis du déploiement (Xebia Labs)
Paris Container Day 2016 : Les nouveaux défis du déploiement (Xebia Labs)
 
Retour d'expérience technique Go, gRPC, Kubernetes
Retour d'expérience technique Go, gRPC, KubernetesRetour d'expérience technique Go, gRPC, Kubernetes
Retour d'expérience technique Go, gRPC, Kubernetes
 
Intro to docker
Intro to dockerIntro to docker
Intro to docker
 
Paris Container Day 2016 : De la construction au déploiement d’applications...
Paris Container Day 2016 :  De la construction au déploiement d’applications...Paris Container Day 2016 :  De la construction au déploiement d’applications...
Paris Container Day 2016 : De la construction au déploiement d’applications...
 
Retour d'expérience Docker: Puissance et simplicité de VSTS, déploiement sur ...
Retour d'expérience Docker: Puissance et simplicité de VSTS, déploiement sur ...Retour d'expérience Docker: Puissance et simplicité de VSTS, déploiement sur ...
Retour d'expérience Docker: Puissance et simplicité de VSTS, déploiement sur ...
 
Paris Container Day 2016 : Cloudunit v2 (Treeptik)
Paris Container Day 2016 : Cloudunit v2 (Treeptik)Paris Container Day 2016 : Cloudunit v2 (Treeptik)
Paris Container Day 2016 : Cloudunit v2 (Treeptik)
 
Industrialisation PHP - Canal+
Industrialisation PHP - Canal+Industrialisation PHP - Canal+
Industrialisation PHP - Canal+
 
Chroniques de formation : Scaling Code Labs avec Swarm et Compose
Chroniques de formation : Scaling Code Labs avec Swarm et ComposeChroniques de formation : Scaling Code Labs avec Swarm et Compose
Chroniques de formation : Scaling Code Labs avec Swarm et Compose
 
Déploiement et gestion d'un site web avec Rancher
Déploiement et gestion d'un site web avec RancherDéploiement et gestion d'un site web avec Rancher
Déploiement et gestion d'un site web avec Rancher
 
Intro docker
Intro dockerIntro docker
Intro docker
 
Docker ! De la découverte à la mise en production / Digital apéro [19/03/2015]
Docker ! De la découverte à la mise en production / Digital apéro [19/03/2015]Docker ! De la découverte à la mise en production / Digital apéro [19/03/2015]
Docker ! De la découverte à la mise en production / Digital apéro [19/03/2015]
 
CI, CD, pipelines, conteneurs : la cohabitation est elle possible ?
CI, CD, pipelines, conteneurs : la cohabitation est elle possible ?CI, CD, pipelines, conteneurs : la cohabitation est elle possible ?
CI, CD, pipelines, conteneurs : la cohabitation est elle possible ?
 
Alter Way's digitalks - Docker : des conteneurs pour tout faire ?
Alter Way's digitalks - Docker  : des conteneurs pour tout faire ?Alter Way's digitalks - Docker  : des conteneurs pour tout faire ?
Alter Way's digitalks - Docker : des conteneurs pour tout faire ?
 

Andere mochten auch

Advanced Git
Advanced GitAdvanced Git
Advanced Git
segv
 
180180219 de-toekomst-van-confederaal-belgie-volgens-n-va
180180219 de-toekomst-van-confederaal-belgie-volgens-n-va180180219 de-toekomst-van-confederaal-belgie-volgens-n-va
180180219 de-toekomst-van-confederaal-belgie-volgens-n-va
lesoirbe
 
Customer Service - Banco Sabadell
Customer Service - Banco SabadellCustomer Service - Banco Sabadell
Customer Service - Banco Sabadell
Xavier Marin
 
Japan, Korea and India - Cross Cultural Paper - by Erek Cyr
Japan, Korea and India - Cross Cultural Paper - by Erek CyrJapan, Korea and India - Cross Cultural Paper - by Erek Cyr
Japan, Korea and India - Cross Cultural Paper - by Erek Cyr
Erek Cyr
 
ματιές στο ναύπλιο
ματιές στο ναύπλιοματιές στο ναύπλιο
ματιές στο ναύπλιο
sxoliastis
 
ฉันเหมือนใคร
ฉันเหมือนใครฉันเหมือนใคร
ฉันเหมือนใคร
minddddd
 

Andere mochten auch (20)

12 factor app an introduction
12 factor app an introduction12 factor app an introduction
12 factor app an introduction
 
Setup docker on existing application
Setup docker on existing applicationSetup docker on existing application
Setup docker on existing application
 
12-factor applications using WAS Liberty, IBM Bluemix, and Docker
12-factor applications using WAS Liberty, IBM Bluemix, and Docker12-factor applications using WAS Liberty, IBM Bluemix, and Docker
12-factor applications using WAS Liberty, IBM Bluemix, and Docker
 
Brief tutorial on Git
Brief tutorial on GitBrief tutorial on Git
Brief tutorial on Git
 
12-Factor App
12-Factor App12-Factor App
12-Factor App
 
12 FACTOR APP WITH DOCKER
12 FACTOR APP WITH DOCKER12 FACTOR APP WITH DOCKER
12 FACTOR APP WITH DOCKER
 
(DVO308) Docker & ECS in Production: How We Migrated Our Infrastructure from ...
(DVO308) Docker & ECS in Production: How We Migrated Our Infrastructure from ...(DVO308) Docker & ECS in Production: How We Migrated Our Infrastructure from ...
(DVO308) Docker & ECS in Production: How We Migrated Our Infrastructure from ...
 
Heroku Javaで12-Factor App
Heroku Javaで12-Factor App Heroku Javaで12-Factor App
Heroku Javaで12-Factor App
 
Advanced Git
Advanced GitAdvanced Git
Advanced Git
 
180180219 de-toekomst-van-confederaal-belgie-volgens-n-va
180180219 de-toekomst-van-confederaal-belgie-volgens-n-va180180219 de-toekomst-van-confederaal-belgie-volgens-n-va
180180219 de-toekomst-van-confederaal-belgie-volgens-n-va
 
Customer Service - Banco Sabadell
Customer Service - Banco SabadellCustomer Service - Banco Sabadell
Customer Service - Banco Sabadell
 
Citations
CitationsCitations
Citations
 
Japan, Korea and India - Cross Cultural Paper - by Erek Cyr
Japan, Korea and India - Cross Cultural Paper - by Erek CyrJapan, Korea and India - Cross Cultural Paper - by Erek Cyr
Japan, Korea and India - Cross Cultural Paper - by Erek Cyr
 
ματιές στο ναύπλιο
ματιές στο ναύπλιοματιές στο ναύπλιο
ματιές στο ναύπλιο
 
ADVN - archief en onderzoekscentrum
ADVN - archief en onderzoekscentrumADVN - archief en onderzoekscentrum
ADVN - archief en onderzoekscentrum
 
Empalme de números índices
Empalme de números índicesEmpalme de números índices
Empalme de números índices
 
Big spatial2014 mapreduceweights
Big spatial2014 mapreduceweightsBig spatial2014 mapreduceweights
Big spatial2014 mapreduceweights
 
Interview in The Policy Magazine, The UAE Insurance Report 2012
Interview in The Policy Magazine, The UAE Insurance Report 2012Interview in The Policy Magazine, The UAE Insurance Report 2012
Interview in The Policy Magazine, The UAE Insurance Report 2012
 
12 3 12 leccion
12 3 12 leccion12 3 12 leccion
12 3 12 leccion
 
ฉันเหมือนใคร
ฉันเหมือนใครฉันเหมือนใคร
ฉันเหมือนใคร
 

Ähnlich wie 12-Factor

Ähnlich wie 12-Factor (20)

Sébastien Coutu: Copy this Meetup Devops - microservices - infrastructure imm...
Sébastien Coutu: Copy this Meetup Devops - microservices - infrastructure imm...Sébastien Coutu: Copy this Meetup Devops - microservices - infrastructure imm...
Sébastien Coutu: Copy this Meetup Devops - microservices - infrastructure imm...
 
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...
 
Partie 2: Angular
Partie 2: AngularPartie 2: Angular
Partie 2: Angular
 
2014.12.11 - TECH CONF #3 - Présentation Node.js
2014.12.11 - TECH CONF #3 - Présentation Node.js2014.12.11 - TECH CONF #3 - Présentation Node.js
2014.12.11 - TECH CONF #3 - Présentation Node.js
 
Autour de Node.js - TechConf#3
Autour de Node.js - TechConf#3Autour de Node.js - TechConf#3
Autour de Node.js - TechConf#3
 
Présentation CoreOS
Présentation CoreOSPrésentation CoreOS
Présentation CoreOS
 
Flex, une techno RIA incontournable pour les futures app web ?
Flex, une techno RIA incontournable pour les futures app web ?Flex, une techno RIA incontournable pour les futures app web ?
Flex, une techno RIA incontournable pour les futures app web ?
 
Apache flink - prise en main rapide
Apache flink - prise en main rapideApache flink - prise en main rapide
Apache flink - prise en main rapide
 
XebiCon'17 : Monitoring et métrologie pour les conteneurs - Jean-Pascal Thie...
XebiCon'17 : Monitoring et métrologie pour les conteneurs - Jean-Pascal Thie...XebiCon'17 : Monitoring et métrologie pour les conteneurs - Jean-Pascal Thie...
XebiCon'17 : Monitoring et métrologie pour les conteneurs - Jean-Pascal Thie...
 
NFS, MPI, Programmation Sérial & Parallèle avec Condor Scénarios et Simulatio...
NFS, MPI, Programmation Sérial & Parallèle avec Condor Scénarios et Simulatio...NFS, MPI, Programmation Sérial & Parallèle avec Condor Scénarios et Simulatio...
NFS, MPI, Programmation Sérial & Parallèle avec Condor Scénarios et Simulatio...
 
Node.js, le pavé dans la mare
Node.js, le pavé dans la mareNode.js, le pavé dans la mare
Node.js, le pavé dans la mare
 
Introduction à web assembly
Introduction à web assemblyIntroduction à web assembly
Introduction à web assembly
 
Java dans Windows Azure: l'exemple de Jonas
Java dans Windows Azure: l'exemple de JonasJava dans Windows Azure: l'exemple de Jonas
Java dans Windows Azure: l'exemple de Jonas
 
Lost in serverless AWS Lambda, Google Cloud Function, Azure Function quelle s...
Lost in serverless AWS Lambda, Google Cloud Function, Azure Function quelle s...Lost in serverless AWS Lambda, Google Cloud Function, Azure Function quelle s...
Lost in serverless AWS Lambda, Google Cloud Function, Azure Function quelle s...
 
HTML5 en projet
HTML5 en projetHTML5 en projet
HTML5 en projet
 
Catalogue PFE 2019
Catalogue PFE 2019Catalogue PFE 2019
Catalogue PFE 2019
 
Bbl microservices avec vert.x cdi elastic search
Bbl microservices avec vert.x cdi elastic searchBbl microservices avec vert.x cdi elastic search
Bbl microservices avec vert.x cdi elastic search
 
Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...
Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...
Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...
 
Plateformes et infrastructure infonuagique natif de ville de Montréall
Plateformes et infrastructure infonuagique natif de ville de MontréallPlateformes et infrastructure infonuagique natif de ville de Montréall
Plateformes et infrastructure infonuagique natif de ville de Montréall
 
Vert.x 3
Vert.x 3Vert.x 3
Vert.x 3
 

12-Factor

  • 1. 12-Factor application … avec un peu de Node.js et un peu de Docker @lucjuggery - SophiaConf 04/07/2016
  • 2. Quelques mots sur TRAXxs ● Startup créée en 2013 ● IoT / wearable - semelles connectées ● Hardware / Software (embarqué, api, front) ● Protection du travailleur isolé (PTI)
  • 3. Origine de la méthodologie ● De nombreuses applications en SaaS ● Retour d’expérience des déploiements sur Heroku ● Manifeste de création d’applications web en 12 facteurs ○ Portabilité ○ Scalabilité horizontale ○ Cloud-ready ● Approche sous forme de checklist
  • 4.
  • 5.
  • 6. Un fil conducteur ● Une application à faire évoluer avec la méthodologie 12-Factor ● API HTTP Rest Node.js / Sails.js $ sails new messageApp $ cd messageApp $ sails generate api message $ npm start $ curl -XPOST http://localhost:1337/message?text=hello { "text": "hello", "createdAt": "2016-06-15T19:22:41.211Z", "updatedAt": "2016-06-15T19:22:41.211Z", "id": 1 } $ curl http://localhost:1337/message [ { "text": "hello", "createdAt": "2016-06-15T19:22:41.211Z", "updatedAt": "2016-06-15T19:22:41.211Z", "id": 1 } ] Creation Test
  • 7. 1. Codebase ● Une application ⇔ un repo pour versionner le code ● Plusieurs déploiement de l’application $ echo "# messageApp" >> README.md $ git init $ git add . $ git commit -m 'First commit' $ git remote add origin git@github.com:lucj/messageApp.git $ git push origin master Création de messageApp sur Github Create et push 1er commit
  • 8. 2. Dépendances ● Doivent être déclarées et isolées ● Déclaration dans le fichier package.json ● Isolation dans le répertoire node_modules "dependencies": { "ejs": "2.3.4", "grunt": "0.4.5", "grunt-contrib-clean": "0.6.0", "grunt-contrib-coffee": "0.13.0", "grunt-contrib-concat": "0.5.1", ... "grunt-sails-linker": "~0.10.1", "grunt-sync": "0.2.4", "include-all": "~0.1.6", "rc": "1.0.1", "sails": "~0.12.3", "sails-disk": "~0.10.9", "sails-mongo": "^0.12.0" }, package.json $ npm install sails-mongo --save
  • 9. 3. Configuration ● Dans les variables d’environnement ○ identifiants ○ connexion à des services tiers ○ ... ● Découplage du code et de l’environnement d’execution module.exports.connections = { mongo: { adapter: 'sails-mongo', url: process.env.MONGO_URL' } }; config/connection.js
  • 10. 4. Services externes ● Ensemble des services réseau utilisés par l’application ○ Database, Message Queue, Logs, API, … ● Pas de distinction entre les services locaux et les services tiers ● Ressources que l’on doit pouvoir remplacer ● Assure le découplage (loosely coupled)
  • 11. 5. Build / Release / Run ● Séparation des différentes étapes ● Une release est déployée sur l’environnement d’execution et est immutable
  • 12. Build FROM mhart/alpine-node:4.4.5 # Copy list of dependencies COPY package.json /tmp/package.json # Install dependencies RUN cd /tmp && npm install # Copy dependencies libraries RUN mkdir /app && cp -a /tmp/node_modules /app/ # Change working directory WORKDIR /app # Copy source code COPY . /app # Expose API port to the outside EXPOSE 80 # Launch application CMD ["npm","start"] Dockerfile ● Utilisation de Docker ● Instructions dans le fichier Dockerfile ● Creation d’une image de l’application ○ docker build -t message-app:1.2 .
  • 13. Release ● Utilisation de Docker Compose ● Injection de la configuration ● Executé par un orchestrateur ou avec la CLI ● Ouverture vers une architecture microservices ○ ajout possible de services associés à l’application docker-compose.yml version: '2' services: app: image: message-app:1.2 ports: - "8000:80" environment: - MONGO_URL=mongodb://mysite.com/mydb
  • 14. 6. Processus ● Une application est constituée de processus stateless qui ne partagent rien ● Pas de stockage en local (mémoire, disk) mais dans une ressource stateful ● Pas de sticky sessions mais un KV Store (ex: Redis) module.exports.session = { ... adapter: 'redis', host: process.env.REDIS_HOST }; config/sessions.js
  • 15.
  • 16. 7. Associations de ports ● Exposition d’une application via un port ● Utilisation de dépendances spécialisées (serveur http, …) ○ application autonome ● Requêtes routées depuis l’environnement d’execution app: image: message-app:1.2 ports: - "8000:80" environment: - MONGO_URL=mongodb://mysite.com/mydb docker-compose.yml
  • 17. 8. Concurrence ● Application constituée de différents types de processus ● Scalabilité horizontale à l’aide du modèle de processus
  • 18. # Kafka message broker zookeeper: image: wurstmeister/zookeeper ports: - "2181:2181" kafka: image: wurstmeister/kafka ports: - "9092:9092" links: - zookeeper:zk environment: KAFKA_ADVERTISED_HOST_NAME: 192.168.99.100 KAFKA_CREATE_TOPICS: "DATA:1:1" volumes: - /var/run/docker.sock:/var/run/docker.sock 9. Jetable ● Pet vs Cattle ● Démarrage rapide ● Arrêt gracieux ● Robustesse au crash Kafka pour processus de type worker
  • 19. 10. Parité dev / prod ● Alignement des environnements ○ outils ○ niveau de code ● Docker très bon pour minimiser le gap ● Nombreux outils disponibles sur le hub ● Orienté déploiement continu version: '2' services: redis: image: redis:alpine zookeeper: image: wurstmeister/zookeeper kafka: image: wurstmeister/kafka app: image: message-app:1.2 ports: - "8000:80" depends_on: - redis - kafka environment: - MONGO_URL=mongodb://mysite.com/mydb - REDIS_HOST=redis - MQ_HOST=kafka volumes: networks: docker-compose.yml
  • 20. 11. Logs ● Un flux d’évènements temporel ● Dirigé vers stdout / stderr (pas de fichier de logs en local) ● Gestion centralisée pour faciliter leur exploitation log: command: '-t a80277ea-4233-7785203ae328' image: 'logentries/docker-logentries’ restart: always tags: - development volumes: - '/var/run/docker.sock:/var/run/docker.sock' Utilisation de de logentries
  • 21. 12. Processus d’administration ● One-off processus ● Executé sur la même release que l’application ● Définition d’un service en “standby” dans le fichier compose ○ accès à l’ensemble des services de l’application
  • 22. 12-Factor application - en résumé ● Méthodologie à étudier ● Prépare une application à un déploiement “cloud” ● Quelles adaptations pour une architecture microservices ? ● Approche Docker / Docker Compose ○ découpage de l’application ○ enrichissement avec des outils ○ portabilité
  • 23.