Skip to content

FBibonne/prez-green-it

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 

Repository files navigation

marp
true

Green IT côté serveur


Rappels Green IT

  • eco - conception de services numériques

Le Green IT c'est surtout ... à la conception

  • Créer une architecture applicative modulaire
  • Choisir un format de données adapté
  • Éliminer les fonctionnalités non essentielles
  • Réduire le volume de données stockées au strict nécessaire / Mettre en place une politique d'expiration et suppression des données
  • Faire preuve de frugalité dans la présentation et dans le déplacement des données

Le Green IT c'est surtout ... côté utilisateurs

  • Nombreuses bonnes pratiques pour le développement front
  • Limiter l'obsolescence des terminaux utilisateurs
  • Limiter la consommation des terminaux utilisateurs !

Parlons des serveurs

  • Particularité des serveurs et du réseau :
    • équipements rentabilisés
    • il faut en maîtriser la consommation
  • Attention aux impacts des développements sur les serveurs pour le client :
    • pagination
    • protocoles
    • caches côté client

Les serveurs et la consommation : principes

  • Installer le minimum requis sur le serveur
  • Mettre en place une architecture élastique
  • Réduire au nécessaire les logs des serveurs
  • Utiliser la version la plus récente du langage

Les serveurs et la consommation : configuration

  • de petits incréments ?

Limiter la consommation serveur et réseau : les caches

  • Principe des caches
    • ne pas redépenser du temps/de la ressource pour une donnée qui a déjà été obtenue
    • Durée de vie
    • Partage des caches

Schéma des caches

auto


Caches http (principe)

  • l'utilisation du cache http côté client s'envisage à chaque requête pour stoquer la réponse obtenue suivant les instructions dans les en-têtes.
  • lors de la réutilisation d'une ressource (url identique), le navigateur vérifie si elle est en cache et utilisable directement

Caches http (en-têtes pour les GET)

  • l'en-tête **Cache-Control reçue lors de la première réponse déclenche l'utilisation du cache côté client
    • Cache-Control: no-store : aucune mise en cache. à chaque nouvelle "requête" :
      • => ☹ recalcul côté serveur 🔥
      • => ☹ renvoi des données sur le réseau 🔥
    • Cache-Control: max-age=31536000 (s) : mise en cache pendant un an. à chaque nouvelle "requête" :
      • => 🙂 aucun recalcul côté serveur 🍃
      • => 🙂 aucun envoi des données sur le réseau 🍃
    • Cache-Control: no-cache : mise en cache, revalidation systématique. à chaque nouvelle requête :
      • => ☹ recalcul côté serveur 🔥
      • => 🙂 aucun envoi des données sur le réseau 🍃 (si pas de changement)
  • l'en tête ETag contient un hash de la ressource calculé côté serveur et utilisé lors de la revalidation d'une ressource mise en cache :
    • envoi d'une requête GET par le navigateur avec en-tête If-None-Match: ${etag.value}
      • réponse 304 Not modified sans body si le hash recalculé par le serveur est identique
      • réponse 200 OK avec la ressource dans le body sinon
  • enfin Cache-Control: must-revalidate, max-age=600 : must-revalidate indique au serveur qu'il doit revalider la ressource lorsqu'elle périme après 10 min

Exemple Cache-Control: must-revalidate, max-age=3600

Première requête à 10h

auto


Exemple Cache-Control: must-revalidate, max-age=3600

Deuxième requête à 10h30

auto


Exemple Cache-Control: must-revalidate, max-age=3600

Troisième requête à 11h01

auto


Exemple Cache-Control: must-revalidate, max-age=3600

Quatrième requête à 12h31

auto



Mettre en oeuvre le Cache-Control côté backend


Caches applicatifs

  • Au niveau du serveur applicatif :
    • limiter la sollicitation des autres ressources (réseau) 🍃🍃🍃
    • préserver les ressources de calcul 🍃
    • Répondre plus rapidement aux requêtes utilisateur 🙂
  • Infinispan à l'Insee
  • Principe simple :
    • pour une méthode idempotente
    • à chaque premier appel à la méthode avec des arguments donnés, on met en cache la réponse calculée
    • aux appels suivants avec les mêmes arguments, on ressert la même valeur sans refaire le calcul
  • Expiration et éviction
  • Cache partagé (distribué ou répliqué) entre plusieurs instances de l'application

Le cache applicatif avec Spring

  • Intégration de Infinispan avec Spring boot (ne pas oublier @EnableCaching pour utiliser l'abstraction Spring du cache)
  • Le cache applicatif permet au sein de l'application de cacher des réponses qui nécessitent beaucoup de calcul ou des données récupérées fréquemment de la BDD
  • Pour cacher les réponses d'un WS tiers, on privilégiera l'utilisation d'un cache de client http

Utilisation du cache d'un client http avec un WS tiers


Comment tester ?


Autres pistes côté serveur

  • Privilégier HTTP/2 à HTTP/1
  • Utiliser un serveur asynchrone...
  • Compression des documents
  • Compression des livrables (jlink / jdeps)
  • Bonnes pratiques pour les données / SQL :
    • Éviter le transfert d'une grande quantité de données pour réaliser un traitement
    • Éviter d'effectuer des requêtes SQL à l’intérieur d’une boucle / Optimiser les requêtes aux bases de données
    • Favoriser le "Request collapsing"

Green - it côté code et build :

  • Optimisation du code :
    • Éliminer les fonctionnalités non utilisées
    • Valider votre code avec un Linter
    • Plugin Sonar eco-code !
  • Optimisation du build :
    • mise en cache des dépendances
    • image de build optimisées

Comment me contacter

  • mails au format texte

Ressources

About

Présentation green it au séminaire dev

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published