SlideShare a Scribd company logo
1 of 53
Download to read offline
Checklist pour concevoir
une application dans le
cloud
10 conseils à l'attention des concepteurs
Alexandre Touret / @touret_alex
Alexandre Touret
Architecte / Développeur
#Java #API #CI
#Software_Craftsmanship
2
@touret_alex https://blog.touret.info
Un peu de
contexte ...
1.
4
Technologies
utilisées
5
En avez vous
VRAIMENT
besoin ?
Application gestion
Périmètre maîtrisé
Déploiement déjà automatisé
7
Quelles sont les
contraintes techniques?
Avez-vous des SLOs contraignantes?
(ex. disponibilité supérieure à 99%)
Avez vous vraiment besoin de scaler dynamiquement votre
application ?
8
Mise à disposition
d’environnements
9
Avez vous besoin de délivrer des environnements à la
demande (et très rapidement)?
Les bases de
Docker & Cie
11
Il vous faudra
connaître
12
13
Le contexte
« les organisations qui conçoivent
des systèmes [...] tendent
inévitablement à produire des
designs qui sont des copies de la
structure de communication de
leur organisation. »
— M. Conway
15
Quel est le RACI ?
Est-ce que votre organisation est compatible ?
16
RACI &
Responsabilités
Les
applications
stateless et les
autres ...
18
Codebase
One codebase tracked in revision
control, many deploys
Dependencies
Explicitly declare and isolate
dependencies
Config
Store config in the environment
Backing Services
Treat backing services as attached
resources
Build, release, run
Strictly separate build and run
stages
Backing Services
Treat backing services as attached
resources
Processes
Execute the app as one or more
stateless processes
Port Binding
Export services via port binding
Disposability
Maximize robustness with fast
startup and graceful shutdown
Dev/prod parity
Keep development, staging, and
production as similar as possible
Logs
Treat logs as event streams
Admin processes
Run admin/management tasks as
one-off processes
Source: https://12factors.net
19
Pour une API
Démarrage
(rapide) de
l’application
21
Bien choisir ses
frameworks et
environnements
d’exécution
23
24
Items à identifier
✓ Rapidité du démarrage
✓ Gestion des arrêts
✓ Capacité à s’intégrer dans Docker et K8S
✓ Observabilité
✓ Mémoire et CPU utilisées
✓ Gestion des dépendances et du patch management
TOMCAT vs FAT JARS
→ Un compromis Production - Équipes de développement
25
L’ observabilité
Adresser sur ce sujet
dès la conception !
Ne pas attendre la mise en production :)
Exposer via des endpoints REST l’état de votre système
Faire attention aux FRAMEWORKS utilisés
27
liveness &
readiness probes
livenessProbe:
failureThreshold: 3
httpGet:
path: /actuator/health/liveness
port: http
scheme: HTTP
initialDelaySeconds: 30
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 1
28
readinessProbe:
failureThreshold: 3
httpGet:
path: /actuator/health/readiness
port: http
scheme: HTTP
initialDelaySeconds: 30
periodSeconds: 30
successThreshold: 1
timeoutSeconds: 1
Spring Actuator
management.health.probes.enabled=true
LivenessStateHealthIndicator & ReadinessStateHealthIndicator
29
30
@Component
public class MongoDBActuatorHealthIndicator implements HealthIndicator {
[...]
@Override
public Health health() {
// ping database
}
@Override
public Health getHealth(boolean includeDetails) {
if (!includeDetails) {
return health();
} else {
var statuses = mongoDBHealthService.findStatusForAllConfigurations();
return Health.status(checkStatus(statuses)).withDetails(statuses).build();
}
}
[...]
}
Monitoring
▪ Prometheus
▪ Grafana
31
La CI/CD
Étapes à intégrer
dans votre chaîne
✓ Tests unitaires + intégration
✓ Création d’image Docker automatique
✓ “Smoke tests” de l’image crée
✓ Déploiement continu de la branche develop
✓ Déploiement de vos charts HELM (linter?)
✓ Déploiement d’une release
✓ ... 33
Exemple
Migration Spring Boot, Tomcat, JDK
Testé en local → Dev → Recette
⇒ En 1 jour
34
La
configuration
36
▪ Variables d’environnement
▪ Config Maps
▪ Secrets
Les variables
d’environnement
spec:
containers:
- env:
- name: JAVA_OPTS
value: >-
-XX:+UseContainerSupport -XX:MaxRAMPercentage=70.0
-Dfile.encoding=UTF-8 -
Djava.security.egd=file:/dev/./urandom
37
Les config maps
apiVersion: v1
kind: ConfigMap
metadata:
creationTimestamp: 2021-03-11T18:38:34Z
name: my-config-map
[...]
data:
JAVA_OPTS: >-
-XX:+UseContainerSupport -XX:MaxRAMPercentage=70.0
-Dfile.encoding=UTF-8 -Djava.security.egd=file:/dev/./urandom
38
Quid des fichiers
de configuration ?
On peut les spécifier “comme des variables” directement
dans les config maps
On peut les externaliser
39
Les fichiers dans
les config maps
volumeMounts:
- mountPath: /config
name: configuration-volume
readOnly: true
[...]
volumes:
- configMap:
defaultMode: 420
name: configuration
name: configuration-volume
40
apiVersion: v1
kind: ConfigMap
[...]
data:
my.conf: {{- (.Files.Glob
"conf/*").AsConfig | nindent 2 }}
Externaliser les
valeurs
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
labels:
[...]
spec:
maxReplicas: {{ .Values.myapp.maxReplicaCount }}
minReplicas: {{ .Values.myapp.minReplicaCount }}
[...]
targetCPUUtilizationPercentage: {{ .Values.myapp.replicationThreesold }} 41
Le fichier
values.yml
myapp:
minReplicaCount: "2"
maxReplicaCount: "6"
replicationThreesold: 80
42
Les templates de
fichier
apiVersion: v1
kind: ConfigMap
metadata:
name: configuration
labels:
[...]
data:
application.properties:
|-
{{ tpl (.Files.Get "conf/application.properties") . | nindent 4}}
43
Les templates
Le fichier application.properties
logging.level.org.hibernate.stat={{
.Values.configmap.application.org_hib
ernate_stat }}
logging.level.org.springframework.sec
urity={{
.Values.configmap.application.org_spr
ingframework_security }}
44
Le fichier values.yml
configmap:
application:
org_hibernate_stat: ERROR
org_springframework_security:
ERROR
Les fichiers
binaires
apiVersion: v1
# Definition of secrets
kind: Secret
[...]
type: Opaque
# Inclusion of binary configuration files
data:
my_keystore.jks: {{ .Files.Get "secrets/my_keystore.jks" | b64enc }}
45
Logger
efficacement
L’utilisation des
logs
Dans la console:
kubectl logs --tail
Agrégateur de logs (ex. ELK)
47
Flux de sortie des
containers Docker
stdout & stderr
Inutile de configurer la sortie vers des fichiers
48
Bonnes pratiques
Indiquer dans vos LOGS:
Les éléments de votre conteneur (Image, containerID,...)
Les éléments de contexte K8S (IP POD, ID POD,
namespace,...)
Log4j Docker Support – Log4j Kubernetes Support
49
Pour aller plus loin
Vous pouvez logger et tracer les appels à vos APIS:
Requête, ID de l’appelant, ID de corrélation,...
zalando/logbook: An extensible Java library for HTTP request and response
logging
50
Merci!
Des questions?
@touret_alex
51
11 mars 2021
Sharing is caring!
Tweettez @TheCloudFirstIO #TCF21
et tentez de gagnez vos stickers collector !
10 gagnants seront tirés
au sort dans la journée
Cette session vous a plu ?
Faites-nous votre retour,
et gagnez peut-être l’un des
30 packs stickers collector!
https://feedback.thecloudfirst.io

