Retour d'expérience sur TOMUSS

Thierry Excoffier.

LIRIS.

Département Informatique.

UFR Faculté des Sciences et Technologies

Université Lyon 1.

Université de Lyon.

TOMUSS : The Online Multi User Simple Spreadsheet

Tableur web partagé temps réel pour la saisie des notes et le suivi des étudiants.

  • Utilisé depuis 2008
  • 700 enseignants. 8000 étudiants. 700 UE.
  • Outil détournable à volonté (GPL).
  • Développé sur plusieurs années, sans cahier des charges. Merci Python

Pourquoi cet exposé

Contraintes de l'application

Tables utilisées un seul semestre.

Dizaines de colonnes, centaines de lignes.

http://perso.univ-lyon1.fr/thierry.excoffier/TOMUSS/SCREENSHOTS/table_en.png

Contraintes de l'application

Choix techniques

  • Un serveur écriture. Des serveurs en lecture.

Plugin, plugin, plugin et plugin

Un coeur d'application minimaliste.

Monkey Patching

Evite de patcher les sources pour les adapter.

<troll>Stockage sans BD</troll>

On a besoin d'une BD quand :

Rien de ceci n'est utile à TOMUSS.

Données stockées comme des programmes Python

L'interprétation du fichier regénère les structures de données internes au serveur.

Données stockées comme des programmes Python (2)

Sauvegardes journalières avec GIT efficaces.
  • 1.6 Go de données sur disque.
  • 776 sauvegardes occupant 462 Mo.
  • 90% des valeurs jamais modifiées.
Evolutions possibles sans casser les données
  • Pas besoin de traduire les données en cas de changement.
  • Structure de données internes libres.

Threads

Limiter l'utilisation des threads pour les :
  • calculs longs (plutôt lancer un processus)
  • interrogations de services distants, une thread par service.
  • tâches périodiques

Passage d'information entre threads avec append et pop

De préférence utiliser un framework qui cache tout.

Backtrace envoyée par mail

Avec les variables qui ont une méthode backtrace_html

http://perso.univ-lyon1.fr/thierry.excoffier/TOMUSS/SCREENSHOTS/backtraces_en.png

Analyse de la mémoire

Avoir des outils d'analyse de la mémoire utilisée pour détecter les fuites.

objgraph pour afficher

backtrace

Affichage de l'état du serveur

En temps réel : IPs, tickets, tables, actions, requêtes, verrous

http://perso.univ-lyon1.fr/thierry.excoffier/TOMUSS/SCREENSHOTS/state.png

Débuggage

Pouvoir exécuter du code dans le serveur en production.

Pouvoir savoir pour chaque élément HTML :

  • Quelle fonction l'a généré.
  • Quels sont ses attributs.
  • D'où viennent les données :-(

Si c'était à refaire

Certains choix aurait été meilleurs.

Mais je n'aurais pas eu une première version fonctionnelle rapidement.

Écrire le maximum de code en Python et le traduire en JavaScript.

Framework synchro Python/JS

Synchronisation des données transparentes entre clients et serveur, même classes.

Le rôle du serveur se limite à :
  • Assurer la sécurité.
  • Stocker les fragments Python dans les fichiers.
  • Échanger ces fragments entre les clients.

Donc très léger.

Gestion des caches

Chaque processus TOMUSS gère ses caches.

Solution : utiliser memcached

Conclusion

Python permet de changer complètement une application de manière progressive.

Python peut permettre d'adapter une application à votre problème, sans avoir besoin de modifier les sources.

Python permet de patcher et débugger un serveur en production.

Le support de l'unicode est pénible en Python2.

Merci

Des questions ?