Rossi Oddet

Blog d'un artisan développeur

Scala IO 2013 => Failure : The Good Parts

Présentateur

Viktor Klang, Directeur de l’ingénierie chez Typesafe.




La keynote du jour 1 de Scala IO

Cette session a constituée la Keynote du premier jour de l’événement.

Failure - The Bad Parts

Viktor a commencé par nous présenter les mauvais côté d’un plantage d’un système. Il l’a illustré avec l’exemple du projet Ariane 5 dont l’objectif principal était de créer un lanceur de satéllites géostationnaires. Le 4 juin 1996, ce projet qui représentait 10 ans de recherches, 7 milliards de dollars investis, s’est tristement fait remarqué lors d’un test d’un système de lancement “nouvelle génération” qui va entrainer la destruction d’une fusée quelques secondes après son décollage. On doit cet échec à une erreur de programmation qui va coûter près de 370 millions de dollars ce jour là.

Un plantage logiciel en production peut donc avoir des conséquences desastreuses tant pour l’entreprise et peut-être même pour les développeurs de la solution :)

Pour quelles raisons un système plante ?

  • Surchage du système (trop d’utilisateurs, système sous dimensionné, …)
  • Plantage logiciel
  • Plantage matériel (CPU, RAM, HDD, …)
  • etc…

Les causes possibles de plantage sont nombreux et de différentes natures. Les plantages font partis de la vie d’un système autant les prévoir.

Validation vs Failure

Viktor a mis l’accent sur les différences entre les tests que nous pouvons faire pour valider un système et un plantage.

Les différences mises en avant :

  • La validation d’un logiciel est intentionnelle tandis qu’un plantage est involontaire
  • On attend d’une validation des résultats alors qu’on attend d’un plantage une reprise du système

Que savons-nous vraiment des erreurs possibles de notre système ?

4 catégories :

  • Known-Knows
  • Known-Unknows
  • Unknown-Knowns
  • Unknown-Unknows

Tester ou vérifier son système ?

Les tests sont utiles pour la catégorie known-knowns.

Les vérifications du système sont utiles pour les catégories : Unkown-Unknowns, Known-Unknowns et Unknown-Unknowns.

Conclusion ? => Faites les 2 !

Attention à la Defensive Programming !

La peur d’une erreur inattendue de notre système pousse certains développeur à de la defensive programming qui conduit à :

  • une confusion dans la gestion des responsabilités
  • des blocs try…catch abusifs pour essayer de prévoir tous les cas d’erreurs possibles

Comment gérer ses risques d’erreur avec le :) ?

  • Distribution => Ne pas mettre tous ses oeufs dans le même panier.
  • Replication & Failover => Maintenez plusieurs exemplaires de votre contenu.
  • CircuitBreakers => Mettre en place des moyens pour éviter de maintenir la pression sur les parties du système en erreur. Par exemple, si une base de données ne répond plus, il ne sert à rien de continuer à l’intérogger continuellement tant que le problème n’est pas résolu.
  • Supervisor => Votre système doit vous notifier lorsqu’il y a des erreurs.
  • Bulkheading => Cloisonner votre système.
  • Compartmentalization => Compartimenter votre système pour éviter des effets en cascade sur tout votre système lorsqu’un composant est en erreur.
  • Graceful degradation => prévoir des modes de fonctionnement alternatifs en cas de plantage.

Faites des microservices !

Quelques citations du talk

Viktor a illustré ses propos avec de nombreuses citations, voici celles que j’ai notées :

An expert is a man who has made all the mistakes which can be made, in a narrow field.

Niels Bohr

Program testing can be used to show the presence of bugs, but never to show their absence !

Edsger Dijkstra

A distributed system is one in which the failure of a computer you didn’t even know existed can render your own computer unusable.

Leslie Lamport

An escalator can never break: it can only become stairs. You should never see an Escalator Temporarily Out Of Order sign, just Escalator Temporarily Stairs. Sorry for the convenience.

Mitch Hedberg

Résumé du talk par Viktor

Ce que j’en ai pensé

On a eu droit à un Viktor en forme qui maitrisait le flux de sa présentation, une session très intéressante sur la gestion des erreurs d’un système.

Ses slides ont du contenu intéressant, je n’ai pas pu trouver des traces de leur publication à ce jour. Vu que Viktor refait cette présentation en format Webinar le 30 octobre prochain, je pense qu’il les publiera après.

Cette session a été filmée, nous aurons probablement la possibilité de la revoir en ligne dans les prochaines semaines.

[Edit 06/11/2013 Ci-dessous la vidéo du Webinar du 30 octobre]

Comments