Cellenza accueillait le F# Paris le 17 Novembre dernier pour une soirée sur le bot Twitter FsiBot.

Mathias Fsharp Paris

FsiBot est un compte twitter un peu spécial créé par Mathias Brandewinder. Vous lui parlez en F# et il vous répond avec le code exécuté.

Cela a l’air simple en soi. C’était aussi ce que Mathias pensait ! Le temps de sa démonstration, de la version initiale à sa version finale (qui se trouve sur github), nous avons découvert les différentes étapes qui ont conduit à un service stable.

FsiBot est grossièrement en 3 parties :

  • Récupération des mentions sur twitter,
  • Compilation et exécution du code par F# Interactive
  • Renvoi du résultat

Techniquement FSIbot est, dans l’état, fonctionnel et est hébergé dans une machine virtuelle sur Azure. Mais comme tout service livré aux Twittos à l’imagination débordante, tout ne s’est pas bien passé:

  • Le service plante régulièrement, voire la VM elle-même sous les assauts des internautes
  • Il y avait de grosses failles de sécurité

La sécurisation du service a été réalisée en deux temps: rendre le service stable puis combler les failles. C’est là que le fait que FsiBot soit écrit en F# a énormément simplifié les choses.

FsiBot est en fait une succession de fonctions sans état (merci les langages fonctionnels), il a “suffi” d’ajouter des étapes de fiabilisation et de sécurisation du processus entre les étapes existantes: tout est une question de recomposition là où en langage objet il aurait peut-être fallu réécrire une bonne partie du programme.

La fiabilisation a consisté à séparer la partie récupération des traitements et celle de l’analyse via une queue de message de Azure Service Bus. En plus, cette queue de message supprime les doublons, dans notre cas ce sont des messages en double. La sécurisation a toutefois demandé un peu plus de travail : au lieu de lancer directement l’exécution à partir du code envoyé, le code est d’abord transformé en arbre syntaxique dans lequel certaines menaces sont recherchées (namespace ou classe dangereuses…) avant d’exécuter le code si aucune menace est trouvée.

Mathias nous a confié que la version initiale de FsiBot lui a pris autour de 4 heures un weekend, mais que les évolutions pour rendre le service stable lui ont pris au moins cinq fois plus de temps. C’est ici que l’on retrouve la deuxième leçon de la soirée : nous sous-estimons toujours la partie fiabilité ou sécurité. Si ces contraintes avait été prises en compte plus tôt et non pas dans l’urgence, leur écriture aurait sans doute pris moins de temps.

Je pensais avoir, au cours de cette soirée, une présentation de F# et de son intégration avec Azure mais, en fin de compte, nous avons eu un retour d’expérience enrichissant sur les problèmes d’un système en production très permissif et sur comment F# a permis de simplifier le développement des évolutions.

Quelques liens pour finir: