SlideShare une entreprise Scribd logo
1  sur  55
Télécharger pour lire hors ligne
Alexandre Touret
Architecte / Développeur
#Java #API #CI #Cloud
#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’environnement
s
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
management.endpoints.enabled-by-default=true
management.health.livenessstate.enabled=true
management.health.readinessstate.enabled=true
management.endpoint.health.show-details=always
management.endpoint.health.probes.enabled=true
management.endpoint.health.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
▪ Micrometer
▪ Prometheus
▪ Grafana
31
32
management:
endpoints:
enabled-by-default: true
web:
exposure:
include: '*'
jmx:
exposure:
include: '*'
endpoint:
health:
show-details: always
enabled: true
probes:
enabled: true
shutdown:
enabled: true
prometheus:
enabled: true
metrics:
enabled: true
health:
livenessstate:
enabled: true
readinessstate:
enabled: true
datasource:
enabled: true
metrics:
web:
client:
request:
autotime:
enabled: true
Actuator
configuration
Metrics
configuration
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
✓ ...
34
Exemple
Migration Spring Boot, Tomcat, JDK
Testé en local → Dev → Recette
⇒ En 1 jour
35
La
configuration
37
▪ 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
38
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
39
Quid des fichiers
de
configuration ?
On peut les spécifier “comme des variables”
directement dans les config maps
On peut les externaliser
40
Les fichiers dans
les config maps
volumeMounts:
- mountPath: /config
name: configuration-volume
readOnly: true
[...]
volumes:
- configMap:
defaultMode: 420
name: configuration
name: configuration-volume
41
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 }}
42
Le fichier
values.yml
myapp:
minReplicaCount: "2"
maxReplicaCount: "6"
replicationThreesold: 80
43
Les templates
de fichier
apiVersion: v1
kind: ConfigMap
metadata:
name: configuration
labels:
[...]
data:
application.properties:
|-
{{ tpl (.Files.Get "conf/application.properties") . | nindent 4}}
44
Les templates
Le fichier application.properties
logging.level.org.hibernate.stat={{ .
Values.configmap.application.org_hibe
rnate_stat }}
logging.level.org.springframework.sec
urity={{ .Values.configmap.applicatio
n.org_springframework_security }}
45
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 }}
46
Logger
efficacement
L
’utilisation des
logs
Dans la console:
kubectl logs --tail
Agrégateur de logs (ex. ELK)
48
Flux de sortie
des containers
Docker
stdout & stderr
Inutile de configurer la sortie vers des fichiers
49
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 50
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
51
Distributed
tracing
You can identify and correlate your API calls on your
microservices based architecture by implement
Opentracing
52
53
Merci!
Des questions?
54
Checklist pour concevoir une application dans le cloud.10 conseils à l'attention des développeurs

Contenu connexe

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

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 ?Microsoft Technet France
 
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
 
Présentation CoreOS
Présentation CoreOSPrésentation CoreOS
Présentation CoreOSgcatt
 
ASD2020-05b-MBSE-EricThomas.pdf
ASD2020-05b-MBSE-EricThomas.pdfASD2020-05b-MBSE-EricThomas.pdf
ASD2020-05b-MBSE-EricThomas.pdfxmumiao
 
Python application packaging @ MeilleursAgents
Python application packaging @ MeilleursAgentsPython application packaging @ MeilleursAgents
Python application packaging @ MeilleursAgentsNicolas Mussat
 
Production logicielle, outils et pratiques
Production logicielle, outils et pratiquesProduction logicielle, outils et pratiques
Production logicielle, outils et pratiquesJohan Moreau
 
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, ...adri1s
 
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...Publicis Sapient Engineering
 
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
 
#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 CodeIgniterAtsé François-Xavier KOBON
 
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'tsJulien Wittouck
 
Rex Software Factories 20140117 - Ensim
Rex Software Factories 20140117 - EnsimRex Software Factories 20140117 - Ensim
Rex Software Factories 20140117 - EnsimLaurent Broudoux
 
System Center 2012 R2 en environnement hétérogène et hybride
System Center 2012 R2 en environnement hétérogène et hybrideSystem Center 2012 R2 en environnement hétérogène et hybride
System Center 2012 R2 en environnement hétérogène et hybrideMicrosoft
 
