Administration système et programmation éco-responsable

Nicolas Froidure

Technical Leader @DiagRAMS
 

Crée des logiciels pour les startups innovantes dans les Hauts de France.

Vit dans le monde de Wayne.

 

Bloggue, Milite & Tweete à l'occasion.

Administration des systèmes d'information

L'administration système :

périmètre d'intervention

  • Archivage : stockage, sauvegarde, protection des données,
  • Continuité de service : sécurité, maintenance, performance et disponibilité,
  • Mesure : métrologie, surveillance,
  • Configuration : déploiement, paramétrage.

Enjeux éco-responsables

  • dimensionnement adapté des équipements,
  • usage raisonné des systèmes d'information,
  • création et mise à disposition d'infrastructures éco-responsables,
  • analyse et rationalisation du cycle de vie des données collectées.

Paramètrage

  • ne pas se contenter des paramètres par défaut
  • gérer la rotation/compression des journaux
  • limiter les périodes de rétention au minimum
  • privilégier la colocalisation en aval du sharding
  • lire la documentation complète (et plus)

Déploiements

  • utiliser l'infrastructure as code (OpenTofu)
  • provisionnement as code (Ansible)
  • mettre le build en cache dans la CI

Suivi technique

  • revalider régulièrement les choix technologiques
  • garder la trace des décisions (commentaires dans configuration / notes d'architecture)
  • monitorer l'évolution des usages
  • être à l'écoute des nouveaux outils

Environnements de préproduction

  • en local, utiliser Docker Compose
  • utiliser la CI de façon raisonnable
  • sous-dimensionner les environnements de test / développement
  • envisager le déploiement à la demande
  • en phase R/D, pas de preproduction

Utiliser le bon outil

  • bases relationnelles : PostgreSQL, MySQL,
  • caches : Redis, Memcached,
  • time series : ElasticSearch, Druid, InfluxDB,
  • documents : MongoDB, ElasticSearch,
  • search : ElasticSearch
  • queueing : RabbitMQ
  • streaming : Kafka
  • tâches plannifiées : Cron
  • graphes : Neo4J

Quelques ressources

Cas pratique

Dockerisation de l'environnement de dev et suppression des démons superflus de la machine de dev.

⚠️ Installez Docker dès l'affichage de cette diapositive.

Cas pratique

Quelques outils et leur paramétrage : Kafka, MySQL, ElasticSearch...

Cas pratique

Visite guidée d'une infrastructure de production

Programmation
éco-responsable

Enjeux d'ouverture et de connaissance

Analyse large requise, penser aux externalités.

Exemples de méconnaissance

aux impacts désastreux

  • le select dans le while
  • le code mort
  • l'effet de bord non-documenté ou méconnu
  • les carrés dans les ronds
  • le syndrome du marteau

Participer aux Meetups

On apprend toujours des autres.

Les ressources à gérer

  • RAM : mémoire immédiate
  • CPU/GPU : capacité de calcul (= temps)
  • I/Os : Entrées / Sorties (réseau, IPC...)
  • Uptime : démon ou processus fini ?
  • Stockage : mémoire long terme
  • Passage à l'échelle
  • Temps de développement

RAM

  • Représentation
  • Normalisation
  • Compression (+ CPU/GPU)
  • SWAP (+ I/O)

Représentation en mémoire d'un processus

Source : Wikipédia

Pile d'appel

- tail recursion
- stack overflow

 

CPU/GPU

  • Complexité algorithmique
  • Optimisation (compilation / langage)
  • Structures de données
  • Mémorisation ( + RAM)
  • Indexation (+ RAM)
  • Circuits spécialisés

Complexité algorithmique

 

Plus d'informations sur Wikipédia

I/Os

  • Programmation asynchrone
  • Parallélisme (multi-threading / cluster)
  • Borrow checking (Rust)
  • Mémorisation (+ RAM ou + Stockage)
  • Mise en mémoire tampon
  • Réseau : Compression (+ CPU/GPU)
  • Stockage : HD / SSD

Uptime

  • Les démons sont l'exception (cron / xinetd / systemd)
  • Laisser dormir ses services
  • Serverless
  • Planifier les tâches à une fréquence moindre
  • Traîtement par batch plutôt que realtime

Stockage

  • Représentation
  • Compression
  • Indexation
  • Normalisation
  • Cycle de vie

Ne pas utiliser PiFS ;)

Passage à l'échelle

  • privilégier la scalabilité horizontale
  • connaître les compromis du théorème CAP
  • mettre en place l'auto-scaling (shrink)
  • utiliser les principes horizontaux (map reduce)

Temps de développement

  • miser sur les tests automatisés pour une productivité constante
  • éviter d'anticiper les usages (WET vs DRY / YAGNI)
  • s'occuper de la performance quand on a des problèmes de performances

Outils de mesure

Importance du langage

Source: Langage study

Quelques ressources

Cas pratiques

  • Filtre de Bloom
  • HyperLogLog
  • Sharding keys
  • Map-Reduce
  • Binary trees
  • Hashing

Création logicielle responsable

Configuration par défaut

Les paramètres par défaut doivent être ceux qui sont le moins gourmands en ressource pour le cas majoritaire attendu.

Documentation

La documentation du logiciel doit être explicite en ce qui concerne les paramétrages et les compromis entre consommation de ressource et performance.

 

Documenter les dépendances logicielles et les configurations combinées et leurs impacts potentiels.

Distribution

  • Idéalement, les versions des applications desktop sont groupées.
  • L'application tire parti des librairies des systèmes cibles.
  • L'installateur ne doit contenir que le nécessaire.
  • Si possible, effectuer des mises à jour partielles.

Cas pratique

Les modules NPM

À suivre

Le web à l'heure du réchauffement climatique - Slides

Made with Slides.com