SlideShare una empresa de Scribd logo
1 de 24
Descargar para leer sin conexión
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 ?

Más contenido relacionado

La actualidad más candente

Docker le buzz est il justifié ?
Docker le buzz est il justifié ? Docker le buzz est il justifié ?
Docker le buzz est il justifié ? Romain Chalumeau
 
Présentation docker et kubernetes
Présentation docker et kubernetesPrésentation docker et kubernetes
Présentation docker et kubernetesKiwi Backup
 
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 ContinueVincent Composieux
 
Introduction to WebRTC on iOS
Introduction to WebRTC on iOSIntroduction to WebRTC on iOS
Introduction to WebRTC on iOSCocoaHeads France
 
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 projetsOCTO Technology
 
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 !Publicis Sapient Engineering
 
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)Publicis Sapient Engineering
 
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, KubernetesVincent Composieux
 
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...Publicis Sapient Engineering
 
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 ...Cédric Leblond
 
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)Publicis Sapient Engineering
 
Industrialisation PHP - Canal+
Industrialisation PHP - Canal+Industrialisation PHP - Canal+
Industrialisation PHP - Canal+ekino
 
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 ComposeDamien Duportal
 
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 RancherAnthony Sigogne
 
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]Silicon Comté
 
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 ?Membré Guillaume
 
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 ?ALTER WAY
 

La actualidad más candente (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 ?
 

Destacado

12 factor app an introduction
12 factor app an introduction12 factor app an introduction
12 factor app an introductionKrishna-Kumar
 
Setup docker on existing application
Setup docker on existing applicationSetup docker on existing application
Setup docker on existing applicationLuc Juggery
 
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 DockerErin Schnabel
 
Brief tutorial on Git
Brief tutorial on GitBrief tutorial on Git
Brief tutorial on Git聖文 鄭
 
12 FACTOR APP WITH DOCKER
12 FACTOR APP WITH DOCKER12 FACTOR APP WITH DOCKER
12 FACTOR APP WITH DOCKERTREEPTIK
 
(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 ...Amazon Web Services
 
Heroku Javaで12-Factor App
Heroku Javaで12-Factor App Heroku Javaで12-Factor App
Heroku Javaで12-Factor App Mitch Okamoto
 
Advanced Git
Advanced GitAdvanced Git
Advanced Gitsegv
 
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-valesoirbe
 
Customer Service - Banco Sabadell
Customer Service - Banco SabadellCustomer Service - Banco Sabadell
Customer Service - Banco SabadellXavier 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 CyrErek Cyr
 
ματιές στο ναύπλιο
ματιές στο ναύπλιοματιές στο ναύπλιο
ματιές στο ναύπλιοsxoliastis
 
ADVN - archief en onderzoekscentrum
ADVN - archief en onderzoekscentrumADVN - archief en onderzoekscentrum
ADVN - archief en onderzoekscentrumTom Cobbaert
 
Empalme de números índices
Empalme de números índicesEmpalme de números índices
Empalme de números índicesbertalozano3105
 
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 2012Agile Financial Technologies
 
ฉันเหมือนใคร
ฉันเหมือนใครฉันเหมือนใคร
ฉันเหมือนใครminddddd
 

Destacado (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
 
ฉันเหมือนใคร
ฉันเหมือนใครฉันเหมือนใคร
ฉันเหมือนใคร
 

Similar a 12-Factor

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...MSDEVMTL
 
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...XavierPestel
 
Partie 2: Angular
Partie 2: AngularPartie 2: Angular
Partie 2: AngularHabib Ayad
 
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.jsTelecomValley
 
Autour de Node.js - TechConf#3
Autour de Node.js - TechConf#3Autour de Node.js - TechConf#3
Autour de Node.js - TechConf#3Luc Juggery
 
Présentation CoreOS
Présentation CoreOSPrésentation CoreOS
Présentation CoreOSgcatt
 
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 ?GreenIvory
 
Apache flink - prise en main rapide
Apache flink - prise en main rapideApache flink - prise en main rapide
Apache flink - prise en main rapideBilal Baltagi
 
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...Publicis Sapient Engineering
 
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...Ayoub Rouzi
 
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 mareValtech
 
Introduction à web assembly
Introduction à web assemblyIntroduction à web assembly
Introduction à web assemblyJérémy Buget
 
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 JonasMicrosoft
 
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...sebastienmoreno
 
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 searchIdriss Neumann
 
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...Alexandre Touret
 
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éallCloudOps2005
 

Similar a 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.