More Related Content

Similar to Checklist pour concevoir une application dans le cloud.10 conseils à l'attention des développeurs

ASD2020-05b-MBSE-EricThomas.pdf
ASD2020-05b-MBSE-EricThomas.pdfASD2020-05b-MBSE-EricThomas.pdf
ASD2020-05b-MBSE-EricThomas.pdf
xmumiao
 
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
Atsé François-Xavier KOBON
 
TechDays 2014 : retour d'expérience Kompass migration Java dans Azure
TechDays 2014 : retour d'expérience Kompass migration Java dans AzureTechDays 2014 : retour d'expérience Kompass migration Java dans Azure
TechDays 2014 : retour d'expérience Kompass migration Java dans Azure
Thomas Conté
 

Similar to Checklist pour concevoir une application dans le cloud.10 conseils à l'attention des développeurs (20)

ASD2020-05b-MBSE-EricThomas.pdf
ASD2020-05b-MBSE-EricThomas.pdfASD2020-05b-MBSE-EricThomas.pdf
ASD2020-05b-MBSE-EricThomas.pdf
 
Industrialisation PHP - Canal+
Industrialisation PHP - Canal+Industrialisation PHP - Canal+
Industrialisation PHP - Canal+
 
System Center 2012 Configuration Manager R2 : Quoi de neuf ?
System Center 2012 Configuration Manager R2 : Quoi de neuf ?System Center 2012 Configuration Manager R2 : Quoi de neuf ?
System Center 2012 Configuration Manager R2 : Quoi de neuf ?
 
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
 
Python application packaging @ MeilleursAgents
Python application packaging @ MeilleursAgentsPython application packaging @ MeilleursAgents
Python application packaging @ MeilleursAgents
 