System Center 2012 R2 en environnement hétérogène et hybride
System Center 2012 R2 en environnement hétérogène et hybrideSystem Center 2012 R2 en environnement hétérogène et hybride
System Center 2012 R2 en environnement hétérogène et hybrideMicrosoft Technet France
 
Les containers docker vu par un chef cuisinier et un mécanicien
Les containers docker vu par un chef cuisinier et un mécanicienLes containers docker vu par un chef cuisinier et un mécanicien
Les containers docker vu par un chef cuisinier et un mécanicienRachid Zarouali
 
Road map to DevOps engineering - Elie Sirius
Road map to DevOps engineering -  Elie SiriusRoad map to DevOps engineering -  Elie Sirius
Road map to DevOps engineering - Elie SiriusGDG Bujumbura
 
Industrialisation PHP - Canal+
Industrialisation PHP - Canal+Industrialisation PHP - Canal+
Industrialisation PHP - Canal+ekino
 

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

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 ?
 
Infrastructure as code drupal
Infrastructure as code drupalInfrastructure as code drupal
Infrastructure as code drupal
 
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...
 
Présentation CoreOS
Présentation CoreOSPrésentation CoreOS
Présentation CoreOS
 
ASD2020-05b-MBSE-EricThomas.pdf
ASD2020-05b-MBSE-EricThomas.pdfASD2020-05b-MBSE-EricThomas.pdf
ASD2020-05b-MBSE-EricThomas.pdf
 
Python application packaging @ MeilleursAgents
Python application packaging @ MeilleursAgentsPython application packaging @ MeilleursAgents
Python application packaging @ MeilleursAgents
 
Production logicielle, outils et pratiques
Production logicielle, outils et pratiquesProduction logicielle, outils et pratiques
Production logicielle, outils et pratiques
 
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, ...
 
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...
 
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
 
#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
 
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
 
Rex Software Factories 20140117 - Ensim
Rex Software Factories 20140117 - EnsimRex Software Factories 20140117 - Ensim
Rex Software Factories 20140117 - Ensim
 
my_resume(fre)
my_resume(fre)my_resume(fre)
my_resume(fre)
 
System Center 2012 R2 en environnement hétérogène et hybride
System Center 2012 R2 en environnement hétérogène et hybrideSystem Center 2012 R2 en environnement hétérogène et hybride
System Center 2012 R2 en environnement hétérogène et hybride
 
System Center 2012 R2 en environnement hétérogène et hybride
System Center 2012 R2 en environnement hétérogène et hybrideSystem Center 2012 R2 en environnement hétérogène et hybride
System Center 2012 R2 en environnement hétérogène et hybride
 
REX Ansible
REX AnsibleREX Ansible
REX Ansible
 
Les containers docker vu par un chef cuisinier et un mécanicien
Les containers docker vu par un chef cuisinier et un mécanicienLes containers docker vu par un chef cuisinier et un mécanicien
Les containers docker vu par un chef cuisinier et un mécanicien
 
Road map to DevOps engineering - Elie Sirius
Road map to DevOps engineering -  Elie SiriusRoad map to DevOps engineering -  Elie Sirius
Road map to DevOps engineering - Elie Sirius
 
Industrialisation PHP - Canal+
Industrialisation PHP - Canal+Industrialisation PHP - Canal+
Industrialisation PHP - Canal+
 

Plus de Alexandre Touret

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'architectureAlexandre Touret
 
Kubernetes & Co, beyond the hype
Kubernetes & Co, beyond the hypeKubernetes & Co, beyond the hype
Kubernetes & Co, beyond the hypeAlexandre Touret
 
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'architectureAlexandre Touret
 
[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 beamAlexandre Touret
 
[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 beamAlexandre Touret
 
[TNT19] Hands on: Objectif Top Architecte!
[TNT19] Hands on: Objectif Top Architecte![TNT19] Hands on: Objectif Top Architecte!
[TNT19] Hands on: Objectif Top Architecte!Alexandre Touret
 
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 2018Alexandre Touret
 

Plus de 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