XebiCon'17 : Migration d’une application web vers un Paas Openshift - Akram B...
XebiCon'17 : Migration d’une application web vers un Paas Openshift - Akram B...XebiCon'17 : Migration d’une application web vers un Paas Openshift - Akram B...
XebiCon'17 : Migration d’une application web vers un Paas Openshift - Akram B...
 
Catalogue PFE 2019
Catalogue PFE 2019Catalogue PFE 2019
Catalogue PFE 2019
 
Docker nice meetup #1 construire, déployer et exécuter vos applications, ...
Docker nice meetup #1   construire, déployer et exécuter vos applications, ...Docker nice meetup #1   construire, déployer et exécuter vos applications, ...
Docker nice meetup #1 construire, déployer et exécuter vos applications, ...
 
Production logicielle, outils et pratiques
Production logicielle, outils et pratiquesProduction logicielle, outils et pratiques
Production logicielle, outils et pratiques
 
Spring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'tsSpring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'ts
 
12-Factor
12-Factor12-Factor
12-Factor
 
Open Source et Microsoft Azure, rêve ou réalité ?
Open Source et Microsoft Azure, rêve ou réalité ?Open Source et Microsoft Azure, rêve ou réalité ?
Open Source et Microsoft Azure, rêve ou réalité ?
 
Tech daysRetour d’expérience Big Compute & HPC sur Windows Azure [TechDays 2014]
Tech daysRetour d’expérience Big Compute & HPC sur Windows Azure [TechDays 2014]Tech daysRetour d’expérience Big Compute & HPC sur Windows Azure [TechDays 2014]
Tech daysRetour d’expérience Big Compute & HPC sur Windows Azure [TechDays 2014]
 
Présentation CoreOS
Présentation CoreOSPrésentation CoreOS
Présentation CoreOS
 
my_resume(fre)
my_resume(fre)my_resume(fre)
my_resume(fre)
 
TIAD 2016 : Accenture Devops Platform dans Microsoft Azure
TIAD 2016 : Accenture Devops Platform dans Microsoft AzureTIAD 2016 : Accenture Devops Platform dans Microsoft Azure
TIAD 2016 : Accenture Devops Platform dans Microsoft Azure
 
TechDays 2014 : retour d'expérience Kompass migration Java dans Azure
TechDays 2014 : retour d'expérience Kompass migration Java dans AzureTechDays 2014 : retour d'expérience Kompass migration Java dans Azure
TechDays 2014 : retour d'expérience Kompass migration Java dans Azure
 
SUSE Expert Days Paris 2018 – CaaSP
SUSE Expert Days Paris 2018 – CaaSPSUSE Expert Days Paris 2018 – CaaSP
SUSE Expert Days Paris 2018 – CaaSP
 
MERAZKA Messaoud
MERAZKA MessaoudMERAZKA Messaoud
MERAZKA Messaoud
 
REX Ansible
REX AnsibleREX Ansible
REX Ansible
 

More from Alexandre Touret

More from Alexandre Touret (7)

Améliorer les compétences et intrastructures avec les katas d'architecture
Améliorer les compétences et intrastructures avec les katas d'architectureAméliorer les compétences et intrastructures avec les katas d'architecture
Améliorer les compétences et intrastructures avec les katas d'architecture
 
Kubernetes & Co, beyond the hype
Kubernetes & Co, beyond the hypeKubernetes & Co, beyond the hype
Kubernetes & Co, beyond the hype
 
Améliorer les compétences et intrastructures avec les katas d'architecture
Améliorer les compétences et intrastructures avec les katas d'architectureAméliorer les compétences et intrastructures avec les katas d'architecture
Améliorer les compétences et intrastructures avec les katas d'architecture
 
[tours-jug19] Unifiez vos traitements Batch et Streaming avec Apache beam
[tours-jug19] Unifiez vos traitements Batch et Streaming avec Apache beam[tours-jug19] Unifiez vos traitements Batch et Streaming avec Apache beam
[tours-jug19] Unifiez vos traitements Batch et Streaming avec Apache beam
 
[orleans-tech-19] Unifiez vos traitements Batch et Streaming avec Apache beam
[orleans-tech-19] Unifiez vos traitements Batch et Streaming avec Apache beam[orleans-tech-19] Unifiez vos traitements Batch et Streaming avec Apache beam
[orleans-tech-19] Unifiez vos traitements Batch et Streaming avec Apache beam
 
[TNT19] Hands on: Objectif Top Architecte!
[TNT19] Hands on: Objectif Top Architecte![TNT19] Hands on: Objectif Top Architecte!
[TNT19] Hands on: Objectif Top Architecte!
 
Jenkins2 : le retour ( d'expérience) : TouraineTech 2018
Jenkins2 : le retour ( d'expérience) : TouraineTech 2018Jenkins2 : le retour ( d'expérience) : TouraineTech 2018
Jenkins2 : le retour ( d'expérience) : TouraineTech 2018
 

Checklist pour concevoir une application dans le cloud.10 conseils à l'attention des développeurs